#include <RakServer.h>
Inheritance diagram for RakServer:
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) |
Packet * | Receive (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::BitStream * | GetStaticServerData (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::BitStream * | GetStaticClientData (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 |
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
|
Constructor |
|
Destructor |
|
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. |
|
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. |
|
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. |
|
Allows all previously banned IPs to connect. Reimplemented from RakPeer. |
|
Call this to deallocate a packet returned by Receive when you are done handling it. Reimplemented from RakPeer. |
|
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
Reimplemented from RakPeer. |
|
Must be called while offline Disables all security. Reimplemented from RakPeer. |
|
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
Reimplemented from RakPeer. |
|
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
Reimplemented from RakPeer. |
|
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. |
|
Returns the average of all ping times read for the specific player or -1 if none read yet Reimplemented from RakPeer. |
|
Returns the compression ratio. A low compression ratio is good. Compression is for outgoing data Reimplemented from RakPeer. |
|
Return how many players are currently connected to the server. The server must be active for this to have meaning Implements RakServerInterface. |
|
Returns the decompression ratio. A high decompression ratio is good. Decompression is for incoming data Reimplemented from RakPeer. |
|
Given a playerID, returns an index from 0 to the maximum number of players allowed - 1. Reimplemented from RakPeer. |
|
Returns the last ping time read for the specific player or -1 if none read yet Implements RakServerInterface. |
|
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. |
|
Returns the lowest ping time read or -1 if none read yet Implements RakServerInterface. |
|
Returns the current MTU size Reimplemented from RakPeer. |
|
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. |
|
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. |
|
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. |
|
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)
Implements RakServerInterface. |
|
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!
Implements RakServerInterface. |
|
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.
Implements RakServerInterface. |
|
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. |
|
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. |
|
Returns true if a password was set, false otherwise Implements RakServerInterface. |
|
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
Implements RakServerInterface. |
|
Returns true if the server is currently active Reimplemented from RakPeer. |
|
Returns true if that player ID is currently used Implements RakServerInterface. |
|
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. |
|
Kick out the specified player. Implements RakServerInterface. |
|
Send a ping request to the specified player Implements RakServerInterface. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
Sets the data to send with an (LAN server discovery) /(offline ping) response
Reimplemented from RakPeer. |
|
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
Implements RakServerInterface. |
|
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. |
|
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!
Implements RakServerInterface. |
|
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.
Implements RakServerInterface. |
|
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)
Implements RakServerInterface. |
|
Call this to initiate the server with the number of players you want to be allowed connected at once
Implements RakServerInterface. |
|
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. |
|
Start or restart the synchronized random integer. This is on by default. Call StopSynchronizedRandomInteger to stop it keeping the number in synch Implements RakServerInterface. |
|
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. |
|
Stop the synchronized random integer. Call StartSynchronizedRandomInteger to start it again Implements RakServerInterface. |
|
Synchronized random integer |
|
Synchronized random integer |
|
Synchronized random integer |
|
|
|
Synchronized random integer |
|
|