/* Web Polygraph http://www.web-polygraph.org/ * (C) 2003-2006 The Measurement Factory * Licensed under the Apache License, Version 2.0 */ #ifndef POLYGRAPH__SERVER_SERVER_H #define POLYGRAPH__SERVER_SERVER_H #include "xstd/Socket.h" #include "xstd/FileScanner.h" #include "runtime/Agent.h" #include "runtime/XactFarm.h" #include "runtime/BcastRcver.h" #include "server/SrvXact.h" #include "server/SrvConnMgr.h" class RndDistr; class OidRec; class PopModel; class ContentSel; class SrvCfg; class SrvSharedCfgs; class ServerSym; class Server: public Agent, public FileScanner::User, public SrvConnMgr::User, public BcastRcver { public: enum ReqTypes { rptBasic = 1, rpt302Found }; public: static void LogState(OLog &log); static void Farm(XactFarm *aFarm); public: Server(); ~Server(); void configure(const ServerSym *cfg, const NetAddr &aHost); virtual void start(); virtual void stop(); // xactions need access to this int hostIdx() const { return theHostIdx; } SrvCfg *cfg() { return theCfg; } PopModel *popModel(); void selectRepType(ObjId &oid); void noteXactDone(SrvXact *x); virtual void noteReadReady(int fd); virtual void noteConnReady(Connection *conn); virtual int logCat() const; virtual const UniqId &id() const; protected: void configureContents(const ServerSym *cfg); void startXact(Connection *conn); void deaf(); virtual void noteLogEvent(BcastChannel *ch, OLog &log); protected: static XactFarm *TheXacts; static SrvSharedCfgs *TheSharedCfgs; SrvCfg *theCfg; // server configuration (maybe shared) SrvConnMgr *theConnMgr; Socket theSock; int theHostIdx; // index into the HostMap int theReqCount; // number of accepted requests FileScanReserv theReserv; }; #endif