network_client.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #ifndef NETWORK_CLIENT_H
00013 #define NETWORK_CLIENT_H
00014
00015 #ifdef ENABLE_NETWORK
00016
00017 #include "network_internal.h"
00018
00020 class ClientNetworkGameSocketHandler : public ZeroedMemoryAllocator, public NetworkGameSocketHandler {
00021 private:
00022 struct PacketReader *savegame;
00023 byte token;
00024
00026 enum ServerStatus {
00027 STATUS_INACTIVE,
00028 STATUS_COMPANY_INFO,
00029 STATUS_JOIN,
00030 STATUS_NEWGRFS_CHECK,
00031 STATUS_AUTH_GAME,
00032 STATUS_AUTH_COMPANY,
00033 STATUS_AUTHORIZED,
00034 STATUS_MAP_WAIT,
00035 STATUS_MAP,
00036 STATUS_ACTIVE,
00037 STATUS_END
00038 };
00039
00040 ServerStatus status;
00041
00042 protected:
00043 friend void NetworkExecuteLocalCommandQueue();
00044 friend void NetworkClose(bool close_admins);
00045 static ClientNetworkGameSocketHandler *my_client;
00046
00047 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_FULL);
00048 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_BANNED);
00049 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_ERROR);
00050 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_COMPANY_INFO);
00051 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_CLIENT_INFO);
00052 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_NEED_GAME_PASSWORD);
00053 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_NEED_COMPANY_PASSWORD);
00054 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_WELCOME);
00055 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_WAIT);
00056 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_MAP_BEGIN);
00057 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_MAP_SIZE);
00058 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_MAP_DATA);
00059 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_MAP_DONE);
00060 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_JOIN);
00061 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_FRAME);
00062 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_SYNC);
00063 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_COMMAND);
00064 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_CHAT);
00065 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_QUIT);
00066 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_ERROR_QUIT);
00067 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_SHUTDOWN);
00068 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_NEWGAME);
00069 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_RCON);
00070 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_CHECK_NEWGRFS);
00071 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_MOVE);
00072 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_COMPANY_UPDATE);
00073 DECLARE_GAME_RECEIVE_COMMAND(PACKET_SERVER_CONFIG_UPDATE);
00074
00075 static NetworkRecvStatus SendNewGRFsOk();
00076 static NetworkRecvStatus SendGetMap();
00077 static NetworkRecvStatus SendMapOk();
00078 void CheckConnection();
00079 public:
00080 ClientNetworkGameSocketHandler(SOCKET s);
00081 ~ClientNetworkGameSocketHandler();
00082
00083 NetworkRecvStatus CloseConnection(NetworkRecvStatus status);
00084 void ClientError(NetworkRecvStatus res);
00085
00086 static NetworkRecvStatus SendCompanyInformationQuery();
00087
00088 static NetworkRecvStatus SendJoin();
00089 static NetworkRecvStatus SendCommand(const CommandPacket *cp);
00090 static NetworkRecvStatus SendError(NetworkErrorCode errorno);
00091 static NetworkRecvStatus SendQuit();
00092 static NetworkRecvStatus SendAck();
00093
00094 static NetworkRecvStatus SendGamePassword(const char *password);
00095 static NetworkRecvStatus SendCompanyPassword(const char *password);
00096
00097 static NetworkRecvStatus SendChat(NetworkAction action, DestType type, int dest, const char *msg, int64 data);
00098 static NetworkRecvStatus SendSetPassword(const char *password);
00099 static NetworkRecvStatus SendSetName(const char *name);
00100 static NetworkRecvStatus SendRCon(const char *password, const char *command);
00101 static NetworkRecvStatus SendMove(CompanyID company, const char *password);
00102
00103 static void Send();
00104 static bool Receive();
00105 static bool GameLoop();
00106 };
00107
00108 typedef ClientNetworkGameSocketHandler MyClient;
00109
00110 void NetworkClient_Connected();
00111
00112 extern CompanyID _network_join_as;
00113
00114 extern const char *_network_join_server_password;
00115 extern const char *_network_join_company_password;
00116
00117 #endif
00118
00119 #endif