ClientConnection.cpp
Go to the documentation of this file.00001 //*** ClientConnection.cpp *** 00002 00003 #include "ClientConnection.h" 00004 #include "ServerConnection.h" 00005 #include "Platform_Network_Client.h" 00006 #include "DynamicBuffer.h" 00007 #include "StaticBuffer.h" 00008 #include "Debug.h" 00009 00010 00011 // Static memory buffer used when running in local communications (non networked) mode 00012 DynamicBuffer* ClientConnection::localClientCommunicationsBuffer_ = 0; 00013 int ClientConnection::localClientCommunicationsBuffer_referenceCount_ = 0; 00014 00015 00016 //*** Constructor *** 00017 00018 ClientConnection::ClientConnection(): 00019 localCommunications_(false), 00020 localCommunications_OnConnected_Done_(true), 00021 connectionTCP_(0), 00022 connectionUDP_(0), 00023 connectionHTTP_(false) 00024 { 00025 00026 } 00027 00028 00029 //*** Destructor *** 00030 00031 ClientConnection::~ClientConnection() 00032 { 00033 if (connectionTCP_) 00034 { 00035 connectionTCP_->Disconnect(); 00036 delete connectionTCP_; 00037 } 00038 00039 if (connectionUDP_) 00040 { 00041 connectionUDP_->Disconnect(); 00042 delete connectionUDP_; 00043 } 00044 00045 if (connectionHTTP_) 00046 { 00047 connectionHTTP_->Disconnect(); 00048 delete connectionHTTP_; 00049 } 00050 00051 if (localCommunications_) 00052 { 00053 localClientCommunicationsBuffer_referenceCount_--; 00054 if (localClientCommunicationsBuffer_referenceCount_==0) 00055 { 00056 delete localClientCommunicationsBuffer_; 00057 localClientCommunicationsBuffer_=0; 00058 } 00059 } 00060 } 00061 00062 00063 //*** Connect *** 00064 00065 void ClientConnection::Connect(const char* address, int port, bool useTCP, bool useUDP) 00066 { 00067 Assert(!localCommunications_ && !connectionTCP_ && !connectionUDP_ && !connectionHTTP_,"Already connected"); 00068 if (localCommunications_ || connectionTCP_ || connectionUDP_ || connectionHTTP_) 00069 { 00070 return; 00071 } 00072 00073 Assert(false,"Not implemented yet"); 00074 } 00075 00076 00077 //*** ConnectSP *** 00078 00079 void ClientConnection::ConnectSP() 00080 { 00081 Assert(!localCommunications_ && !connectionTCP_ && !connectionUDP_ && !connectionHTTP_,"Already connected"); 00082 if (localCommunications_ || connectionTCP_ || connectionUDP_ || connectionHTTP_) 00083 { 00084 return; 00085 } 00086 00087 localCommunications_=true; 00088 00089 if (!localClientCommunicationsBuffer_) 00090 { 00091 localClientCommunicationsBuffer_=new DynamicBuffer(1024); 00092 localClientCommunicationsBuffer_referenceCount_++; 00093 } 00094 00095 localCommunications_OnConnected_Done_=false; 00096 } 00097 00098 00099 00100 //*** ConnectHTTP *** 00101 00102 void ClientConnection::ConnectHTTP(const char* address, int port, const char* resource) 00103 { 00104 Assert(!localCommunications_ && !connectionTCP_ && !connectionUDP_ && !connectionHTTP_,"Already connected"); 00105 if (localCommunications_ || connectionTCP_ || connectionUDP_ || connectionHTTP_) 00106 { 00107 return; 00108 } 00109 00110 // Create connection 00111 if (Platform::GetPlatform_Network()) 00112 { 00113 connectionHTTP_=Platform::GetPlatform_Network()->CreateClient(Platform_Network::ConnectionMode_TCP,address,port); 00114 } 00115 00116 00117 // Send initial request to server, to test connection 00118 00119 00120 Assert(false,"Not implemented yet"); 00121 } 00122 00123 00124 //*** Disconnect *** 00125 00126 void ClientConnection::Disconnect() 00127 { 00128 if (connectionTCP_) 00129 { 00130 connectionTCP_->Disconnect(); 00131 delete connectionTCP_; 00132 connectionTCP_=0; 00133 } 00134 00135 if (connectionUDP_) 00136 { 00137 connectionUDP_->Disconnect(); 00138 delete connectionUDP_; 00139 connectionUDP_=0; 00140 } 00141 00142 if (connectionHTTP_) 00143 { 00144 connectionHTTP_->Disconnect(); 00145 delete connectionHTTP_; 00146 connectionHTTP_=0; 00147 } 00148 00149 if (localCommunications_) 00150 { 00151 localClientCommunicationsBuffer_referenceCount_--; 00152 if (localClientCommunicationsBuffer_referenceCount_==0) 00153 { 00154 delete localClientCommunicationsBuffer_; 00155 localClientCommunicationsBuffer_=0; 00156 } 00157 00158 localCommunications_=false; 00159 OnDisconnected(); 00160 localCommunications_OnConnected_Done_=true; 00161 } 00162 00163 } 00164 00165 00166 //*** Update *** 00167 00168 void ClientConnection::Update(float deltaTime) 00169 { 00170 // This is for local communications mode (non networked mode) 00171 if (localCommunications_) 00172 { 00173 // Send the OnConnected event if this is the first time we Update after a Connect 00174 if (!localCommunications_OnConnected_Done_) 00175 { 00176 OnConnected(); 00177 localCommunications_OnConnected_Done_=true; 00178 } 00179 00180 // Process all messages in the buffer 00181 if (localClientCommunicationsBuffer_) 00182 { 00183 localClientCommunicationsBuffer_->SetPosition(0); 00184 while (localClientCommunicationsBuffer_->GetPosition()<localClientCommunicationsBuffer_->GetSize()) 00185 { 00186 int size=0; 00187 localClientCommunicationsBuffer_->Read(&size); 00188 OnReceiveData(StaticBuffer(static_cast<unsigned char*>(localClientCommunicationsBuffer_->GetPointer())+localClientCommunicationsBuffer_->GetPosition(),size)); 00189 localClientCommunicationsBuffer_->SetPosition(localClientCommunicationsBuffer_->GetPosition()+size); 00190 } 00191 00192 localClientCommunicationsBuffer_->Clear(false); 00193 } 00194 } 00195 } 00196 00197 00198 //*** TransmitTCP *** 00199 00200 void ClientConnection::TransmitTCP(const StaticBuffer& data) 00201 { 00202 Assert(localCommunications_,"Network support not implemented yet"); 00203 00204 if (localCommunications_) 00205 { 00206 Assert(ServerConnection::localServerCommunicationsBuffer_,"Local communications buffer not created"); 00207 if (!ServerConnection::localServerCommunicationsBuffer_) 00208 { 00209 return; 00210 } 00211 00212 int size=data.GetSize(); 00213 ServerConnection::localServerCommunicationsBuffer_->Write(&size); 00214 ServerConnection::localServerCommunicationsBuffer_->Write(static_cast<const unsigned char*>(data.GetPointer()), size); 00215 } 00216 } 00217 00218 00219 //*** TransmitUDP *** 00220 00221 void ClientConnection::TransmitUDP(const StaticBuffer& data) 00222 { 00223 Assert(localCommunications_,"Network support not implemented yet"); 00224 00225 if (localCommunications_) 00226 { 00227 Assert(ServerConnection::localServerCommunicationsBuffer_,"Local communications buffer not created"); 00228 if (!ServerConnection::localServerCommunicationsBuffer_) 00229 { 00230 return; 00231 } 00232 00233 int size=data.GetSize(); 00234 ServerConnection::localServerCommunicationsBuffer_->Write(&size); 00235 ServerConnection::localServerCommunicationsBuffer_->Write(static_cast<const unsigned char*>(data.GetPointer()), size); 00236 } 00237 } 00238
Reproduction/republishing of any material on this site without permission is strictly prohibited.
