#ifndef DANBIASSERVER_GAME_SESSION_H #define DANBIASSERVER_GAME_SESSION_H #include "NetworkSession.h" #include #include namespace DanBias { class ClientObject; class GameSession :private NetworkSession, public Oyster::Thread::IThreadObject { public: struct GameSessionDescription { NetworkSession* owner; Utility::DynamicMemory::DynamicArray> clients; }; public: GameSession(); virtual~GameSession(); void Run(GameSessionDescription& desc); void Join(Utility::DynamicMemory::SmartPointer client); private: //overriden NetworkSession functions void Close(); void AttachClient(Utility::DynamicMemory::SmartPointer client, Oyster::IPostBox *box = 0) override; Utility::DynamicMemory::SmartPointer DetachClient(Oyster::Network::NetworkClient* client) override; Utility::DynamicMemory::SmartPointer DetachClient(ClientObject* client) override; Utility::DynamicMemory::SmartPointer DetachClient(short ID) override; void Send(Oyster::Network::CustomNetProtocol& protocol) override; void Send(Oyster::Network::CustomNetProtocol& protocol, int ID) override; void SetPostbox(Oyster::IPostBox *box) override; void CloseSession(NetworkSession* clientDestination) override; private: //overriden Threading functions void ThreadEntry( ) override; void ThreadExit( ) override; bool DoWork ( ) override; private: bool Init(GameSessionDescription& desc); void Frame(); void ParseEvents(); void ParseProtocol(Oyster::Network::CustomNetProtocol& p, DanBias::ClientObject& c); private: NetworkSession* owner; Oyster::IPostBox *box; Oyster::Thread::OysterThread worker; };//End GameSession }//End namespace DanBias #endif // !DANBIASSERVER_GAME_SESSION_H