# FCMHost Class Reference
[FullyConnectedMeshHost]

`#include <FCMHost.h>`

Inheritance diagram for FCMHost:

List of all members.

## Public Member Functions
| FCMHost ()
| Constructor.
virtual | ~FCMHost ()
| Destructor.
void | AddParticipant (RakNetGUID guid, FCMHostGroupID groupId=0)
void | RemoveParticipantFromAllGroups (RakNetGUID guid)
bool | RemoveParticipant (RakNetGUID guid, FCMHostGroupID groupId=0)
void | SetAutoAddNewConnections (bool autoAdd, FCMHostGroupID groupId=0)
FCMHostState | GetHostState (FCMHostGroupID groupId=0)
bool | HasHost (FCMHostGroupID groupId=0)
RakNetGUID | GetHost (FCMHostGroupID groupId=0)
void | SetHostPriority (int priority, FCMHostGroupID groupId=0)
void | GetParticipants (DataStructures::List< RakNetGUID > &participants, FCMHostGroupID groupId=0)
| Get all participants in a group.
void | Clear (void)
| Reset the system, clearing all data.
virtual PluginReceiveResult | OnReceive (Packet *packet)
virtual void | OnShutdown (void)
| Called when RakPeer is shutdown.
virtual void | OnClosedConnection (SystemAddress systemAddress, RakNetGUID rakNetGUID, PI2_LostConnectionReason lostConnectionReason)
virtual void | OnNewConnection (SystemAddress systemAddress, RakNetGUID rakNetGUID, bool isIncoming)

## Detailed Description

Precondition:
  A fully connected mesh is required among the participants - e.g. all participants must eventually connect to all other participants. Otherwise the algorithm will not return the same host among all systems.

Note:
  ID_FCM_HOST_CHANGED is returned to RakPeerInterface::Receive() every time the host changes.

## Member Function Documentation

void FCMHost::AddParticipant | ( | RakNetGUID | guid,
|  | FCMHostGroupID | groupId = `0` |
| ) |  |  |

Add a connected system to the list of systems to manage host tracking

Parameters:

  `[in]` | guid | The system to add
  `[in]` | groupId | Which group to assign this system to. Groups are used if you want to manage more than one list at a time. Use 0 if you don't care.

RakNetGUID FCMHost::GetHost | ( | FCMHostGroupID | groupId = `0` | ) |

Get the current host. Only meaningful when GetHostState is FCMHS_WE_ARE_HOST or FCMHS_REMOTE_SYSTEM_IS_HOST

Parameters:

  `[in]` | groupId | Which group we are referring to.

Returns:
  The Guid of the host

FCMHostState FCMHost::GetHostState | ( | FCMHostGroupID | groupId = `0` | ) |

Get the current state of the system for determing the host

Parameters:

  `[in]` | groupId | Which group we are referring to.

bool FCMHost::HasHost | ( | FCMHostGroupID | groupId = `0` | ) |

Returns if we are connected to other systems, and one of those systems (possibly ourselves) is a host If we are not connected to other systems, then our own system is always the host, and in a sense the host is undetermined This function could also be named HasValidHost, or IsHostDetermined

Parameters:

  `[in]` | groupId | Which group we are referring to.

Returns:
  true If there is a networked host

void FCMHost::OnClosedConnection | ( | SystemAddress | systemAddress,
|  | RakNetGUID | rakNetGUID,
|  | PI2_LostConnectionReason | lostConnectionReason |
| ) |  |  | `[virtual]`

Called when a connection is dropped because the user called RakPeer::CloseConnection() for a particular system

Parameters:

  `[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 PluginInterface2.

void FCMHost::OnNewConnection | ( | SystemAddress | systemAddress,
|  | RakNetGUID | rakNetGUID,
|  | bool | isIncoming |
| ) |  |  | `[virtual]`

Called when we got a new connection

Parameters:

  `[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 PluginInterface2.

PluginReceiveResult FCMHost::OnReceive | ( | Packet * | packet | ) | `[virtual]`

OnReceive is called for every packet.

Parameters:

  `[in]` | packet | the packet that is being returned to the user

Returns:
  True to allow the game and other plugins to get this message, false to absorb it

Reimplemented from PluginInterface2.

bool FCMHost::RemoveParticipant | ( | RakNetGUID | guid,
|  | FCMHostGroupID | groupId = `0` |
| ) |  |  |

Remove a participant added with AddParticipant(), or automatically added with SetAutoAddNewConnections()

Parameters:

  `[in]` | guid | The system to remove
  `[in]` | groupId | Which group to remove this system from. Groups are used if you want to manage more than one list at a time. Use 0 if you don't care.

Returns:
  True if done, false if not

void FCMHost::RemoveParticipantFromAllGroups | ( | RakNetGUID | guid | ) |

Remove a participant added with AddParticipant(), or automatically added with SetAutoAddNewConnections(), from all groups

Parameters:

  `[in]` | guid | The system to remove

void FCMHost::SetAutoAddNewConnections | ( | bool | autoAdd,
|  | FCMHostGroupID | groupId = `0` |
| ) |  |  |

If set to true, all subsequent new connections will be added to groupId. Defaults to false

Parameters:

  `[in]` | autoAdd | If true, removes the need to call AddParticipant() on ID_NEW_INCOMING_CONNECTION or ID_CONNECTION_REQUEST_ACCEPTED Which group to automatically add systems to. Unused parameter if autoAdd is false

void FCMHost::SetHostPriority | ( | int | priority,
|  | FCMHostGroupID | groupId = `0` |
| ) |  |  |

While calculating the host, priority gives a boost to which system will be host If two systems have the same priority, the system with the lower GUID will be host. priority defaults to 0 This won't change the host after the fact, only before adding that system with AddParticipant

Parameters:

  `[in]` | priority | The priority level to set. Just a number for comparison, set to whatever you want.
  `[in]` | groupId | Which group we are referring to.

The documentation for this class was generated from the following files:

- C:/RakNet/Source/FCMHost.h
- C:/RakNet/Source/FCMHost.cpp