cdev-1.7.2n
This commit is contained in:
120
extensions/cdevGenericServer/include/cdevServer.h
Normal file
120
extensions/cdevGenericServer/include/cdevServer.h
Normal file
@@ -0,0 +1,120 @@
|
||||
#if !defined (_CDEV_SERVER_H_)
|
||||
#define _CDEV_SERVER_H_
|
||||
|
||||
#include "SignalManager.h"
|
||||
#include "cdevServerTools.h"
|
||||
#include "cdevMessage.h"
|
||||
#include "cdevContextMap.h"
|
||||
#include "cdevTagMap.h"
|
||||
#include "ClientInfo.h"
|
||||
#include "ServerInfo.h"
|
||||
#include "cdevGenericServerTags.h"
|
||||
|
||||
// *****************************************************************************
|
||||
// * class CLIPClientSession :
|
||||
// *
|
||||
// * This class also allows the server to associate certain data with a
|
||||
// * specific client...
|
||||
// *
|
||||
// * context: This is a pointer to the most recently used context from the
|
||||
// * cdevContextMap.
|
||||
// *****************************************************************************
|
||||
class GENERIC_SERVER_API CLIPClientSession : public ClientSession
|
||||
{
|
||||
private:
|
||||
cdevData *context;
|
||||
|
||||
public:
|
||||
CLIPClientSession ( int SocketID, int ClientID, int LocalID )
|
||||
: ClientSession(SocketID, ClientID, LocalID),
|
||||
context(NULL)
|
||||
{
|
||||
}
|
||||
virtual ~CLIPClientSession ( void ) { }
|
||||
cdevData * getContext ( void ) { return context; }
|
||||
void setContext ( cdevData * cxt ) { context = cxt; }
|
||||
};
|
||||
|
||||
|
||||
// *****************************************************************************
|
||||
// * class CLIPSocketSession :
|
||||
// *
|
||||
// * This class allows the developer to associate additional information with
|
||||
// * a particular socket...
|
||||
// *
|
||||
// * contextMap : a table of cdevData contexts that can be retrieved by index
|
||||
// *
|
||||
// * tagMap : the table for mapping cdevData tags from the remote system
|
||||
// * to the tag table associated with this system.
|
||||
// *****************************************************************************
|
||||
class GENERIC_SERVER_API CLIPSocketSession : public SocketSession, public ClientInfoStruct
|
||||
{
|
||||
private:
|
||||
cdevContextMap contextMap;
|
||||
cdevTagMap tagMap;
|
||||
|
||||
public:
|
||||
CLIPSocketSession ( int SocketID )
|
||||
: SocketSession ( SocketID )
|
||||
{
|
||||
}
|
||||
virtual ~CLIPSocketSession ( void ) { }
|
||||
cdevContextMap & ContextMap ( void ) { return contextMap; }
|
||||
cdevTagMap & TagMap ( void ) { return tagMap; }
|
||||
};
|
||||
|
||||
|
||||
// *****************************************************************************
|
||||
// * cdevServer :
|
||||
// * This is the cdevServer class. It is responsible for establishing a
|
||||
// * listening socket, and then responding to all incoming and outgoing
|
||||
// * messages.
|
||||
// *****************************************************************************
|
||||
class GENERIC_SERVER_API cdevServer : public cdevSessionManager
|
||||
{
|
||||
public:
|
||||
typedef enum { SUCCESS = 0,
|
||||
UNINITIALIZED,
|
||||
CANT_OPEN_SOCKET,
|
||||
CANT_REGISTER_LISTENER,
|
||||
CANT_REGISTER_SERVER,
|
||||
CANT_REGISTER_TIMER
|
||||
} ServerInitStatus;
|
||||
|
||||
protected:
|
||||
char * serverName;
|
||||
class ClientAcceptor * acceptor;
|
||||
cdevNameServerManager * timer;
|
||||
ServerInitStatus status;
|
||||
ServerInfo * serverInfo;
|
||||
|
||||
public:
|
||||
static cdevGenericServerTagDef tags;
|
||||
static SignalManager SigManager;
|
||||
static sig_atomic_t Finished;
|
||||
|
||||
static void runServer (void);
|
||||
|
||||
cdevServer (char * DomainName, char * ServerName, unsigned short Port, double Rate);
|
||||
cdevServer (void);
|
||||
virtual ~cdevServer (void);
|
||||
int startServer (char * DomainName, char * ServerName, unsigned short Port, double Rate, int searchForPort=0);
|
||||
|
||||
virtual void registerClient ( short localID );
|
||||
virtual void unregisterClient ( short localID );
|
||||
|
||||
virtual ClientSession * newClientSession ( int SocketID, int ClientID, int LocalID );
|
||||
virtual SocketSession * newSocketSession ( int SocketID );
|
||||
virtual void deleteSocketSession ( SocketSession *socket );
|
||||
|
||||
virtual int dequeue (cdevMessage * &message);
|
||||
void processLocal (cdevMessage * &message);
|
||||
virtual cdevPacket * decodePacket (cdevPacketBinary * input);
|
||||
virtual cdevPacket * decodePacket (cdevMessage * message);
|
||||
virtual cdevPacketBinary * encodePacket (cdevPacket * input);
|
||||
virtual cdevPacketBinary * encodePacket (cdevMessage * message);
|
||||
virtual int operational (void) { return (status==0)?1:0; }
|
||||
virtual ServerInitStatus getInitStatus(void) { return status; }
|
||||
};
|
||||
|
||||
#endif /* _CDEV_SERVER_H_ */
|
||||
Reference in New Issue
Block a user