## Public API Reference

- Main Page
- Classes
- Files

# 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
    00046 SCF_VERSION (iCelGame, 0, 0, 1);
    00047
    00052 struct iCelGame : public iBase
    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
    00087 SCF_VERSION (iCelGameFactory, 0, 0, 1);
    00088
    00101 struct iCelGameFactory : public iBase
    00102 {
    00109   virtual void SetGameName (csString game_name) = 0;
    00110
    00115   virtual csString GetGameName () const = 0;
    00116
    00129   virtual void SetProtocolVersion (const csString protocol_version) = 0;
    00130
    00136   virtual csString GetProtocolVersion () const = 0;
    00137
    00144   virtual void RegisterGameFactoryManager (
    00145         celGameFactoryManager* manager) = 0;
    00146
    00156   virtual void StartSearchForGameList (celNetworkGameType game_type,
    00157         celGameInfo* filter = 0) = 0;
    00158
    00163   virtual void StopSearchForGameList () = 0;
    00164
    00168   virtual iCelGame* GetCurrentGame () const = 0;
    00169
    00183   virtual bool CreateNewGame (celNetworkGameType game_type,
    00184         celGameInfo* game_info, celPlayer* player = 0) = 0;
    00185
    00198   virtual bool ConnectGame (celGameInfo* game_info,
    00199         celPlayer* player) = 0;
    00200
    00206   virtual bool CloseGame () = 0;
    00207
    00211   virtual void StartRecordingGame (csString filename) = 0;
    00212
    00216   virtual void StopRecordingGame () = 0;
    00217
    00224   virtual void StartPlayBackGame (csString filename,
    00225         csTicks start_time, csTicks stop_time) = 0;
    00226 };
    00227
    00240 class celGameFactoryManager
    00241 {
    00242  public:
    00251   virtual void GameInfoReceived (celGameInfo* game_info,
    00252         csTicks server_latency) {}
    00253
    00271   virtual void ServerNetworkStateChanged (celServerNetworkState new_state,
    00272         celServerNetworkState previous_state, csString reason = "") = 0;
    00273
    00285   virtual bool InitClient (iCelGame* game) { return true; }
    00286
    00294   virtual bool InitServer (iCelGame* game) { return true; }
    00295
    00304   virtual csPtr<iCelDataBuffer> GetClientEventBaseline (
    00305         celClientEventType event_type) { return 0; }
    00306
    00312   virtual csPtr<iCelDataBuffer> GetServerEventBaseline (
    00313         celServerEventType event_type) { return 0; }
    00314
    00320   virtual csPtr<iCelDataBuffer> GetNetworkLinkBaseline (
    00321         celNetworkLinkType link_type) { return 0; }
    00322
    00323 };
    00324
    00325 SCF_VERSION (iCelGameServer, 0, 0, 1);
    00326
    00341 struct iCelGameServer : public iBase
    00342 {
    00347   virtual void RegisterServerManager (celGameServerManager* manager) = 0;
    00348
    00353   virtual void SetAdministrator (celPlayer* new_admin) = 0;
    00354
    00359   virtual celPlayer* GetAdministrator () = 0;
    00360
    00364   virtual iCelPlayerList* GetPlayerList () = 0;
    00365
    00369   virtual celPlayerNetworkState GetPlayerState (celPlayer* player) = 0;
    00370
    00376   virtual void KickPlayer (celPlayer* player, csString reason) = 0;
    00377
    00385   virtual iCelPlayerList* CreateChannel (csStringID channel_id) = 0;
    00386
    00391   virtual void RemoveChannel (csStringID channel_id) = 0;
    00392
    00396   virtual void LaunchServerEvent (celPlayer* player,
    00397         celServerEventData &event_data) = 0;
    00398
    00402   virtual void LaunchServerEvent (csStringID channel_id,
    00403         celServerEventData &event_data) = 0;
    00404
    00421   virtual void SetNetworkLink (celPlayer* player,
    00422         celNetworkLinkData &link_data, bool player_controlled) = 0;
    00423
    00433   virtual void ChangeLinkControl (iCelEntity* entity, celPlayer* player,
    00434         bool player_controlled) = 0;
    00435
    00446   virtual void SetNetworkLink (csStringID channel_id,
    00447         celNetworkLinkData &link_data) = 0;
    00448
    00453   virtual void RemoveNetworkLink (iCelEntity* entity, celPlayer* player) = 0;
    00454
    00459   virtual void RemoveNetworkLink (iCelEntity* entity,
    00460         csStringID channel_id) = 0;
    00461
    00469   virtual void ChangeLevel (celGameInfo* new_game) = 0;
    00470
    00476   virtual void SetNetworkPeriod (csTicks period) = 0;
    00477
    00482   virtual void SetMaximumBandwidth (size_t width) = 0;
    00483
    00489   virtual void SetClientTimeOut (csTicks timeout) = 0;
    00490
    00494   virtual void GetNetworkPlayerStats (celPlayer* player,
    00495         celNetworkPlayerStats& stats) const = 0;
    00496
    00500   virtual void GetNetworkTotalStats (
    00501         celNetworkPlayerTotalStats& stats) const = 0;
    00502 };
    00503
    00504 SCF_VERSION (iCelGameClient, 0, 0, 1);
    00505
    00519 struct iCelGameClient : public iBase
    00520 {
    00525   virtual void RegisterClientManager (celGameClientManager* manager) = 0;
    00526
    00530   virtual celPlayer* GetPlayer () = 0;
    00531
    00537   virtual void UpdatePlayer (celPlayer* player) = 0;
    00538
    00542   virtual csTicks ConvertServerClock (csTicks server_time) const = 0;
    00543
    00548   virtual uint GetMappedID (uint entity_id) const = 0;
    00549
    00554   virtual iCelEntity* GetMappedEntity (uint entity_id) const = 0;
    00555
    00559   virtual void SetReady () = 0;
    00560
    00564   virtual void LaunchClientEvent (celClientEventData &event_data) = 0;
    00565
    00569   virtual void SetNetworkPeriod (csTicks period) = 0;
    00570
    00575   virtual void SetMaximumBandwidth (size_t width) = 0;
    00576
    00581   virtual void SetServerTimeOut (csTicks timeout) = 0;
    00582
    00586   virtual void GetNetworkStats (celNetworkServerStats& stats) const = 0;
    00587 };
    00588
    00602 class celGameServerManager
    00603 {
    00604  public:
    00611   virtual bool AuthorizePlayer (celPlayer* player, csString &reason) = 0;
    00612
    00618   virtual celPlayer* ValidatePlayerUpdate (celPlayer* previous_player_data) = 0;
    00619
    00623   virtual void PlayerNetworkStateChanged (celPlayer* player,
    00624         celPlayerNetworkState new_state,
    00625         celPlayerNetworkState previous_state) = 0;
    00626
    00630   virtual void HandleClientEvent (celPlayer* player,
    00631         celClientEventType event_type, csTicks event_time,
    00632         iCelDataBuffer* event_data) = 0;
    00633
    00642   virtual void PersistenceProblem (celPlayer* player, iCelEntity* entity,
    00643         iCelPropertyClass* pc, celPersistenceResult persist_code) = 0;
    00644
    00649   virtual void ServerEnd () = 0;
    00650 };
    00651
    00664 class celGameClientManager
    00665 {
    00666  public:
    00670   virtual void PlayerValidated (celPlayer* player) = 0;
    00671
    00675   virtual void HandleServerEvent (celServerEventType event_type,
    00676         csTicks event_time, iCelDataBuffer* event_data) = 0;
    00677
    00693   virtual iCelEntity* CreateNetworkLinkTarget (celNetworkLinkType link_type,
    00694         csTicks creation_time, iCelPersistentDataList* creation_data,
    00695         bool player_controlled) = 0;
    00696
    00710   virtual void NetworkLinkControlChanged (iCelEntity* entity,
    00711         bool player_controlled) = 0;
    00712
    00717   virtual void NetworkLinkRemoved (csTicks deletion_time,
    00718         iCelEntity* entity) = 0;
    00719
    00724   virtual void LevelChanged (celGameInfo* new_game) = 0;
    00725
    00730   virtual void ClientEnd () = 0;
    00731 };
    00732
    00733 #endif // __CEL_PL_NETWORK__