00001 #ifndef __SERVERGAMEMANAGER_H__
00002 #define __SERVERGAMEMANAGER_H__
00003
00004 #include "Game/GameDll.h"
00005 #include "Game/GameManager.h"
00006 #include "Game/ServerPlayer.h"
00007 #include "Game/ServerWorld.h"
00008 #include "Game/GameServerState.h"
00009
00010 class KClient;
00011
00012
00013 class GAME_API KServerGameManager : public KGameManager
00014 {
00015 private:
00016 KList<KClient*>* m_pClientList;
00017
00018 protected:
00019 u32 m_NextObjectHandle;
00020 u32 m_NextPlayerHandle;
00021 KTIME m_LastFrameTime;
00022 u32 m_FrameRate;
00023 u32 m_Frame;
00024 KGAMESERVERSTATE m_State;
00025
00026 static void CommandFakeMan( KStr Argument, void* pContext );
00027 static void CommandFrameRate( KStr Argument, void* pContext );
00028 virtual KPlayer* CreatePlayer() { return new KServerPlayer(); }
00029 virtual KServerWorld* AllocWorld() { return new KServerWorld( this ); }
00030 virtual void OnGetWorld( KServerPlayer* pPlayer );
00031
00032 public:
00033 KServerGameManager( KUDPSocket* pSocket, KList<KClient*>* pClientList, KVERSION GameVersion );
00034 virtual ~KServerGameManager();
00035
00036 bool Send( KClient* pClient, KNetMsg& Msg );
00037 bool SendAll( KNetMsg& Msg );
00038 virtual bool Init();
00039 virtual bool End();
00040 virtual bool Manage();
00041 virtual bool MoveFrame();
00042
00043 virtual void OnMessage( KClient* pClient, KGAMEMSGTYPE MsgType, KNetMsg& Msg );
00044 virtual void OnConnect( KClient* pClient );
00045 virtual void OnDisconnect( KClient* pClient );
00046 virtual void DoWelcome( KClient* pClient );
00047 virtual void DoGoodBye( KClient* pClient );
00048 virtual bool StartGame( KGameInfos* pGameInfos );
00049 virtual bool EndGame();
00050
00051 bool NotifyChat( KClient* pClient, char* pText );
00052
00053 KServerWorld* GetpServerWorld() { return (KServerWorld*)m_pWorld; }
00054
00055 bool OnGetGameInfos( KClient* pClient );
00056 bool OnSetClientState( KClient* pClient, KNetMsg& Msg );
00057
00058
00059 bool OnCreatePlayer( KClient* pClient, KStr& sName );
00060 bool OnDeletePlayer( KClient* pClient );
00061 void OnChangeName( KServerPlayer* pPlayer, KStr& sName );
00062 bool NotifyCreatePlayer( KClient* pClient, KServerPlayer* pPlayer );
00063 bool NotifyCreateAllPlayers( KClient* pClient );
00064 bool NotifyPlayer( KClient* pClient, KServerPlayer* pPlayer );
00065 bool NotifyAllPlayers( KClient* pClient );
00066
00067
00068 K3DObject* CreateAndNotityObject( KHANDLE hPlayer, KGAMEOBJECTTYPE Type, KVector& Pos, KVector& Rot );
00069 bool SetPosAndNotityObject( KHANDLE Handle, KVector& Pos, KVector& Rot );
00070 bool CreateAndNotityAllObjects( KServerPlayer* pPlayer );
00071 bool NotityObject( KServerPlayer* pPlayer, K3DObject* pObject );
00072 bool NotityObjectAllPlayers( K3DObject* pObject );
00073
00074 virtual void NotifyFrame();
00075
00076 KServerPlayer* GetpFirstServerPlayer() { return (KServerPlayer*)GetpFirstPlayer(); }
00077 KServerPlayer* GetpNextServerPlayer( KServerPlayer* pPlayer ) { return (KServerPlayer*)GetpNextPlayer( pPlayer ); }
00078
00079 KServerPlayer* GetpPlayerByClient( KClient* pClient );
00080 bool SendChatText( KClient* pClient, char* pText );
00081
00082 KList<KClient*>* GetClientList() { return m_pClientList; }
00083 };
00084
00085 #endif __SERVERGAMEMANAGER_H__