physicallayer/nettypes.h
00001 /* 00002 Crystal Space Entity Layer 00003 Copyright (C) 2005 by Christian Van Brussel 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License as published by the Free Software Foundation; either 00008 version 2 of the License, or (at your option) any later version. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public 00016 License along with this library; if not, write to the Free 00017 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 */ 00019 00020 #ifndef __CEL_PL_NETTYPES__ 00021 #define __CEL_PL_NETTYPES__ 00022 00023 #include "cstypes.h" 00024 #include "csutil/scf.h" 00025 #include "csutil/csstring.h" 00026 #include "csutil/bitarray.h" 00027 00028 #include "physicallayer/persist.h" 00029 #include "physicallayer/entity.h" 00030 #include "celtool/persisthelper.h" 00031 00032 struct iCelEntity; 00033 class celGameInfoList; 00034 struct celGameInfoListIterator; 00035 struct iCelGameServer; 00036 struct iCelGameClient; 00037 class csBitArray; 00038 struct celPlayerListIterator; 00039 00050 enum celNetworkGameType 00051 { 00052 CEL_NET_UNDEF = 0, 00053 CEL_NET_SINGLEPLAYER, 00054 CEL_NET_LOCAL, 00055 CEL_NET_PUBLIC, 00056 CEL_NET_PLAYBACK 00057 }; 00058 00060 // TODO: these types must be changed if there are more than 256 values 00061 typedef uint8 celClientEventType; 00062 typedef uint8 celServerEventType; 00063 typedef uint8 celNetworkLinkType; 00064 00082 enum celPlayerNetworkState 00083 { 00084 CEL_NET_PLAYER_UNDEF = 0, 00085 CEL_NET_PLAYER_NOT_CONNECTED, 00086 CEL_NET_PLAYER_CONNECTING, 00087 CEL_NET_PLAYER_PLAYING, 00088 CEL_NET_PLAYER_DISCONNECTED, 00089 CEL_NET_PLAYER_UNREACHABLE, 00090 CEL_NET_PLAYER_LOST 00091 }; 00092 00128 enum celServerNetworkState 00129 { 00130 CEL_NET_SERVER_UNDEF = 0, 00131 CEL_NET_SERVER_NOT_CONNECTED, 00132 CEL_NET_SERVER_INVALID_HOSTNAME, 00133 CEL_NET_SERVER_TRYING_CONNECTION, 00134 CEL_NET_SERVER_CONNECTING, 00135 CEL_NET_SERVER_REJECTED_BAD_GAME, 00136 CEL_NET_SERVER_REJECTED_BAD_PROTOCOL, 00137 CEL_NET_SERVER_REJECTED_BAD_PASSWORD, 00138 CEL_NET_SERVER_REJECTED_SINGLEPLAYER, 00139 CEL_NET_SERVER_REJECTED_UNAUTHORIZED, 00140 CEL_NET_SERVER_REJECTED_MAX_PLAYERS, 00141 CEL_NET_SERVER_LOADING_DATA, 00142 CEL_NET_SERVER_PLAYING, 00143 CEL_NET_SERVER_DISCONNECTED, 00144 CEL_NET_SERVER_UNREACHABLE, 00145 CEL_NET_SERVER_LOST, 00146 CEL_NET_SERVER_KICKED 00147 }; 00148 00152 class celGameInfo 00153 { 00154 public: 00156 uint32 game_id; 00157 00159 csString game_name; 00160 00162 csString hostname; 00163 00165 uint8 ip_address[32]; 00166 00168 uint16 port_nb; 00169 00171 size_t max_players; 00172 00174 size_t current_num_players; 00175 00177 csString password; 00178 00183 csRef<iCelDataBuffer> custom_data; 00184 00185 celGameInfo () 00186 { 00187 game_id = 0; 00188 memset (ip_address, 0, 32); 00189 port_nb = 0; 00190 max_players = 0; 00191 current_num_players = 0; 00192 custom_data = 0; 00193 } 00194 00198 bool MatchFilter (celGameInfo* filter); 00199 00206 int Compare (celGameInfo* other, celGameInfoList* filters); 00207 }; 00208 00212 class celGameInfoList 00213 { 00214 public: 00215 virtual size_t GetCount () const = 0; 00216 virtual celGameInfo* Get (size_t index) const = 0; 00217 virtual size_t Add (celGameInfo* player) = 0; 00218 virtual bool Remove (celGameInfo* player) = 0; 00219 virtual bool Remove (size_t n) = 0; 00220 virtual void RemoveAll () = 0; 00221 virtual size_t Find (celGameInfo* player) const = 0; 00222 00227 void Filter (celGameInfo* game_info); 00228 00233 void Sort (celGameInfoList* filters); 00234 }; 00235 00239 class celPlayer 00240 { 00241 public: 00243 uint32 player_id; 00244 00246 csString player_name; 00247 00249 csString hostname; 00250 00252 uint8 ip_address[32]; 00253 00255 uint16 port_nb; 00256 00257 celPlayer () 00258 { 00259 player_id = 0; 00260 memset (ip_address, 0, 32); 00261 port_nb = 0; 00262 } 00263 00264 bool operator == (const celPlayer& other) const 00265 { 00266 return hostname.Compare(other.hostname) && port_nb == other.port_nb; 00267 } 00268 00269 void PrintDebugInfo () 00270 { 00271 printf("Player data:\n"); 00272 printf("\tID: %d\n", player_id); 00273 printf("\tname: %s\n", player_name.GetData()); 00274 printf("\thostname: %s\n", hostname.GetData()); 00275 printf("\taddress: "); 00276 int i = 0; 00277 for ( ; i < 32; i++) 00278 printf("%d", ip_address[i]); 00279 printf("\n"); 00280 printf("\tport: %d\n", port_nb); 00281 } 00282 }; 00283 00284 SCF_VERSION (iCelPlayerList, 0, 0, 1); 00285 00289 struct iCelPlayerList 00290 { 00291 public: 00292 virtual size_t GetCount () const = 0; 00293 virtual celPlayer* Get (size_t index) const = 0; 00294 virtual size_t Add (celPlayer* player) = 0; 00295 virtual bool Remove (celPlayer* player) = 0; 00296 virtual bool Remove (size_t n) = 0; 00297 virtual void RemoveAll () = 0; 00298 virtual size_t Find (celPlayer* player) const = 0; 00299 //virtual bool Contains (celPlayer* player) = 0; 00300 }; 00301 00305 class celServerEventData 00306 { 00307 public: 00311 celServerEventType event_type; 00312 00316 csTicks event_time; 00317 00321 csRef<iCelDataBuffer> event_data; 00322 00327 bool reliable; 00328 }; 00329 00333 class celClientEventData 00334 { 00335 public: 00339 celClientEventType event_type; 00340 00344 csTicks event_time; 00345 00349 csRef<iCelDataBuffer> event_data; 00350 00354 bool reliable; 00355 00356 celClientEventData () : 00357 event_type (0), 00358 event_time (0), 00359 event_data (0), 00360 reliable (true) 00361 {} 00362 00363 celClientEventData (celClientEventData &event) : 00364 event_type (event.event_type), 00365 event_time (event.event_time), 00366 event_data (event.event_data), 00367 reliable (event.reliable) 00368 {} 00369 }; 00370 00374 class celNetworkLinkData 00375 { 00376 public: 00380 celNetworkLinkType link_type; 00381 00385 csRef<iCelEntity> linked_entity; 00386 00390 csBitArray persistence_mask; 00391 00397 csTicks period; 00398 00399 celNetworkLinkData () {} 00400 00401 celNetworkLinkData (celNetworkLinkType _link_type, iCelEntity* _linked_entity, 00402 csBitArray _persistence_mask, csTicks _period) : 00403 link_type (_link_type), 00404 linked_entity (_linked_entity), 00405 persistence_mask (_persistence_mask), 00406 period (_period) 00407 {} 00408 00409 ~celNetworkLinkData () {} 00410 }; 00411 00416 struct celNetworkServerStats 00417 { 00418 // The latency of the network transmission to the player 00419 csTicks latency; 00420 // The state of the connection 00421 celServerNetworkState network_state; 00422 // Instant flow of the data sent by the client, in bytes per second 00423 size_t incoming_bandwidth; 00424 // Instant flow of the data sent by the server to this client, in bytes 00425 // per second 00426 size_t outgoing_bandwidth; 00427 }; 00428 00433 struct celNetworkPlayerStats 00434 { 00435 // The latency of the network transmission to the player 00436 csTicks latency; 00437 // Instant flow of the data sent by the client, in bytes per second 00438 size_t incoming_bandwidth; 00439 // Instant flow of the data sent by the server to this client, in bytes 00440 // per second 00441 size_t outgoing_bandwidth; 00442 }; 00443 00448 struct celNetworkPlayerTotalStats 00449 { 00450 // Instant flow of all the data sent by the clients, in bytes per second 00451 size_t total_incoming_bandwidth; 00452 // Instant flow of all the data sent by the server to the clients, in bytes 00453 // per second 00454 size_t total_outgoing_bandwidth; 00455 }; 00456 00457 #endif // __CEL_PL_NETTYPES__
Generated for CEL: Crystal Entity Layer by doxygen 1.4.7