00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _TMW_SERVER_GAMEHANDLER_
00023 #define _TMW_SERVER_GAMEHANDLER_
00024
00025 #include "game-server/character.hpp"
00026 #include "net/connectionhandler.hpp"
00027 #include "net/netcomputer.hpp"
00028 #include "utils/tokencollector.hpp"
00029
00030 enum
00031 {
00032 CLIENT_LOGIN = 0,
00033 CLIENT_CONNECTED,
00034 CLIENT_CHANGE_SERVER,
00035 CLIENT_QUEUED
00036 };
00037
00038 struct GameClient: NetComputer
00039 {
00040 GameClient(ENetPeer *peer)
00041 : NetComputer(peer), character(NULL), status(CLIENT_LOGIN) {}
00042 Character *character;
00043 int status;
00044 };
00045
00049 class GameHandler: public ConnectionHandler
00050 {
00051 public:
00055 GameHandler();
00056
00060 bool startListen(enet_uint16 port);
00061
00065 void sendTo(Character *, MessageOut &msg);
00066
00070 void kill(Character *);
00071
00075 void prepareServerChange(Character *);
00076
00080 void completeServerChange(int id, const std::string &token,
00081 const std::string &address, int port);
00082
00086 void updateCharacter(int charid, int partyid);
00087
00092 void addPendingCharacter(const std::string &token, Character *);
00093
00098 void
00099 tokenMatched(GameClient* computer, Character* character);
00100
00105 void
00106 deletePendingClient(GameClient* computer);
00107
00112 void
00113 deletePendingConnect(Character* character);
00114
00119 GameClient *getClientByNameSlow(const std::string &);
00120
00121 protected:
00122 NetComputer *computerConnected(ENetPeer *);
00123 void computerDisconnected(NetComputer *);
00124
00128 void sendError(NetComputer *computer, int id, std::string errorMsg);
00129
00133 void processMessage(NetComputer *computer, MessageIn &message);
00134
00138 void handleWalk(GameClient *client, MessageIn &message);
00139
00143 void handleSendPost(GameClient *client, MessageIn &message);
00144
00148 void handleGetPost(GameClient *client, MessageIn &message);
00149
00150 private:
00151
00155 TokenCollector<GameHandler, GameClient *, Character *> mTokenCollector;
00156
00157 };
00158
00159 extern GameHandler *gameHandler;
00160
00161 #endif