physicallayer/network.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_NETWORK__ 00021 #define __CEL_PL_NETWORK__ 00022 00023 #include "cstypes.h" 00024 #include "csutil/scf.h" 00025 #include "csutil/strset.h" 00026 00027 struct iCelEntity; 00028 struct iCelDataBuffer; 00029 enum celNetworkGameType; 00030 enum celServerNetworkState; 00031 enum celPlayerNetworkState; 00032 struct celGame; 00033 class celGameInfo; 00034 class celPlayer; 00035 struct iCelPlayerList; 00036 class celServerEventData; 00037 class celClientEventData; 00038 class celNetworkLinkData; 00039 class celGameFactoryManager; 00040 class celGameClientManager; 00041 class celGameServerManager; 00042 struct celNetworkServerStats; 00043 struct celNetworkPlayerStats; 00044 struct celNetworkServerTotalStats; 00045 00050 struct iCelGame : public virtual iBase 00051 { 00052 SCF_INTERFACE (iCelGame, 0, 0, 1); 00053 00057 virtual celNetworkGameType GetGameType () const = 0; 00058 00062 virtual celGameInfo* GetGameInfo () = 0; 00063 00068 virtual bool IsServerAvailable () const = 0; 00069 00073 virtual iCelGameServer* GetGameServer () const = 0; 00074 00079 virtual bool IsClientAvailable () const = 0; 00080 00084 virtual iCelGameClient* GetGameClient () const = 0; 00085 }; 00086 00098 struct iCelGameFactory : public virtual iBase 00099 { 00100 SCF_INTERFACE (iCelGameFactory, 0, 0, 1); 00101 00108 virtual void SetGameName (csString game_name) = 0; 00109 00114 virtual csString GetGameName () const = 0; 00115 00128 virtual void SetProtocolVersion (const csString protocol_version) = 0; 00129 00135 virtual csString GetProtocolVersion () const = 0; 00136 00143 virtual void RegisterGameFactoryManager ( 00144 celGameFactoryManager* manager) = 0; 00145 00155 virtual void StartSearchForGameList (celNetworkGameType game_type, 00156 celGameInfo* filter = 0) = 0; 00157 00162 virtual void StopSearchForGameList () = 0; 00163 00167 virtual iCelGame* GetCurrentGame () const = 0; 00168 00182 virtual bool CreateNewGame (celNetworkGameType game_type, 00183 celGameInfo* game_info, celPlayer* player = 0) = 0; 00184 00197 virtual bool ConnectGame (celGameInfo* game_info, 00198 celPlayer* player) = 0; 00199 00205 virtual bool CloseGame () = 0; 00206 00210 virtual void StartRecordingGame (csString filename) = 0; 00211 00215 virtual void StopRecordingGame () = 0; 00216 00223 virtual void StartPlayBackGame (csString filename, 00224 csTicks start_time, csTicks stop_time) = 0; 00225 }; 00226 00237 class celGameFactoryManager 00238 { 00239 public: 00240 virtual ~celGameFactoryManager () {} 00241 00250 virtual void GameInfoReceived (celGameInfo* game_info, 00251 csTicks server_latency) {} 00252 00268 virtual void ServerNetworkStateChanged (celServerNetworkState new_state, 00269 celServerNetworkState previous_state, csString reason = "") = 0; 00270 00282 virtual bool InitClient (iCelGame* game) { return true; } 00283 00291 virtual bool InitServer (iCelGame* game) { return true; } 00292 00301 virtual csPtr<iCelDataBuffer> GetClientEventBaseline ( 00302 celClientEventType event_type) { return 0; } 00303 00309 virtual csPtr<iCelDataBuffer> GetServerEventBaseline ( 00310 celServerEventType event_type) { return 0; } 00311 00317 virtual csPtr<iCelDataBuffer> GetNetworkLinkBaseline ( 00318 celNetworkLinkType link_type) { return 0; } 00319 00320 }; 00321 00335 struct iCelGameServer : public virtual iBase 00336 { 00337 SCF_INTERFACE (iCelGameServer, 0, 0, 1); 00338 00343 virtual void RegisterServerManager (celGameServerManager* manager) = 0; 00344 00349 virtual void SetAdministrator (celPlayer* new_admin) = 0; 00350 00355 virtual celPlayer* GetAdministrator () = 0; 00356 00360 virtual iCelPlayerList* GetPlayerList () = 0; 00361 00365 virtual celPlayerNetworkState GetPlayerState (celPlayer* player) = 0; 00366 00372 virtual void KickPlayer (celPlayer* player, csString reason) = 0; 00373 00381 virtual iCelPlayerList* CreateChannel (csStringID channel_id) = 0; 00382 00387 virtual void RemoveChannel (csStringID channel_id) = 0; 00388 00392 virtual void LaunchServerEvent (celPlayer* player, 00393 celServerEventData &event_data) = 0; 00394 00398 virtual void LaunchServerEvent (csStringID channel_id, 00399 celServerEventData &event_data) = 0; 00400 00417 virtual void SetNetworkLink (celPlayer* player, 00418 celNetworkLinkData &link_data, bool player_controlled) = 0; 00419 00429 virtual void ChangeLinkControl (iCelEntity* entity, celPlayer* player, 00430 bool player_controlled) = 0; 00431 00442 virtual void SetNetworkLink (csStringID channel_id, 00443 celNetworkLinkData &link_data) = 0; 00444 00449 virtual void RemoveNetworkLink (iCelEntity* entity, celPlayer* player) = 0; 00450 00455 virtual void RemoveNetworkLink (iCelEntity* entity, 00456 csStringID channel_id) = 0; 00457 00465 virtual void ChangeLevel (celGameInfo* new_game) = 0; 00466 00472 virtual void SetNetworkPeriod (csTicks period) = 0; 00473 00478 virtual void SetMaximumBandwidth (size_t width) = 0; 00479 00485 virtual void SetClientTimeOut (csTicks timeout) = 0; 00486 00490 virtual void GetNetworkPlayerStats (celPlayer* player, 00491 celNetworkPlayerStats& stats) const = 0; 00492 00496 virtual void GetNetworkTotalStats ( 00497 celNetworkPlayerTotalStats& stats) const = 0; 00498 }; 00499 00512 struct iCelGameClient : public virtual iBase 00513 { 00514 SCF_INTERFACE (iCelGameClient, 0, 0, 1); 00515 00520 virtual void RegisterClientManager (celGameClientManager* manager) = 0; 00521 00525 virtual celPlayer* GetPlayer () = 0; 00526 00532 virtual void UpdatePlayer (celPlayer* player) = 0; 00533 00537 virtual csTicks ConvertServerClock (csTicks server_time) const = 0; 00538 00543 virtual uint GetMappedID (uint entity_id) const = 0; 00544 00549 virtual iCelEntity* GetMappedEntity (uint entity_id) const = 0; 00550 00554 virtual void SetReady () = 0; 00555 00559 virtual void LaunchClientEvent (celClientEventData &event_data) = 0; 00560 00564 virtual void SetNetworkPeriod (csTicks period) = 0; 00565 00570 virtual void SetMaximumBandwidth (size_t width) = 0; 00571 00576 virtual void SetServerTimeOut (csTicks timeout) = 0; 00577 00581 virtual void GetNetworkStats (celNetworkServerStats& stats) const = 0; 00582 }; 00583 00595 class celGameServerManager 00596 { 00597 public: 00598 virtual ~celGameServerManager () {}; 00599 00606 virtual bool AuthorizePlayer (celPlayer* player, csString &reason) = 0; 00607 00613 virtual celPlayer* ValidatePlayerUpdate (celPlayer* previous_player_data) = 0; 00614 00618 virtual void PlayerNetworkStateChanged (celPlayer* player, 00619 celPlayerNetworkState new_state, 00620 celPlayerNetworkState previous_state) = 0; 00621 00625 virtual void HandleClientEvent (celPlayer* player, 00626 celClientEventType event_type, csTicks event_time, 00627 iCelDataBuffer* event_data) = 0; 00628 00637 virtual void PersistenceProblem (celPlayer* player, iCelEntity* entity, 00638 iCelPropertyClass* pc, celPersistenceResult persist_code) = 0; 00639 00644 virtual void ServerEnd () = 0; 00645 }; 00646 00657 class celGameClientManager 00658 { 00659 public: 00660 virtual ~celGameClientManager () {}; 00661 00665 virtual void PlayerValidated (celPlayer* player) = 0; 00666 00670 virtual void HandleServerEvent (celServerEventType event_type, 00671 csTicks event_time, iCelDataBuffer* event_data) = 0; 00672 00688 virtual iCelEntity* CreateNetworkLinkTarget (celNetworkLinkType link_type, 00689 csTicks creation_time, iCelPersistentDataList* creation_data, 00690 bool player_controlled) = 0; 00691 00705 virtual void NetworkLinkControlChanged (iCelEntity* entity, 00706 bool player_controlled) = 0; 00707 00712 virtual void NetworkLinkRemoved (csTicks deletion_time, 00713 iCelEntity* entity) = 0; 00714 00719 virtual void LevelChanged (celGameInfo* new_game) = 0; 00720 00725 virtual void ClientEnd () = 0; 00726 }; 00727 00728 #endif // __CEL_PL_NETWORK__
Generated for CEL: Crystal Entity Layer 1.4.1 by doxygen 1.7.1