Update of /cvsroot/mod-c/ehtml/samples
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv14857/samples
Added Files:
02session.cpp
Log Message:
Session usage sample.
--- NEW FILE: 02session.cpp ---
// $Id: 02session.cpp,v 1.1 2006/09/08 14:28:17 garana Exp $
#include <ehtml.h>
#include <EHTMLApplication.h>
#include <Page.h>
#include <Label.h>
#include <http_log.h>
#include <time.h>
using namespace std;
const string COUNT("count");
class SessionEHTMLApp: public EHTMLApplication {
SessionDriver* driver;
Session* session;
size_t cnt;
public:
size_t CNT() const { return cnt; }
size_t CNT() { return cnt; }
Label lblSessionDriver;
Label lblCount;
SessionEHTMLApp(request_context* req): EHTMLApplication(req),
session(NULL), cnt(0),
lblSessionDriver("No session driver. Use EHTMLSessionType."),
lblCount("count = no session"){ ; }
virtual int DoInitStage() {
int dev = EHTMLApplication::DoInitStage();
if (dev)
return dev;
if (Page) {
Page->Add(&lblSessionDriver);
Page->Add(&lblCount);
}
driver = SessionDriver::Selected();
if (driver == NULL)
return 0;
if (!driver->Connect()) {
ap_log_error(APLOG_MARK, LOG_ERR, 0,
Request->GetRequestContext()->r->server,
"Error connecting to session server: %s",
strerror(errno));
lblSessionDriver.SetText("Error connecting to session store.");
lblCount.SetText(strerror(errno));
return 0;
}
lblSessionDriver.SetText("Session driver = " + driver->name());
session = driver->Get();
if (session == NULL) {
SessionIDDriver* iddriver = SessionIDDriver::Selected();
if (iddriver != NULL) {
SessionID id = iddriver->GenerateID();
session = new Session(id);
} else {
lblCount.SetText("no session ID driver. Use EHTMLSessionIDType.");
}
}
if (session != NULL) {
Session::iterator i = session->find(COUNT);
if (i == session->end()) {
(*session)[COUNT] = "1";
cnt = 1;
} else {
cnt = atoi((*session)[COUNT].c_str());
(*session)[COUNT] = cnt + 1;
}
lblCount.SetText("count = " + (*session)[COUNT]);
}
return dev;
}
virtual int DoFinishStage() {
if (session && driver) {
if (!driver->Save(session)) {
ap_log_error(APLOG_MARK, LOG_ERR, 0,
Request->GetRequestContext()->r->server,
"Error saving session (hex=%s): %s",
session->ID().hex().c_str(),
strerror(errno));
}
if (!driver->Disconnect()) {
ap_log_error(APLOG_MARK, LOG_ERR, 0,
Request->GetRequestContext()->r->server,
"Error disconnecting to session server: %s",
strerror(errno));
}
}
return EHTMLApplication::DoFinishStage();
}
};
extern "C" int ehtml_run(request_context* rc) {
SessionEHTMLApp ap(rc);
Page p;
Label l("Hello World.");
time_t now = time(NULL);
Label l2(ctime(&now));
p.SetTitle("Hello World.");
p.Add(&l);
p.Add(&l2);
ap.SetPage(&p);
return ap.Run();
}
|