Main Page | Modules | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

RakServer Class Reference

Server Facilities on top of RakPeer. More...

#include <RakServer.h>

Inheritance diagram for RakServer:

RakServerInterface RakPeer RakPeerInterface List of all members.

Public Member Functions

 RakServer ()
virtual ~RakServer ()
bool Start (unsigned short AllowedPlayers, unsigned long connectionValidationInteger, int threadSleepTimer, unsigned short port)
void InitializeSecurity (char *privateKeyE, char *privateKeyN)
void DisableSecurity (void)
void SetPassword (char *_password)
bool HasPassword (void)
void Disconnect (unsigned long blockDuration)
bool Send (char *data, const long length, PacketPriority priority, PacketReliability reliability, char orderingChannel, PlayerID playerId, bool broadcast)
bool Send (RakNet::BitStream *bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, PlayerID playerId, bool broadcast)
PacketReceive (void)
void Kick (PlayerID playerId)
void DeallocatePacket (Packet *packet)
void SetAllowedPlayers (unsigned short AllowedPlayers)
unsigned short GetAllowedPlayers (void) const
unsigned short GetConnectedPlayers (void)
void GetPlayerIPFromID (PlayerID playerId, char returnValue[22], unsigned short *port)
void PingPlayer (PlayerID playerId)
int GetAveragePing (PlayerID playerId)
int GetLastPing (PlayerID playerId)
int GetLowestPing (PlayerID playerId)
void StartOccasionalPing (void)
void StopOccasionalPing (void)
bool IsActive (void) const
unsigned long GetSynchronizedRandomInteger (void) const
void StartSynchronizedRandomInteger (void)
void StopSynchronizedRandomInteger (void)
bool GenerateCompressionLayer (unsigned long inputFrequencyTable[256], bool inputLayer)
bool DeleteCompressionLayer (bool inputLayer)
void RegisterAsRemoteProcedureCall (char *uniqueID, void(*functionName)(char *input, int numberOfBitsOfData, PlayerID sender))
void UnregisterAsRemoteProcedureCall (char *uniqueID)
bool RPC (char *uniqueID, char *data, unsigned long bitLength, PacketPriority priority, PacketReliability reliability, char orderingChannel, PlayerID playerId, bool broadcast, bool shiftTimestamp)
bool RPC (char *uniqueID, RakNet::BitStream *parameters, PacketPriority priority, PacketReliability reliability, char orderingChannel, PlayerID playerId, bool broadcast, bool shiftTimestamp)
void SetTrackFrequencyTable (bool b)
bool GetSendFrequencyTable (unsigned long outputFrequencyTable[256])
float GetCompressionRatio (void) const
float GetDecompressionRatio (void) const
RakNet::BitStreamGetStaticServerData (void)
void SetStaticServerData (char *data, const long length)
void SetRelayStaticClientData (bool b)
void SendStaticServerDataToClient (PlayerID playerId)
void SetOfflinePingResponse (char *data, const unsigned long length)
RakNet::BitStreamGetStaticClientData (PlayerID playerId)
void SetStaticClientData (PlayerID playerId, char *data, const long length)
void ChangeStaticClientData (PlayerID playerChangedId, PlayerID playerToSendToId)
unsigned int GetNumberOfAddresses (void)
const char * GetLocalIP (unsigned int index)
void PushBackPacket (Packet *packet)
int GetIndexFromPlayerID (PlayerID playerId)
PlayerID GetPlayerIDFromIndex (int index)
void AddToBanList (const char *IP)
void RemoveFromBanList (const char *IP)
void ClearBanList (void)
bool IsBanned (const char *IP)
bool IsActivePlayerID (PlayerID playerId)
bool SetMTUSize (int size)
int GetMTUSize (void) const
void AdvertiseSystem (char *host, unsigned short remotePort)
RakNetStatisticsStruct *const GetStatistics (PlayerID playerId)

Private Attributes

unsigned long seed
unsigned long nextSeed
unsigned long nextSeedUpdate
unsigned long broadcastPingsTime
bool synchronizedRandomInteger
bool relayStaticClientData

Detailed Description

Server Facilities on top of RakPeer.

