/** @file /world/world_server.h Základni tridy, konstanty a definice pro reprezentaci herniho sveta z pohledu herniho serveru @author Petr Wolf */ #ifndef WORLD_SERVER_H #define WORLD_SERVER_H #include "common/Msg.h" #include "common/mm.h" #include "ai/PathFind/pathfind.h" #include "world/world.h" #include "world/world_engine.h" #include "world/history.h" #include "world/world_messages.h" #include namespace World{ /// Handler pro zpravy modulu WorldServer RVAL WORLD_SERVER_MSG_HANDLER(MESSAGE_ID mid, SENDER s, PARAM p); /// Vlakno pro spusteni hry int game_start_thread(void * data); /// buffer pro zaznamenani klientu, odpojenych jiz behem nahravani extern int game_start_disconnections[MAX_PLAYERS]; /// Interni stavy modulu WORLD_SERVER enum WORLD_SERVER_STATE { /// pocatecni stav WSS_EMPTY /// zahajeni nahravani ,WSS_LOAD_STARTED /// nactena herni data ,WSS_WORLD_LOADED /// pozvanky pro klienty rozeslany ,WSS_INVITATIONS_SENT /// hraci pripojeni ,WSS_PLAYERS_CONNECTED /// hra pripravena k zahajeni ,WSS_GAME_PREPARED /// hra zahajena ,WSS_GAME_STARTED /// hra ukoncena ,WSS_GAME_ENDED }; /// Hlavni trida serveroveho modulu World. class TWorldServer { private: /// id nactene mapy int mapId; /// reprezentace herniho sveta World::TWorld world; /// modul pro realizaci hernich akci World::TWorldServerEngine engine; /// historie hernich akci World::THistory history; /// prijem zprav TMessageTransceiver transceiver; /// interni stav WORLD_SERVER_STATE state; /// podminky pro ukonceni hry END_GAME_CONDITION end_game_condition; /// pomocna promena pro zaznamenani prubehu vypoctu hry AI bool ai_on_turn; /// minimodul PathFind // ai_ns::pathfind_ns::CPathFindEngine * pathFindTransciever; /** Zaslani synchronizacnich informaci @param player_id id hrace, kteremu je synchronizacni balicek urcen (0 = vsichni) @param action_id id akce, ktera ma byt odeslana klientovi, resp. klientum @param action objekt akce: jeji typ a data */ void synchro(PLAYER_ID player, ACTION_ID action_id, World::TAction & action); friend RVAL WORLD_SERVER_MSG_HANDLER(MESSAGE_ID mid, SENDER s, PARAM p); friend int game_start_thread(void * data); friend class TWorldClient; friend class TWorldServerEngine; public: /// Konstruktor TWorldServer(); /// Destruktor ~TWorldServer(); /// Spusteni modulu void init(); /// Ukonceni prace modulu void shutdown(); /// Synchronizace dat s klienty void synchronize(); /// oznameni o chybe pri zpracovani void sendErrorReply(TPackage * package, int error); /// Nahrani mapy daneho ID void loadMap(int map_id); /// Ulozeni sveta do daneho souboru void saveMap(char * filename); void loadPlayers(PACKET_PLAYER_SETTINGS players[MAX_PLAYERS]); /// Let in just one client .. should be rewriten void connectPlayer(int clientId); void connectPlayers(); /// Priprava spusteni hry void prepareGame(); /// Spusteni hry void startGame(); /// Ukonceni hry void endGame(); /// Globalni funkce po inicializovani message handleru static void initWorldServer(); /// Globalni funkce pro zniceni a uklid modulu static void destroyWorldServer(); }; /** Globalni promenna, pro primy pristup k serverovemu modulu World */ extern TWorldServer * world_server; int WorldServer_SendMessage(ClientData Data, Tcl_Interp * pInterp, int argc, char * argv[]); } //namespace #endif /*****************************************************************************/