This commit is contained in:
2025-11-24 14:19:51 +05:30
commit f5c1412b28
6734 changed files with 1527575 additions and 0 deletions

View File

@ -0,0 +1,118 @@
/*
* 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