#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; }; public: GameSession(); virtual~GameSession(); void Run(const GameSessionDescription& desc); void AttachClient(Utility::DynamicMemory::SmartPointer client, Oyster::IPostBox *box = 0) override; private: //overriden NetworkSession functions void Close(); 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: void Init(); void Frame(); void ParseEvents(); private: NetworkSession* owner; Oyster::IPostBox *box; Oyster::Thread::OysterThread worker; #pragma region TESTING void EricLogicInitFunc(); void EricLogicFrameFunc(); void EricsLogicTestingProtocalRecieved(ClientObject* reciever, Oyster::Network::CustomNetProtocol& protocol); #pragma endregion };//End GameSession }//End namespace DanBias #endif // !DANBIASSERVER_GAME_SESSION_H