RakNet
4.0
|
Fully connected mesh plugin, revision 2. More...
#include <FullyConnectedMesh2.h>
Public Member Functions | |
void | SetConnectOnNewRemoteConnection (bool attemptConnection, RakNet::RakString pw) |
RakNetGUID | GetConnectedHost (void) const |
The connected host is whichever system we are connected to that has been running the longest. | |
RakNetGUID | GetHostSystem (void) const |
bool | IsHostSystem (void) const |
void | GetHostOrder (DataStructures::List< RakNetGUID > &hostList) |
bool | IsConnectedHost (void) const |
void | SetAutoparticipateConnections (bool b) |
Automatically add new connections to the fully connected mesh. Each remote system that you want to check should be added as a participant, either through SetAutoparticipateConnections() or by calling this function. | |
void | ResetHostCalculation (void) |
void | AddParticipant (RakNetGUID rakNetGuid) |
if SetAutoparticipateConnections() is called with false, then you need to use AddParticipant before these systems will be added to the mesh FullyConnectedMesh2 will track who is the who host among a fully connected mesh of participants Each remote system that you want to check should be added as a participant, either through SetAutoparticipateConnections() or by calling this function | |
void | GetParticipantList (DataStructures::List< RakNetGUID > &participantList) |
bool | HasParticipant (RakNetGUID participantGuid) |
Returns if a participant is in the participant list. | |
void | ConnectToRemoteNewIncomingConnections (Packet *packet) |
void | Clear (void) |
Clear all memory and reset everything. | |
virtual void | StartVerifiedJoin (RakNetGUID client) |
Notify the client of GetParticipantList() in order to connect to each of those systems until the mesh has been completed. | |
virtual void | RespondOnVerifiedJoinCapable (Packet *packet, bool accept, BitStream *additionalData) |
On ID_FCM2_VERIFIED_JOIN_CAPABLE , accept or reject the new connection. | |
virtual void | GetVerifiedJoinRequiredProcessingList (RakNetGUID host, DataStructures::List< SystemAddress > &addresses, DataStructures::List< RakNetGUID > &guids) |
On ID_FCM2_VERIFIED_JOIN_START, read the SystemAddress and RakNetGUID values of each system to connect to. | |
virtual void | GetVerifiedJoinAcceptedAdditionalData (Packet *packet, bool *thisSystemAccepted, DataStructures::List< RakNetGUID > &systemsAccepted, BitStream *additionalData) |
On ID_FCM2_VERIFIED_JOIN_ACCEPTED, read additional data passed to RespondOnVerifiedJoinCapable() | |
virtual void | GetVerifiedJoinRejectedAdditionalData (Packet *packet, BitStream *additionalData) |
On ID_FCM2_VERIFIED_JOIN_REJECTED, read additional data passed to RespondOnVerifiedJoinCapable() | |
virtual PluginReceiveResult | OnReceive (Packet *packet) |
virtual void | OnRakPeerStartup (void) |
Called when RakPeer is initialized. | |
virtual void | OnAttach (void) |
Called when the interface is attached. | |
virtual void | OnRakPeerShutdown (void) |
Called when RakPeer is shutdown. | |
virtual void | OnClosedConnection (const SystemAddress &systemAddress, RakNetGUID rakNetGUID, PI2_LostConnectionReason lostConnectionReason) |
virtual void | OnNewConnection (const SystemAddress &systemAddress, RakNetGUID rakNetGUID, bool isIncoming) |
virtual void | OnFailedConnectionAttempt (Packet *packet, PI2_FailedConnectionAttemptReason failedConnectionAttemptReason) |
![]() | |
virtual void | OnDetach (void) |
Called when the interface is detached. | |
virtual void | Update (void) |
Update is called every time a packet is checked for . | |
virtual bool | UsesReliabilityLayer (void) const |
virtual void | OnDirectSocketSend (const char *data, const BitSize_t bitsUsed, SystemAddress remoteSystemAddress) |
virtual void | OnDirectSocketReceive (const char *data, const BitSize_t bitsUsed, SystemAddress remoteSystemAddress) |
virtual void | OnReliabilityLayerNotification (const char *errorMessage, const BitSize_t bitsUsed, SystemAddress remoteSystemAddress, bool isError) |
virtual void | OnInternalPacket (InternalPacket *internalPacket, unsigned frameNumber, SystemAddress remoteSystemAddress, RakNet::TimeMS time, int isSend) |
virtual void | OnAck (unsigned int messageNumber, SystemAddress remoteSystemAddress, RakNet::TimeMS time) |
virtual void | OnPushBackPacket (const char *data, const BitSize_t bitsUsed, SystemAddress remoteSystemAddress) |
Protected Attributes | |
DataStructures::List < FCM2Participant > | fcm2ParticipantList |
List of systems we know the FCM2Guid for. | |
Fully connected mesh plugin, revision 2.
This will connect RakPeer to all connecting peers, and all peers the connecting peer knows about.
It will also calculate which system has been running longest, to find out who should be host, if you need one system to act as a host
void RakNet::FullyConnectedMesh2::AddParticipant | ( | RakNetGUID | rakNetGuid | ) |
if SetAutoparticipateConnections() is called with false, then you need to use AddParticipant before these systems will be added to the mesh FullyConnectedMesh2 will track who is the who host among a fully connected mesh of participants Each remote system that you want to check should be added as a participant, either through SetAutoparticipateConnections() or by calling this function
[in] | participant | The new participant |
void RakNet::FullyConnectedMesh2::ConnectToRemoteNewIncomingConnections | ( | Packet * | packet | ) |
Connect to all systems from ID_REMOTE_NEW_INCOMING_CONNECTION You can call this if SetConnectOnNewRemoteConnection is false
[in] | packet | The packet containing ID_REMOTE_NEW_INCOMING_CONNECTION |
[in] | connectionPassword | Password passed to RakPeerInterface::Connect() |
[in] | connectionPasswordLength | Password length passed to RakPeerInterface::Connect() |
RakNetGUID RakNet::FullyConnectedMesh2::GetConnectedHost | ( | void | ) | const |
The connected host is whichever system we are connected to that has been running the longest.
Will return UNASSIGNED_RAKNET_GUID if we are not connected to anyone, or if we are connected and are calculating the host If includeCalculating is true, will return the estimated calculated host as long as the calculation is nearly complete includeCalculating should be true if you are taking action based on another system becoming host, because not all host calculations may complete at the exact same time
void RakNet::FullyConnectedMesh2::GetHostOrder | ( | DataStructures::List< RakNetGUID > & | hostList | ) |
Get the list of connected systems, from oldest connected to newest This is also the order that the hosts will be chosen in
RakNetGUID RakNet::FullyConnectedMesh2::GetHostSystem | ( | void | ) | const |
void RakNet::FullyConnectedMesh2::GetParticipantList | ( | DataStructures::List< RakNetGUID > & | participantList | ) |
Get the participants added with AddParticipant()
[out] | participantList | Participants added with AddParticipant(); |
|
virtual |
On ID_FCM2_VERIFIED_JOIN_ACCEPTED, read additional data passed to RespondOnVerifiedJoinCapable()
[in] | packet | Packet containing the ID_FCM2_VERIFIED_JOIN_ACCEPTED message |
[out] | thisSystemAccepted | If true, it was this instance of RakPeerInterface that was accepted. If false, this is notification for another system |
[out] | systemsAccepted | Which system(s) were added with AddParticipant(). If thisSystemAccepted is false, this list will only have length 1 |
[out] | additionalData | additionalData parameter passed to RespondOnVerifiedJoinCapable() |
|
virtual |
On ID_FCM2_VERIFIED_JOIN_REJECTED, read additional data passed to RespondOnVerifiedJoinCapable()
This does not automatically close the connection. The following code will do so:
[in] | packet | Packet containing the ID_FCM2_VERIFIED_JOIN_REJECTED message |
[out] | additionalData | additionalData parameter passed to RespondOnVerifiedJoinCapable(). |
|
virtual |
On ID_FCM2_VERIFIED_JOIN_START, read the SystemAddress and RakNetGUID values of each system to connect to.
[in] | host | Which system sent ID_FCM2_VERIFIED_JOIN_START |
[out] | addresses | SystemAddress values of systems to connect to. List has the same number and order as guids |
[out] | guids | RakNetGUID values of systems to connect to. List has the same number and order as guids |
bool RakNet::FullyConnectedMesh2::HasParticipant | ( | RakNetGUID | participantGuid | ) |
Returns if a participant is in the participant list.
[in] | RakNetGUID | of the participant to query |
bool RakNet::FullyConnectedMesh2::IsConnectedHost | ( | void | ) | const |
[in] | includeCalculating | If true, and we are currently calculating a new host, return the new host if the calculation is nearly complete |
bool RakNet::FullyConnectedMesh2::IsHostSystem | ( | void | ) | const |
|
virtual |
Called when a connection is dropped because the user called RakPeer::CloseConnection() for a particular system
[in] | systemAddress | The system whose connection was closed |
[in] | rakNetGuid | The guid of the specified system |
[in] | lostConnectionReason | How the connection was closed: manually, connection lost, or notification of disconnection |
Reimplemented from RakNet::PluginInterface2.
|
virtual |
Called when a connection attempt fails
[in] | packet | Packet to be returned to the user |
[in] | failedConnectionReason | Why the connection failed |
Reimplemented from RakNet::PluginInterface2.
|
virtual |
Called when we got a new connection
[in] | systemAddress | Address of the new connection |
[in] | rakNetGuid | The guid of the specified system |
[in] | isIncoming | If true, this is ID_NEW_INCOMING_CONNECTION, or the equivalent |
Reimplemented from RakNet::PluginInterface2.
|
virtual |
OnReceive is called for every packet.
[in] | packet | the packet that is being returned to the user |
Reimplemented from RakNet::PluginInterface2.
void RakNet::FullyConnectedMesh2::ResetHostCalculation | ( | void | ) |
Clear our own host order, and recalculate as if we had just reconnected Call this to reset the running time of the host just before joining/creating a game room for networking
|
virtual |
On ID_FCM2_VERIFIED_JOIN_CAPABLE , accept or reject the new connection.
[in] | packet | The system that sent ID_FCM2_VERIFIED_JOIN_CAPABLE. Based on , ID_FCM2_VERIFIED_JOIN_ACCEPTED or ID_FCM2_VERIFIED_JOIN_REJECTED will be sent in reply |
[in] | accept | True to accept, and thereby automatically call AddParticipant() on all systems on the mesh. False to reject, and call CloseConnection() to all mesh systems on the target |
[in] | additionalData | Any additional data you want to add to the ID_FCM2_VERIFIED_JOIN_ACCEPTED or ID_FCM2_VERIFIED_JOIN_REJECTED messages |
void RakNet::FullyConnectedMesh2::SetAutoparticipateConnections | ( | bool | b | ) |
Automatically add new connections to the fully connected mesh. Each remote system that you want to check should be added as a participant, either through SetAutoparticipateConnections() or by calling this function.
Defaults to true.
[in] | b | As stated |
void RakNet::FullyConnectedMesh2::SetConnectOnNewRemoteConnection | ( | bool | attemptConnection, |
RakNet::RakString | pw | ||
) |
When the message ID_REMOTE_NEW_INCOMING_CONNECTION arrives, we try to connect to that system If attemptConnection is false, you can manually connect to all systems listed in ID_REMOTE_NEW_INCOMING_CONNECTION with ConnectToRemoteNewIncomingConnections()
[in] | attemptConnection | If true, we try to connect to any systems we are notified about with ID_REMOTE_NEW_INCOMING_CONNECTION, which comes from the ConnectionGraph2 plugin. Defaults to true. |
[in] | pw | The password to use to connect with. Only used if attemptConnection is true |
|
virtual |
Notify the client of GetParticipantList() in order to connect to each of those systems until the mesh has been completed.
In the simple case of forming a peer to peer mesh:
However, the above steps assumes connections to all systems in the mesh always complete. When there is a risk of failure, such as if relying on NATPunchthroughClient, you may not want to call AddParticipant() until are connections have completed to all other particpants StartVerifiedJoin() can manage the overhead of the negotiation involved so the programmer only has to deal with overall success or failure
Processing:
[in] | client | The system to send ID_FCM2_VERIFIED_JOIN_START to |