00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef __NETDRIVER_H__
00031 #define __NETDRIVER_H__
00032
00034
00035
00036
00037
00038
00039 #include <time.h>
00040 #include "net_lowlevel.h"
00041
00042
00043
00044
00045
00046 #define DEFAULT_PORT 7775 // Server port
00047 #define DEFAULT_MAX_CONN 500 // Max Connections
00048 #define DEFAULT_SESSION_TIMEOUT 900 // 15 miniutes
00049 #define DEFAULT_POLLING_DELAY 250 // MS (1000 = 1s)
00050
00051 #define MAX_USERNAME_LENGTH 32
00052 #define MAX_PASSWORD_LENGTH 32
00053
00054 #define MAX_GAMENAME_LENGTH 32
00055 #define MAX_VERSION_LENGTH 8
00056
00057
00058
00059
00060
00061 class GameData;
00062
00066 class ServerStruct {
00067 public:
00068 ServerStruct() : Port(0), MaxConnections(0), IdleTimeout(0),
00069 PollingDelay(0) {}
00070
00071 int Port;
00072 int MaxConnections;
00073 int IdleTimeout;
00074 int PollingDelay;
00075 };
00076
00077 extern ServerStruct Server;
00078
00084 class Session {
00085 public:
00086 Session() : Next(NULL), Prev(NULL), Idle(0), Sock(0), Game(NULL)
00087 {
00088 Buffer[0] = '\0';
00089 AddrData.Host = 0;
00090 AddrData.IPStr[0] = '\0';
00091 AddrData.Port = 0;
00092 UserData.Name[0] = '\0';
00093 UserData.GameName[0] = '\0';
00094 UserData.Version[0] = '\0';
00095 UserData.LoggedIn = 0;
00096 }
00097
00098 Session *Next;
00099 Session *Prev;
00100
00101 char Buffer[1024];
00102 time_t Idle;
00103
00104 Socket Sock;
00105
00106 struct {
00107 unsigned long Host;
00108 char IPStr[16];
00109 int Port;
00110 } AddrData;
00111
00112 struct {
00113 char Name[MAX_USERNAME_LENGTH + 1];
00114 char GameName[MAX_GAMENAME_LENGTH + 1];
00115 char Version[MAX_VERSION_LENGTH + 1];
00116 int LoggedIn;
00117 } UserData;
00118
00119 GameData *Game;
00120 };
00121
00125 class SessionPool {
00126 public:
00127 SessionPool() : First(NULL), Last(NULL), Count(0), Sockets(NULL) {}
00128
00129 Session *First;
00130 Session *Last;
00131 int Count;
00132
00133 SocketSet *Sockets;
00134 };
00135
00137 extern SessionPool *Pool;
00138
00139
00140
00141
00142
00143 extern void Send(Session *session, const char *msg);
00144
00145 extern int ServerInit(int port);
00146 extern void ServerQuit(void);
00147 extern int UpdateSessions(void);
00148
00150
00151 #endif // __NETDRIVER_H__