From: Gonzalo A. <ga...@us...> - 2006-09-08 14:28:21
|
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(); } |