This class provide an increase level of services on top of RakPeer. The communication end point can now only accept connexion and exchange message with peer connected to him

See also:
RakClient


Constructor & Destructor Documentation

RakServer::RakServer  ) 
 

Constructor

RakServer::~RakServer  )  [virtual]
 

Destructor


Member Function Documentation

void RakServer::AddToBanList const char *  IP  )  [virtual]
 

Bans an IP from connecting. Banned IPs persist between connections.

Parameters IP - Dotted IP address. Can use * as a wildcard, such as 128.0.0.* will ban All IP addresses starting with 128.0.0

Reimplemented from RakPeer.

void RakServer::AdvertiseSystem char *  host,
unsigned short  remotePort
[virtual]
 

Sends a one byte message ID_ADVERTISE_SYSTEM to the remote unconnected system. This will tell the remote system our external IP outside the LAN, and can be used for NAT punch through

host: Either a dotted IP address or a domain name remotePort: Which port to connect to on the remote machine.

Reimplemented from RakPeer.

void RakServer::ChangeStaticClientData PlayerID  playerChangedId,
PlayerID  playerToSendToId
[virtual]
 

This function is used to update the information on connected clients when the server effects a change of static client data playerChangedId should be the playerId of the player whose data was changed. This is the parameter passed to GetStaticClientData to get a pointer to that player's information Note that a client that gets this new information for himself will update the data for his playerID but not his local data (which is the user's copy) i.e. player 5 would have the data returned by GetStaticClientData(5) changed but his local information returned by GetStaticClientData(UNASSIGNED_PLAYER_ID) would remain the same as it was previously. playerToSendToId should be the player you want to update with the new information. This will almost always be everybody, in which case you should pass UNASSIGNED_PLAYER_ID. The server must be active for this to have meaning

Implements RakServerInterface.

void RakServer::ClearBanList void   )  [virtual]
 

Allows all previously banned IPs to connect.

Reimplemented from RakPeer.

void RakServer::DeallocatePacket Packet packet  )  [virtual]
 

Call this to deallocate a packet returned by Receive when you are done handling it.

Reimplemented from RakPeer.

bool RakServer::DeleteCompressionLayer bool  inputLayer  )  [virtual]
 

Delete the output or input layer as specified. This is not necessary to call and is only valuable for freeing memory You should only call this when disconnected

Returns:
false (failure) if connected. Otherwise true (success)

Reimplemented from RakPeer.

void RakServer::DisableSecurity void   )  [virtual]
 

Must be called while offline Disables all security.

Reimplemented from RakPeer.

void RakServer::Disconnect unsigned long  blockDuration  )  [virtual]
 

Stops the server, stops synchronized data, and resets all internal data. This will drop all players currently connected, however since the server is stopped packet reliability is not enforced so the Kick network message may not actually arrive. Those players will disconnect due to timeout. If you want to end the server more gracefully, you can manually Kick each player first. Does nothing if the server is not running to begin with

Parameters:
blockDuration How long you should wait for all remaining packets to go out, per connected system If you set it to 0 then the disconnection notifications probably won't arrive

Reimplemented from RakPeer.

bool RakServer::GenerateCompressionLayer unsigned long  inputFrequencyTable[256],
bool  inputLayer
[virtual]
 

This is an optional function to generate the compression layer from the input frequency table. You should call this twice - once with inputLayer as true and once as false. The frequency table passed here with inputLayer=true should match the frequency table on the recipient with inputLayer=false. Likewise, the frequency table passed here with inputLayer=false should match the frequency table on the recipient with inputLayer=true Calling this function when there is an existing layer will overwrite the old layer You should only call this when disconnected

Returns:
false (failure) if connected. Otherwise true (success)

Reimplemented from RakPeer.

unsigned short RakServer::GetAllowedPlayers void   )  const [virtual]
 

Return how many players are allowed to connect. This value was set either from Start or from SetAllowedPlayers The server must be active for this to have meaning

Implements RakServerInterface.

int RakServer::GetAveragePing PlayerID  playerId  )  [virtual]
 

Returns the average of all ping times read for the specific player or -1 if none read yet

Reimplemented from RakPeer.

float RakServer::GetCompressionRatio void   )  const [virtual]
 

