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