Main Page | Alphabetical List | Compound List | File List | Compound Members | File Members

Server.h

Go to the documentation of this file.
00001 /****************************************************************************************/
00002 /*  Server.h                                                                            */
00003 /*                                                                                      */
00004 /*  Author: John Pollard                                                                */
00005 /*  Description:                                                                        */
00006 /*                                                                                      */
00007 /*  Copyright (c) 1997, 1999, Eclipse Entertainment; All rights reserved.               */
00008 /*                                                                                      */
00009 /*  See the accompanying file LICENSE.TXT for terms on the use of this library.         */
00010 /*  This library is distributed in the hope that it will be useful but WITHOUT          */
00011 /*  ANY WARRANTY OF ANY KIND and without any implied warranty of MERCHANTABILITY        */
00012 /*  or FITNESS FOR ANY PURPOSE.  Refer to LICENSE.TXT for more details.                 */
00013 /*                                                                                      */
00014 /****************************************************************************************/
00015 #ifndef SERVER_H
00016 #define SERVER_H
00017 
00018 #include <Windows.h>
00019 
00020 #include "Genesis.h"
00021 #include "Errorlog.h"
00022 #include "Ram.h"
00023 
00024 #include "Game\Game.h"
00025 #include "Game\GPlayer.h"
00026 #include "Game\GenVSI.h"
00027 
00028 #include "Client.h"
00029 #include "GameMgr.h"
00030 #include "NetMgr.h"
00031 #include "Buffer.h"
00032 
00033 #ifdef __cplusplus
00034 extern "C" {
00035 #endif
00036 
00037 //===========================================================================
00038 //      Struct defs
00039 //===========================================================================
00040 typedef struct Server_Server    Server_Server;
00041 
00042 #define MAX_SERVER_CLASS_SPAWNS         256
00043 #define MAX_CLASS_NAME_STRING           64
00044 
00045 #define SERVER_MAX_PROC_INDEX           512
00046 
00047 typedef struct Server_CSpawn
00048 {
00049         char                            Name[MAX_CLASS_NAME_STRING];
00050         GenVSI_SpawnFunc        *Func;
00051         GenVSI_DestroyFunc      *DFunc;
00052 
00053 } Server_CSpawn;
00054 
00055 typedef struct
00056 {
00057         int32                   NumSpawnTime;
00058         int32                   NumViewFlags;
00059         int32                   NumViewIndex;
00060         int32                   NumMotionIndex;
00061         int32                   NumFxFlags;
00062         int32                   NumPos;
00063         int32                   NumAngles;
00064         int32                   NumFrameTime;
00065         int32                   NumScale;
00066         int32                   NumVelocity;
00067         int32                   NumState;
00068         int32                   NumControlIndex;
00069         int32                   NumTriggerIndex;
00070         int32                   NumMinsMaxs;
00071 
00072         int32                   NumBytesToSend;
00073         int32                   TotalBytesSent;
00074 } Server_NetStat;
00075 
00076 typedef geBoolean Server_Control(Server_Server *Server, GPlayer *Player, float Time);
00077 typedef geBoolean Server_Trigger(Server_Server *Server, GPlayer *Player, GPlayer *Target);
00078 typedef geBoolean Server_Blocked(Server_Server *Server, GPlayer *Player, GPlayer *Target);
00079 
00080 typedef struct Server_Client
00081 {
00082         geBoolean                       Active;
00083 
00084         geBoolean                       Spawned;                                                // GE_TRUE if this player has been spawned for the current world...
00085 
00086         geCSNetMgr_NetID        NetID;
00087 
00088         NetMgr_NetState         NetState;                                               // Current net state (Connected, etc)
00089         geBoolean                       NetStateConfirmed[NETMGR_MAX_NET_STATES];
00090 
00091         GPlayer                         *Player;                                                // Player for this client
00092 
00093         // Data sent by client for intended move
00094         float                           OldMoveTime;
00095 
00096         float                           MoveTime;
00097         float                           ForwardSpeed;                                   // Forward/Back speed
00098         geVec3d                         Angles;                                                 // Orientation
00099         uint16                          ButtonBits;                                             // Buttons currently pressed for this frame
00100 
00101         geVec3d                         Pos;                                                    // Where the client currently thinks he is...
00102 
00103         GenVSI_CMove            Move;
00104 
00105         // Some proprietary client info
00106         char                            Name[64];                                       
00107         int32                           Score;
00108         int32                           Health;
00109 
00110         int32                           NumPings;
00111         float                           Pings[10];
00112         float                           Ping;
00113 
00114         geBoolean                       InventoryHas[MAX_PLAYER_ITEMS]; // If player has item
00115         uint16                          Inventory[MAX_PLAYER_ITEMS];    // Amount of item
00116 
00117         int16                           CurrentWeapon;                                  
00118         float                           NextWeaponTime;
00119 
00120         geVec3d                         GunOffset;
00121 
00122         // Bit set for each variable that needs to be sent over net for this client
00123         // Up to 16 are allowed now...
00124         uint16                          SendFlags[NETMGR_MAX_PLAYERS];  
00125         float                           NextUpdate;                     // Next time this client needs an update
00126 } Server_Client;
00127 
00128 typedef struct Server_Server
00129 {
00130         Client_Client   *Client;
00131 
00132         GenVSI                  GenVSI;                                 // Genesis Vertual System Interface object (GenVSI)
00133         GameMgr                 *GMgr;                                  // Game Manager object (GameMgr)
00134         NetMgr                  *NMgr;                                  // NetMgr
00135 
00136         float                   NextUpdate;
00137 
00138         Server_Client   Clients[NETMGR_MAX_CLIENTS];
00139         GPlayer                 SvPlayers[NETMGR_MAX_PLAYERS];
00140 
00141         // Proc adresses
00142         void                    *ProcIndex[SERVER_MAX_PROC_INDEX];
00143 
00144         int32                   NumTotalPlayers;
00145 
00146         int32                   NumClassSpawns;
00147         Server_CSpawn   ClassSpawns[MAX_SERVER_CLASS_SPAWNS];
00148 
00149         // NOTE - The host a    llways loads the world, the server just keeps track of it...
00150         char                                    WorldName[128];                                 // Current level name
00151         geBoolean                               ChangeWorldRequest;                             // == GE_TRUE if clients need update
00152         GenVSI_NewWorldCB               *NewWorldCB;
00153         GenVSI_ShutdownWorldCB  *ShutdownWorldCB1;                              // Current world to be freed
00154         GenVSI_ShutdownWorldCB  *ShutdownWorldCB2;                              // World to be freed on request
00155 
00156         int32                   ViewPlayer;                                                      
00157 
00158         Server_NetStat  NetStats;
00159 
00160 } Server_Server;
00161 
00162 //===========================================================================
00163 //      Function prototypes
00164 //===========================================================================
00165 
00166 Server_Server   *Server_Create(GameMgr *GMgr, NetMgr *NMgr, Client_Client *Client, const char *LevelHack);
00167 void                    Server_Destroy(Server_Server *Server);
00168 geBoolean               Server_SetupClientWithCurrentWorld(Server_Server *Server, Server_Client *Client);
00169 geBoolean               Server_SetupAllClientsWithCurrentWorld(Server_Server *Server);
00170 geBoolean               Server_SendClientStartupData(Server_Server *Server, Server_Client *Client);
00171 geBoolean               Server_SendClientCurrentWorldData(Server_Server *Server, Server_Client *Client);
00172 geBoolean               Server_ClientConnect(Server_Server *Server, const geCSNetMgr_NetClient *Client);
00173 Server_Client   *Server_BotConnect(Server_Server *Server, const char *BotName);
00174 geBoolean               Server_ClientDisconnect(Server_Server *Server, geCSNetMgr_NetID Id, const char *Name);
00175 geBoolean               Server_ClientDisconnectByHandle(Server_Server *Server, GenVSI_CHandle);
00176 GPlayer                 *Server_CreatePlayer2(Server_Server *Server, const char *ClassName, int32 Mode);
00177 GPlayer                 *Server_CreatePlayer(Server_Server *Server, const char *ClassName);
00178 void                    Server_DestroyPlayer(Server_Server *Server, GPlayer *Player);
00179 geBoolean               Server_FreeWorldData(Server_Server *Server);
00180 geBoolean               Server_NewWorldDefaults(Server_Server *Server);
00181 geBoolean               Server_SpawnWorld(Server_Server *Server);
00182 geBoolean               Server_StartupWorld(Server_Server *Server);
00183 geBoolean               Server_Frame(Server_Server *Server, GameMgr *GMgr, float Time);
00184 
00185 void                    Server_ProcessClientMove(       Server_Server *Server, 
00186                                                                                         Server_Client *Client, 
00187                                                                                         float ForwardSpeed, 
00188                                                                                         float Pitch,
00189                                                                                         float Yaw,
00190                                                                                         uint16 ButtonBits, 
00191                                                                                         uint16 Weapon,
00192                                                                                         float Time);
00193 
00194 #ifdef __cplusplus
00195 }
00196 #endif
00197 
00198 #endif

Generated on Tue Sep 30 12:36:21 2003 for GTestAndEngine by doxygen 1.3.2