Returns the compression ratio. A low compression ratio is good. Compression is for outgoing data

Reimplemented from RakPeer.

unsigned short RakServer::GetConnectedPlayers void   )  [virtual]
 

Return how many players are currently connected to the server. The server must be active for this to have meaning

Implements RakServerInterface.

float RakServer::GetDecompressionRatio void   )  const [virtual]
 

Returns the decompression ratio. A high decompression ratio is good. Decompression is for incoming data

Reimplemented from RakPeer.

int RakServer::GetIndexFromPlayerID PlayerID  playerId  )  [virtual]
 

Given a playerID, returns an index from 0 to the maximum number of players allowed - 1.

Reimplemented from RakPeer.

int RakServer::GetLastPing PlayerID  playerId  )  [virtual]
 

Returns the last ping time read for the specific player or -1 if none read yet

Implements RakServerInterface.

const char * RakServer::GetLocalIP unsigned int  index  )  [virtual]
 

Call this function where 0 <= index < x where x is the value returned by GetNumberOfAddresses Returns a static string filled with the server IP of the specified index Strings returned in no particular order. You'll have to check every index see which string you want Returns 0 on invalid input The server does not have to be active for this to work

Reimplemented from RakPeer.

int RakServer::GetLowestPing PlayerID  playerId  )  [virtual]
 

Returns the lowest ping time read or -1 if none read yet

Implements RakServerInterface.

int RakServer::GetMTUSize void   )  const [virtual]
 

Returns the current MTU size

Reimplemented from RakPeer.

unsigned int RakServer::GetNumberOfAddresses void   )  [virtual]
 

Internally store the IP address(es) for the server and return how many it has. This can easily be more than one, for example a system on both a LAN and with a net connection. The server does not have to be active for this to work

Reimplemented from RakPeer.

PlayerID RakServer::GetPlayerIDFromIndex int  index  )  [virtual]
 

This function is only useful for looping through all players. Index should range between 0 and the maximum number of players allowed - 1.

Reimplemented from RakPeer.

void RakServer::GetPlayerIPFromID PlayerID  playerId,
char  returnValue[22],
unsigned short *  port
[virtual]
 

Returns a static string pointer containing the IP of the specified connected player. Also returns the client port This changes between calls so be sure to copy what is returned if you need to retain it Useful for creating and maintaining ban lists The server must be active for this to have meaning If the specified id does not represent an active player the results are undefined (most likely returns 0)

Implements RakServerInterface.

bool RakServer::GetSendFrequencyTable unsigned long  outputFrequencyTable[256]  )  [virtual]
 

Returns the frequency of outgoing bytes into outputFrequencyTable The purpose is to save to file as either a master frequency table from a sample game session for passing to GenerateCompressionLayer. You should only call this when disconnected Requires that you first enable data frequency tracking by calling SetTrackFrequencyTable(true)

Parameters:
[out] outputFrequencyTable The Frequency Table used in the compression layer
Returns:
false (failure) if connected or if frequency table tracking is not enabled. Otherwise true (success)

Implements RakServerInterface.

RakNet::BitStream * RakServer::GetStaticClientData PlayerID  playerId  )  [virtual]
 

Returns a pointer to an attached client's character name specified by the playerId Returns 0 if no such player is connected Note that you can modify the client data here. Changes won't be reflected on clients unless you force them to update by calling ChangeStaticClientData The server must be active for this to have meaning The data is entered as an array and stored and returned as a BitStream. Everytime you call GetStaticServerData it resets the read pointer to the start of the bitstream. To do multiple reads without reseting the pointer Maintain a pointer copy to the bitstream as in RakNet::BitStream *copy = ...->GetStaticServerData(...); To store a bitstream, use the GetData() and GetNumberOfBytesUsed() methods of the bitstream for the 2nd and 3rd parameters Note that the client may change at any time the data contents and/or its length!

Parameters:
playerId The ID of the client
Returns:
Statistical information of this client

Implements RakServerInterface.

RakNet::BitStream * RakServer::GetStaticServerData void   )  [virtual]
 

The server internally maintains a data struct that is automatically sent to clients when the connect. This is useful to contain data such as the server name or message of the day. Access that struct with this function.

