00001 #include <vector>
00002 #include <string>
00003
00004 #include "gamestate.h"
00005 #include "net/Game.h"
00006 #include "net/NetClient.h"
00007 #include "net/NetCallback.h"
00008
00009 #include "menu/widgets.h"
00010
00011 class ConnectMenu : public GameState {
00012 public:
00013 ConnectMenu(MMNet::NetClient *client);
00014 virtual ~ConnectMenu() {}
00015
00016 void init();
00017 void update();
00018 void exit();
00019 void display();
00020
00021 void createServerList(const char * serverName);
00022 void joinGame(TNL::Address addr);
00023
00024
00025 MMGUI::Textbox * IP_Textbox;
00026 MMGUI::Textbox * PlayerName_Textbox;
00027
00028
00029 MMGUI::Textbox *nameField;
00030
00031 MMGUI::Textbox *manualField;
00032
00033
00034
00035 void serverListClear();
00036 void serverListAdd(TNL::Address addr);
00037
00038 void setMessage(const char *text);
00039 void clearMessage();
00040
00041 bool findingServers();
00042 unsigned int canFindAgain;
00043 MMGUI::Button* findButton;
00044
00045 private:
00046 MMGUI::Textfield *messages;
00047
00048
00049 MMGUI::Frame* serverFrame;
00050
00051 MMGUI::Frame* initMessageFrame(enum MMGUI::WidgetAlign align);
00052 MMGUI::Frame* initServerListFrame(enum MMGUI::WidgetAlign align);
00053 MMGUI::Frame* initFindServersFrame(enum MMGUI::WidgetAlign align);
00054 MMGUI::Frame* initManualConnectFrame(enum MMGUI::WidgetAlign align);
00055
00056 };
00057
00058 class ConnectMenuCallback : public MMNet::NetCallback {
00059 public:
00060 ConnectMenu * cm;
00061 ConnectMenuCallback(ConnectMenu * cm);
00062
00063
00064 void ServerDiscovered(TNL::Address serverAddress, TNL::BitStream *stream);
00065
00066 void JoinApproved(TNL::Address serverAddress, TNL::BitStream *stream);
00067
00068 void JoinDenied(TNL::Address serverAddress, TNL::BitStream *stream);
00069
00070 void GameConnectionFailed(const char *errmsg);
00071
00072 void GameConnectionEstablished(TNL::Address serverAddress);
00073
00074 void GameDisconnected(TNL::NetConnection::TerminationReason reason, const char *edString);
00075
00076 };
00077