119 lines
4.7 KiB
C++
119 lines
4.7 KiB
C++
/*
|
|
* Copyright (c) 2014, Oculus VR, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
|
|
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
|
|
*
|
|
*/
|
|
|
|
// TOPOLOGY
|
|
// Connect to master server
|
|
// Stay connected
|
|
// When an information query comes in, parse it and write out to a bitstream.
|
|
// When all bitstreams are written, send that back to the master server.
|
|
|
|
#ifndef __MASTER_CLIENT_H
|
|
#define __MASTER_CLIENT_H
|
|
|
|
#include "MasterCommon.h"
|
|
#include "BitStream.h"
|
|
|
|
/// \ingroup MasterServer
|
|
/// \brief implements the master client
|
|
class MasterClient : public MasterCommon
|
|
{
|
|
public:
|
|
MasterClient();
|
|
~MasterClient();
|
|
|
|
// ---------------------------------------------------
|
|
// NETWORKING FUNCTIONS
|
|
// ---------------------------------------------------
|
|
// We must be connected to call any of the following functions.
|
|
// Host is the master server IP
|
|
// masterServerPort is the master server port
|
|
// masterClientPort is the port the master client should use (must be different than gamePort)
|
|
// gamePort is the port your game server or game client is using.
|
|
bool Connect(char* host, int masterServerPort);
|
|
|
|
// Disconnect and terminate. Game servers should stay connected to use NAT punch-through. Game clients,
|
|
// or game servers that do not need NAT punch-through can disconnect.
|
|
void Disconnect(void);
|
|
|
|
// Returns true if connected
|
|
bool IsConnected(void);
|
|
|
|
// This will tell the master server that we are trying to connect to the indicated game server.
|
|
// The indicated server will then also try to connect to us, bypassing most NATs
|
|
// and increasing the chance of a successful connection. You should try connecting to the game server
|
|
// at the same time you call this function.
|
|
void ConnectionAttemptNotification(char *serverIP, unsigned short serverPort);
|
|
|
|
// ---------------------------------------------------
|
|
// SERVER LISTING FUNCTIONS
|
|
// ---------------------------------------------------
|
|
// List the server.
|
|
void ListServer(void);
|
|
// Remove our server listing from the master server
|
|
void DelistServer(void);
|
|
// Add a rule about our server. Can be done before or after listing
|
|
void PostRule(char *ruleIdentifier, char *stringData, int intData);
|
|
// Remove a rule about our server
|
|
void RemoveRule(char *ruleIdentifier);
|
|
|
|
// ---------------------------------------------------
|
|
// SERVER QUERY FUNCTIONS
|
|
// ---------------------------------------------------
|
|
// Adds a rule to look for when we query. This will update existing servers that contain these rules.
|
|
// Do not query for "Ping", "IP", or "Port" as these are automatically returned.
|
|
void AddQueryRule(char *ruleIdentifier);
|
|
// Clears all rules from our query list. This will return all servers.
|
|
void ClearQueryRules(void);
|
|
// Query the master server with our rule set. To get all servers, call ClearQueryRules() after
|
|
// any prior calls to add AddQueryRule to clear the rule set.
|
|
void QueryMasterServer(void);
|
|
// Pings all servers on our list.
|
|
void PingServers(void);
|
|
|
|
// ---------------------------------------------------
|
|
// SEE MasterCommon.h FOR BROWSER FUNCTIONS
|
|
// ---------------------------------------------------
|
|
|
|
// ---------------------------------------------------
|
|
// OVERRIDABLE EVENTS
|
|
// ---------------------------------------------------
|
|
// Event if we lose the connection to the master server
|
|
void OnLostConnection(void);
|
|
// Couldn't connect
|
|
void OnConnectionAttemptFailed(void);
|
|
// Event if the master server is full when we try to connect
|
|
void OnMasterServerFull(void);
|
|
// Event if a packet was tampered with mid-steram
|
|
void OnModifiedPacket(void);
|
|
// Event if a server was added to the list
|
|
void OnGameServerListAddition(GameServer *newServer);
|
|
// Event if a server has its rules updated (only happens if querying with a rule set)
|
|
void OnGameServerListRuleUpdate(GameServer *updatedServer);
|
|
// Event when we complete a query
|
|
void OnGameServerListQueryComplete(void);
|
|
// Event when a game client wants to connect to our server
|
|
// You should call AdvertiseSystem to the passed IP and port from your game instance
|
|
void OnConnectionRequest(const char *clientIP, unsigned short clientPort);
|
|
|
|
protected:
|
|
|
|
void Update(RakPeerInterface *peer);
|
|
bool OnReceive(RakPeerInterface *peer, Packet *packet);
|
|
|
|
void HandleServerListResponse(Packet *packet, bool overwriteExisting);
|
|
void HandleRelayedConnectionNotification(Packet *packet);
|
|
|
|
bool listServer, serverListed, localServerModified;
|
|
GameServer localServer;
|
|
BitStream ruleIdentifierList;
|
|
};
|
|
|
|
#endif
|