Note:
If you change any data in the struct remote clients won't reflect this change unless you manually update them Do so by calling SendStaticServerDataToClient(UNASSIGNED_PLAYER_ID) (broadcast to all) The data is entered as an array and stored and returned as a BitStream. To store a bitstream, use the GetData() and GetNumberOfBytesUsed() methods of the bitstream for the 2nd and 3rd parameters

Implements RakServerInterface.

RakNetStatisticsStruct *const RakServer::GetStatistics PlayerID  playerId  )  [virtual]
 

Returns a structure containing a large set of network statistics for the specified system You can map this data to a string using the C style StatisticsToString function

Parameters playerId: Which connected system to get statistics for

Returns: 0 on can't find the specified system. A pointer to a set of data otherwise.

Reimplemented from RakPeer.

unsigned long RakServer::GetSynchronizedRandomInteger void   )  const [virtual]
 

Returns a number automatically synchronized between the server and client which randomly changes every 9 seconds. The time it changes is accurate to within a few ms and is best used to seed random number generators that you want to usually return the same output on all systems. Keep in mind this isn't perfectly accurate as there is always a very small chance the numbers will by out of synch during changes so you should confine its use to visual effects or functionality that has a backup method to maintain synchronization. If you don't need this functionality and want to save the bandwidth call StopSynchronizedRandomInteger after starting the server

Implements RakServerInterface.

bool RakServer::HasPassword void   )  [virtual]
 

Returns true if a password was set, false otherwise

Implements RakServerInterface.

void RakServer::InitializeSecurity char *  privateKeyE,
char *  privateKeyN
[virtual]
 

Must be called while offline Secures connections though a combination of SHA1, AES128, SYN Cookies, and RSA to prevent connection spoofing, replay attacks, data eavesdropping, packet tampering, and MitM attacks. There is a significant amount of processing and a slight amount of bandwidth overhead for this feature.

If you accept connections, you must call this or else secure connections will not be enabled for incoming connections. If the private keys are 0, then a new key will be generated when this function is called

Parameters:
privateKeyE A pointer to the private keys from the RSACrypt class.
privateKeyN A pointer to the private keys from the RSACrypt class.
See also:
the Encryption sample

Implements RakServerInterface.

bool RakServer::IsActive void   )  const [virtual]
 

Returns true if the server is currently active

Reimplemented from RakPeer.

bool RakServer::IsActivePlayerID PlayerID  playerId  )  [virtual]
 

Returns true if that player ID is currently used

Implements RakServerInterface.

bool RakServer::IsBanned const char *  IP  )  [virtual]
 

Determines if a particular IP is banned.

Parameters IP - Complete dotted IP address

Returns True if IP matches any IPs in the ban list, accounting for any wildcards. False otherwise.

Reimplemented from RakPeer.

void RakServer::Kick PlayerID  playerId  )  [virtual]
 

Kick out the specified player.

Implements RakServerInterface.

void RakServer::PingPlayer PlayerID  playerId  )  [virtual]
 

Send a ping request to the specified player

Implements RakServerInterface.

void RakServer::PushBackPacket Packet packet  )  [virtual]
 

Put a packet back at the end of the receive queue in case you don't want to deal with it immediately

Reimplemented from RakPeer.

Packet * RakServer::Receive void   )  [virtual]
 

Call this to get a packet from the incoming packet queue. Use DeallocatePacket to deallocate the packet after you are done with it. Check the Packet struct at the top of CoreNetworkStructures.h for the format of the struct Returns 0 if no packets are waiting to be handled If the server is not active this will also return 0, as all waiting packets are flushed when the server is Disconnected This also updates all memory blocks associated with synchronized memory

Reimplemented from RakPeer.

void RakServer::RemoveFromBanList const char *  IP  )  [virtual]
 

Allows a previously banned IP to connect.

Parameters IP - Dotted IP address. Can use * as a wildcard, such as 128.0.0.* will ban All IP addresses starting with 128.0.0

Reimplemented from RakPeer.

bool RakServer::Send RakNet::BitStream bitStream,
PacketPriority  priority,
PacketReliability  reliability,
char  orderingChannel,
PlayerID  playerId,
bool  broadcast
[virtual]
 

