00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "ExManagerNetwork.h"
00025
00026 bool ExManagerNetwork::m_flag = false;
00027 ExManagerNetwork* ExManagerNetwork::m_instance = NULL;
00028
00029 ExManagerNetwork* ExManagerNetwork::CreateSingleton(void){
00030 Guard(ExManagerNetwork* ExManagerNetwork::CreateSingleton(void))
00031 if(!m_flag)
00032 {
00033 m_flag = true;
00034 m_instance = new ExManagerNetwork;
00035 }else
00036 {
00037 std::cout<<"Error singleton already created"<<std::endl;
00038 }
00039 return m_instance;
00040 UnGuard
00041 }
00042
00043 ExManagerNetwork::ExManagerNetwork(void)
00044 {
00045
00046 }
00047
00048 ExManagerNetwork::~ExManagerNetwork(void)
00049 {
00050 }
00051
00052 void ExManagerNetwork::Init(void)
00053 {
00054 m_ShowNetStat=false;
00055 m_ShowMessage=false;
00056 m_ShowSayBar=false;
00057 m_ServerIp="No Connexion";
00058 m_Connected=false;
00059 m_LastPing=0.0f;
00060 SetAskForCommand(false);
00061 SetAskForExclusifCommand(false);
00062
00063 }
00064
00065 void ExManagerNetwork::Draw(void)
00066 {
00067 if(m_ShowNetStat)DrawNetStat();
00068 if(m_ShowMessage)DrawMessage();
00069
00070
00071 }
00072
00073 void ExManagerNetwork::DrawNetStat(void)
00074 {
00075
00076
00077 ExNihilo::DrawCadre(glutGet(GLUT_WINDOW_WIDTH)-135, glutGet(GLUT_WINDOW_HEIGHT)-80, 130,50,0.2f,0.0f,0.6f,0.9f);
00078 ExNihilo::WriteToScreen(glutGet(GLUT_WINDOW_WIDTH)-130,glutGet(GLUT_WINDOW_HEIGHT)-65,1,1,1,"NetStat");
00079 std::string buffserver("Server :");
00080 buffserver=buffserver+m_ServerIp;
00081 ExNihilo::WriteToScreen(glutGet(GLUT_WINDOW_WIDTH)-130,glutGet(GLUT_WINDOW_HEIGHT)-50,1,1,1,buffserver);
00082 char buffping[255];
00083 Ping();
00084 sprintf(buffping,"Ping :%4.4f",m_LastPing);
00085 ExNihilo::WriteToScreen(glutGet(GLUT_WINDOW_WIDTH)-130,glutGet(GLUT_WINDOW_HEIGHT)-35,1,1,1,buffping);
00086 }
00087
00088 void ExManagerNetwork::DrawMessage(void)
00089 {
00090
00091 ExNihilo::DrawCadre(10,glutGet(GLUT_WINDOW_HEIGHT)-80,glutGet(GLUT_WINDOW_WIDTH)-150,50,0.8f,0.0f,0.0f,0.9f);
00092 ExNihilo::WriteToScreen(15,glutGet(GLUT_WINDOW_HEIGHT)-65,1,1,1,m_BuffOldSay3);
00093 ExNihilo::WriteToScreen(15,glutGet(GLUT_WINDOW_HEIGHT)-50,1,1,1,m_BuffOldSay2);
00094 ExNihilo::WriteToScreen(15,glutGet(GLUT_WINDOW_HEIGHT)-35,1,1,1,m_BuffOldSay1);
00095
00096 if(m_ShowSayBar)
00097 {
00098 ExNihilo::DrawCadre(10,glutGet(GLUT_WINDOW_HEIGHT)-25,glutGet(GLUT_WINDOW_WIDTH)-15,20,0.7f,0.1f,0.0f,0.9f);
00099 ExNihilo::WriteToScreen(15,glutGet(GLUT_WINDOW_HEIGHT)-10,1,1,1,m_BuffSay);
00100 }
00101 }
00102
00103 void ExManagerNetwork::Ping(void)
00104 {
00105 if(glutGet(GLUT_ELAPSED_TIME)%100==0)
00106 {
00107 if(m_Connected)
00108 {
00109 int time;
00110 ExCMessage buffmsg;
00111 time=glutGet(GLUT_ELAPSED_TIME);
00112 buffmsg.SetType(MESSAGE_PING);
00113 m_SocketClient.SendMessage(buffmsg);
00114 m_SocketClient.RecvMessage(buffmsg);
00115 m_LastPing=((float)(glutGet(GLUT_ELAPSED_TIME)-time)/100);
00116 }
00117 }
00118 }
00119
00120 void ExManagerNetwork::Reset(void)
00121 {
00122 Guard(void ExManagerNetwork::Reset(void))
00123 UnGuard
00124 }
00125
00126
00127 void ExManagerNetwork::Connect(void)
00128 {
00129 Guard(void ExManagerNetwork::Connect(void))
00130 m_SocketClient.Init();
00131 if(m_SocketClient.Connect()==0)
00132 {
00133 m_Connected=true;
00134 m_ServerIp="192.168.0.1";
00135 m_ShowNetStat=true;
00136 ExCMessage buffmsg;
00137
00138
00139 m_SocketClient.RecvMessage(buffmsg);
00140
00141
00142
00143 buffmsg.SetType(MESSAGE_LOGIN);
00144 buffmsg.SetMessage("Client");
00145 m_SocketClient.SendMessage(buffmsg);
00146
00147 }else
00148 {
00149
00150 m_SocketClient.Close();
00151 }
00152 UnGuard
00153 }
00154
00155 void ExManagerNetwork::Disconnect(void)
00156 {
00157 Guard(void ExManagerNetwork::Disconnect(void))
00158 ExCMessage buffmsg;
00159 buffmsg.SetType(MESSAGE_QUIT);
00160 m_SocketClient.SendMessage(buffmsg);
00161 m_SocketClient.Close();
00162 m_Connected=false;
00163 m_ServerIp="No Connexion";
00164
00165 UnGuard
00166 }
00167
00168 void ExManagerNetwork::Say(void)
00169 {
00170 Guard(void ExManagerNetwork::Say(void))
00171 SetAskForCommand(true);
00172 SetAskForExclusifCommand(true);
00173 SetSayBarState(true);
00174 UnGuard
00175 }
00176
00177 ExCAction ExManagerNetwork::InputAction(ExCAction Action)
00178 {
00179 Guard(ExCAction ExManagerNetwork::InputAction(ExCAction Action))
00180 switch(Action.m_Action)
00181 {
00182 case SHOW_NET_STAT:
00183 SetNetstatState(true);
00184 break;
00185 case HIDE_NET_STAT:
00186 SetNetstatState(false);
00187 break;
00188 case SHOW_CHAT:
00189 SetMessageState(true);
00190 break;
00191 case HIDE_CHAT:
00192 SetMessageState(false);
00193 break;
00194 case CONNECT:
00195 Connect();
00196 break;
00197 case DISCONNECT:
00198 Disconnect();
00199 break;
00200 case SAY:
00201 Say();
00202 break;
00203 }
00204 if(Action.m_NextAction){return *Action.m_NextAction;}
00205 else{return NOTHING;}
00206 UnGuard
00207 }
00208
00209 ExCAction ExManagerNetwork::InputCommand(ExCCommand Command)
00210 {
00211 Guard(ExCAction ExManagerNetwork::InputCommand(ExCCommand Command))
00212
00213
00214 switch(Command.m_Command)
00215 {
00216 case KEYBOARD_UP_ARROW_LEFT:
00217 if(m_BuffSay.size()>0)
00218 {
00219 m_BuffSay.erase(m_BuffSay.end()-1,m_BuffSay.end());
00220 }
00221 return NOTHING;
00222
00223 case KEYBOARD_UP_BACKSPACE:
00224 if(m_BuffSay.size()>0)
00225 {
00226 m_BuffSay.erase(m_BuffSay.end()-1,m_BuffSay.end());
00227 }
00228 return NOTHING;
00229
00230 case KEYBOARD_DOWN_ENTER:
00231 if(m_Connected)
00232 {
00233 ExCMessage buffmsg;
00234 buffmsg.SetType(MESSAGE_SAY);
00235 buffmsg.SetMessage(m_BuffSay);
00236 m_SocketClient.SendMessage(buffmsg);
00237 }
00238 SetAskForCommand(false);
00239 SetAskForExclusifCommand(false);
00240 m_BuffOldSay3=m_BuffOldSay2;
00241 m_BuffOldSay2=m_BuffOldSay1;
00242 m_BuffOldSay1=m_BuffSay;
00243 SetSayBarState(false);
00244 m_BuffSay.erase(m_BuffSay.begin(),m_BuffSay.end());
00245
00246 return NOTHING;
00247 }
00248
00249 ExNihilo::AddKeyToBuffer(Command.m_Command,m_BuffSay);
00250 return NOTHING;
00251 UnGuard
00252 }