This function only works while the server is active (Use the Start function). Returns false on failure, true on success Send the bitstream to whichever playerId you specify. You can set the first byte to a packet identifier, however you will need to have TYPE_CHECKING undefined or the internal type checking will add extra data and make this not work. If you want TYPE_CHECKING on, you will need to use BitStream::WriteBits to avoid the type checking. This interface will probably change to fix this in future versions. If you aren't sure what to specify for priority and reliability, use HIGH_PRIORITY and RELIABLE, 0 for ordering channel Set broadcast to true to broadcast to all connected clients EXCEPT the one specified in the playerId field. To broadcast to everyone specify UNASSIGNED_PLAYER_ID for the playerId field.

Reimplemented from RakPeer.

bool RakServer::Send char *  data,
const long  length,
PacketPriority  priority,
PacketReliability  reliability,
char  orderingChannel,
PlayerID  playerId,
bool  broadcast
[virtual]
 

This function only works while the server is active (Use the Start function). Returns false on failure, true on success Send the data stream of length length to whichever playerId you specify. Specify UNASSIGNED_PLAYER_ID for all players connected If you aren't sure what to specify for priority and reliability, use HIGH_PRIORITY, RELIABLE, 0 for ordering channel Set broadcast to true to broadcast to all connected clients EXCEPT the one specified in the playerId field. To broadcast to everyone specify UNASSIGNED_PLAYER_ID for the playerId field.

Reimplemented from RakPeer.

void RakServer::SendStaticServerDataToClient PlayerID  playerId  )  [virtual]
 

Send the static server data to the specified player. Pass UNASSIGNED_PLAYER_ID to broadcast to all players The only time you need to call this function is to update clients that are already connected when you change the static server data by calling GetStaticServerData and directly modifying the object pointed to. Obviously if the connected clients don't need to know the new data you don't need to update them, so it's up to you The server must be active for this to have meaning

Implements RakServerInterface.

void RakServer::SetAllowedPlayers unsigned short  AllowedPlayers  )  [virtual]
 

Set how many players are allowed on the server. If more players are currently connected then are allowed then No more players will be allowed to join until the number of players is less than the number of allowed players The server must be active for this to have meaning

Implements RakServerInterface.

bool RakServer::SetMTUSize int  size  )  [virtual]
 

Change the MTU size in order to improve performance when sending large packets This can only be called when not connected. Returns false on failure (we are connected). True on success. Maximum allowed size is MAXIMUM_MTU_SIZE A too high of value will cause packets not to arrive at worst and be fragmented at best. A too low of value will split packets unnecessarily. Set according to the following table: 1500. The largest Ethernet packet size; it is also the default value. This is the typical setting for non-PPPoE, non-VPN connections. The default value for NETGEAR routers, adapters and switches. 1492. The size PPPoE prefers. 1472. Maximum size to use for pinging. (Bigger packets are fragmented.) 1468. The size DHCP prefers. 1460. Usable by AOL if you don't have large email attachments, etc. 1430. The size VPN and PPTP prefer. 1400. Maximum size for AOL DSL. 576. Typical value to connect to dial-up ISPs. (Default)

Reimplemented from RakPeer.

void RakServer::SetOfflinePingResponse char *  data,
const unsigned long  length
[virtual]
 

Sets the data to send with an (LAN server discovery) /(offline ping) response

See also:
the Ping sample project for how this is used.
Parameters:
data a block of data to store, or 0 for none
length The length of data in bytes, or 0 for none

Reimplemented from RakPeer.

void RakServer::SetPassword char *  _password  )  [virtual]
 

Set the password clients have to use to connect to this server. The password persists between connections. Pass 0 for no password. You can call this anytime

Parameters:
_password The password name.

Implements RakServerInterface.

void RakServer::SetRelayStaticClientData bool  b  )  [virtual]
 

This sets to true or false whether we want to support relaying of static client data to other connected clients. If set to false it saves some bandwdith, however other clients won't know the static client data and attempting to read that data will return garbage. Default is true. This also only works for up to 32 players. Games supporting more than 32 players will have this shut off automatically upon server start and must have it forced back on with this function if you do indeed want it This should be called after the server is started in case you want to override when it shuts off at 32 players

Implements RakServerInterface.

void RakServer::SetStaticClientData PlayerID  playerId,
char *  data,
const long  length
[virtual]
 

Returns a pointer to an attached client's character name specified by the playerId Returns 0 if no such player is connected Note that you can modify the client data here. Changes won't be reflected on clients unless you force them to update by calling ChangeStaticClientData The server must be active for this to have meaning The data is entered as an array and stored and returned as a BitStream. Everytime you call GetStaticServerData it resets the read pointer to the start of the bitstream. To do multiple reads without reseting the pointer Maintain a pointer copy to the bitstream as in RakNet::BitStream *copy = ...->GetStaticServerData(...); To store a bitstream, use the GetData() and GetNumberOfBytesUsed() methods of the bitstream for the 2nd and 3rd parameters Note that the client may change at any time the data contents and/or its length!

Parameters:
playerId The ID of the client
data A buffer containing statistics
length The size of the buffer

Implements RakServerInterface.

void RakServer::SetStaticServerData char *  data,
const long  length
[virtual]
 

The server internally maintains a data struct that is automatically sent to clients when the connect. This is useful to contain data such as the server name or message of the day. Access that struct with this function.

Note:
If you change any data in the struct remote clients won't reflect this change unless you manually update them Do so by calling SendStaticServerDataToClient(UNASSIGNED_PLAYER_ID) (broadcast to all) The data is entered as an array and stored and returned as a BitStream. To store a bitstream, use the GetData() and GetNumberOfBytesUsed() methods of the bitstream for the 2nd and 3rd parameters

Implements RakServerInterface.

void RakServer::SetTrackFrequencyTable bool  b  )  [virtual]
 

Enables or disables frequency table tracking. This is required to get a frequency table, which is used to generate A new compression layer. You can call this at any time - however you SHOULD only call it when disconnected. Otherwise you will only track part of the values sent over the network. This value persists between connect calls and defaults to false (no frequency tracking)

Parameters:
b True to enable tracking

Implements RakServerInterface.

bool RakServer::Start unsigned short  AllowedPlayers,
unsigned long  connectionValidationInteger,
int  threadSleepTimer,
unsigned short  port
[virtual]
 

Call this to initiate the server with the number of players you want to be allowed connected at once

Parameters:
AllowedPlayers Current maximum number of allowed players is 65535
connectionValidationInteger is for legacy purposes and is unused
threadSleepTimer >=0 for how many ms to Sleep each internal update cycle (recommended 30 for low performance, 0 for regular)
port is the port you want the server to read and write on Make sure this port is open for UDP
Returns:
true on successful initiation, false otherwise

Implements RakServerInterface.

void RakServer::StartOccasionalPing void   )  [virtual]
 

Ping all players every so often. This is on by default. In games where you don't care about ping you can call StopOccasionalPing to save the bandwidth This will work anytime

Implements RakServerInterface.

void RakServer::StartSynchronizedRandomInteger void   )  [virtual]
 

Start or restart the synchronized random integer. This is on by default. Call StopSynchronizedRandomInteger to stop it keeping the number in synch

Implements RakServerInterface.

void RakServer::StopOccasionalPing void   )  [virtual]
 

Stop pinging players every so often. Players are pinged by default. In games where you don't care about ping you can call this to save the bandwidth This will work anytime

Implements RakServerInterface.

void RakServer::StopSynchronizedRandomInteger void   )  [virtual]
 

Stop the synchronized random integer. Call StartSynchronizedRandomInteger to start it again

Implements RakServerInterface.


Member Data Documentation

unsigned long RakServer::broadcastPingsTime [private]
 

Synchronized random integer

unsigned long RakServer::nextSeed [private]
 

Synchronized random integer

unsigned long RakServer::nextSeedUpdate [private]
 

Synchronized random integer

bool RakServer::relayStaticClientData [private]
 

unsigned long RakServer::seed [private]
 

Synchronized random integer

bool RakServer::synchronizedRandomInteger [private]
 


The documentation for this class was generated from the following files:
Generated on Mon May 30 17:45:42 2005 for raknet by  doxygen 1.4.2