Rebel Fork Framework
Urho3D::Connection Class Reference

Connection to a remote network host. More...

#include <Urho3D/Network/Connection.h>

Inheritance diagram for Urho3D::Connection:
Urho3D::AbstractConnection Urho3D::Object Urho3D::IDFamily< AbstractConnection > Urho3D::RefCounted

Public Member Functions

 Connection (Context *context, NetworkConnection *connection=nullptr)
 Construct with context, RakNet connection address and Raknet peer pointer.
 
 ~Connection () override
 Destruct.
 
void Initialize ()
 Initialize object state. Should be called immediately after constructor.
 
void SendRemoteEvent (StringHash eventType, bool inOrder, const VariantMap &eventData=Variant::emptyVariantMap)
 Send a remote event.
 
void SetScene (Scene *newScene)
 
void SetIdentity (const VariantMap &identity)
 Assign identity. Called by Network.
 
void SetConnectPending (bool connectPending)
 Set the connection pending status. Called by Network.
 
void SetLogStatistics (bool enable)
 
void Disconnect ()
 Disconnect. If wait time is non-zero, will block while waiting for disconnect to finish.
 
void SendRemoteEvents ()
 Send queued remote events. Called by Network.
 
void SendPackages ()
 Send package files to client. Called by network.
 
void SendBuffer (PacketTypeFlags type)
 Send out buffered messages by their type.
 
void SendBuffer (PacketTypeFlags type, VectorBuffer &buffer)
 Send out buffered messages by their type.
 
void SendAllBuffers ()
 Send out all buffered messages.
 
bool ProcessMessage (MemoryBuffer &buffer)
 Process a message from the server or client. Called by Network.
 
VariantMapGetIdentity ()
 Return client identity.
 
SceneGetScene () const
 
bool IsClient () const
 
void SetIsClient (bool isClient)
 
bool IsConnected () const
 
bool IsConnectPending () const
 
bool IsSceneLoaded () const
 
bool GetLogStatistics () const
 
ea::string GetAddress () const
 
unsigned short GetPort () const
 
unsigned long long GetBytesInPerSec () const
 
unsigned long long GetBytesOutPerSec () const
 
int GetPacketsInPerSec () const
 
int GetPacketsOutPerSec () const
 
unsigned GetNumDownloads () const
 
const ea::string & GetDownloadName () const
 
float GetDownloadProgress () const
 
void SendPackageToClient (PackageFile *package)
 Trigger client connection to download a package file from the server. Can be used to download additional resource packages when client is already joined in a scene. The package must have been added as a requirement to the scene the client is joined in, or else the eventual download will fail.
 
void SetPacketSizeLimit (int limit)
 Buffered packet size limit, when reached, packet is sent out immediately.
 
void SendMessage (NetworkMessageId messageId, const unsigned char *data=nullptr, unsigned numBytes=0, PacketTypeFlags packetType=PacketType::ReliableOrdered, ea::string_view debugInfo={})
 
void SendMessage (NetworkMessageId messageId, const VectorBuffer &msg, PacketTypeFlags packetType=PacketType::ReliableOrdered, ea::string_view debugInfo={})
 
void SendMessageInternal (NetworkMessageId messageId, const unsigned char *data, unsigned numBytes, PacketTypeFlags packetType=PacketType::ReliableOrdered) override
 
ea::string ToString () const override
 Return debug connection string for logging.
 
bool IsClockSynchronized () const override
 Return whether the clock is synchronized between client and server.
 
unsigned RemoteToLocalTime (unsigned time) const override
 Convert remote timestamp to local timestamp.
 
unsigned LocalToRemoteTime (unsigned time) const override
 Convert local timestamp to remote timestamp.
 
unsigned GetLocalTime () const override
 Return current local time.
 
unsigned GetLocalTimeOfLatestRoundtrip () const override
 Return local time of last successful ping-pong roundtrip.
 
unsigned GetPing () const override
 Return ping of the connection.
 
- Public Member Functions inherited from Urho3D::AbstractConnection
 AbstractConnection (Context *context)
 
void SendLoggedMessage (NetworkMessageId messageId, const unsigned char *data, unsigned numBytes, PacketTypeFlags packetType=PacketType::ReliableOrdered, ea::string_view debugInfo={})
 
void SendMessage (NetworkMessageId messageId, const unsigned char *data=nullptr, unsigned numBytes=0, PacketTypeFlags packetType=PacketType::ReliableOrdered, ea::string_view debugInfo={})
 
void SendMessage (NetworkMessageId messageId, const VectorBuffer &msg, PacketTypeFlags packetType=PacketType::ReliableOrdered, ea::string_view debugInfo={})
 
template<class T >
void SendSerializedMessage (NetworkMessageId messageId, const T &message, PacketTypeFlags messageType=PacketType::ReliableOrdered)
 
template<class T >
void SendGeneratedMessage (NetworkMessageId messageId, PacketTypeFlags messageType, T generator)
 
void OnMessageReceived (NetworkMessageId messageId, MemoryBuffer &messageData) const
 
template<class T >
void OnMessageReceived (NetworkMessageId messageId, const T &message) const
 
LogLevel GetMessageLogLevel (NetworkMessageId messageId) const
 
- Public Member Functions inherited from Urho3D::Object
 Object (Context *context)
 Construct.
 
 ~Object () override
 Destruct. Clean up self from event sender & receiver structures.
 
virtual StringHash GetType () const =0
 
virtual const ea::string & GetTypeName () const =0
 
virtual const TypeInfoGetTypeInfo () const =0
 Return type info.
 
virtual bool IsInstanceOf (StringHash type) const =0
 Check whether current instance implements specified type.
 
virtual void OnEvent (Object *sender, StringHash eventType, VariantMap &eventData)
 Handle event.
 
virtual void SerializeInBlock (Archive &archive)
 Serialize content from/to archive. May throw ArchiveException.
 
template<typename T >
bool IsInstanceOf () const
 Check current instance is type of specified class.
 
template<typename T >
T * Cast ()
 Cast the object to specified most derived class.
 
template<typename T >
const T * Cast () const
 Cast the object to specified most derived class.
 
void SubscribeToEventManual (StringHash eventType, EventHandler *handler)
 Subscribe to an event that can be sent by any sender.
 
void SubscribeToEventManual (Object *sender, StringHash eventType, EventHandler *handler)
 Subscribe to a specific sender's event.
 
template<class T >
void SubscribeToEvent (StringHash eventType, T handler)
 Subscribe to an event that can be sent by any sender.
 
template<class T >
void SubscribeToEvent (Object *sender, StringHash eventType, T handler)
 Subscribe to a specific sender's event.
 
void UnsubscribeFromEvent (StringHash eventType)
 Unsubscribe from an event.
 
void UnsubscribeFromEvent (Object *sender, StringHash eventType)
 Unsubscribe from a specific sender's event.
 
void UnsubscribeFromEvents (Object *sender)
 Unsubscribe from a specific sender's events.
 
void UnsubscribeFromAllEvents ()
 Unsubscribe from all events.
 
void UnsubscribeFromAllEventsExcept (const ea::vector< StringHash > &exceptions)
 Unsubscribe from all events except those listed.
 
void UnsubscribeFromAllEventsExcept (const ea::vector< Object * > &exceptions)
 Unsubscribe from all events except those with listed senders.
 
void SendEvent (StringHash eventType)
 Send event to all subscribers.
 
void SendEvent (StringHash eventType, VariantMap &eventData)
 Send event with parameters to all subscribers.
 
VariantMapGetEventDataMap () const
 Return a preallocated map for event data. Used for optimization to avoid constant re-allocation of event data maps.
 
template<typename... Args>
void SendEvent (StringHash eventType, const Args &... args)
 Send event with variadic parameter pairs to all subscribers. The parameters are (paramID, paramValue) pairs.
 
ContextGetContext () const
 Return execution context.
 
const VariantGetGlobalVar (StringHash key) const
 
const VariantMapGetGlobalVars () const
 
void SetGlobalVar (StringHash key, const Variant &value)
 
ObjectGetSubsystem (StringHash type) const
 Return subsystem by type.
 
ObjectGetEventSender () const
 Return active event sender. Null outside event handling.
 
EventHandlerGetEventHandler () const
 Return active event handler. Null outside event handling.
 
bool HasSubscribedToEvent (StringHash eventType) const
 Return whether has subscribed to an event without specific sender.
 
bool HasSubscribedToEvent (Object *sender, StringHash eventType) const
 Return whether has subscribed to a specific sender's event.
 
bool HasEventHandlers () const
 Return whether has subscribed to any event.
 
template<class T >
T * GetSubsystem () const
 Template version of returning a subsystem.
 
const ea::string & GetCategory () const
 
void SendEvent (StringHash eventType, const VariantMap &eventData)
 Send event with parameters to all subscribers.
 
void SetBlockEvents (bool block)
 Block object from sending and receiving events.
 
bool GetBlockEvents () const
 Return sending and receiving events blocking status.
 
- Public Member Functions inherited from Urho3D::RefCounted
 RefCounted ()
 Construct. Allocate the reference count structure and set an initial self weak reference.
 
virtual ~RefCounted ()
 Destruct. Mark as expired and also delete the reference count structure if no outside weak references exist.
 
 RefCounted (const RefCounted &rhs)=delete
 Prevent copy construction.
 
RefCountedoperator= (const RefCounted &rhs)=delete
 Prevent assignment.
 
int AddRef ()
 
int ReleaseRef ()
 
int Refs () const
 
int WeakRefs () const
 
RefCountRefCountPtr () const
 Return pointer to the reference count structure.
 
bool HasScriptObject () const
 Return true if script runtime object wrapping this native object exists.
 
bool IsScriptStrongRef () const
 Return true if script reference is strong.
 
- Public Member Functions inherited from Urho3D::IDFamily< AbstractConnection >
 IDFamily ()
 Construct.
 
 ~IDFamily ()
 Destruct.
 
unsigned GetObjectID () const
 Return unique object ID or 0 if not assigned.
 
void AcquireObjectID ()
 Acquire unique object ID. Ignored if unique ID is already acquired.
 
void ReleaseObjectID ()
 Release unique object ID. Ignored if unique ID is already released.
 

Static Public Member Functions

static void RegisterObject (Context *context)
 Register object with the engine.
 
- Static Public Member Functions inherited from Urho3D::Object
static const TypeInfoGetTypeInfoStatic ()
 Return type info static.
 
- Static Public Member Functions inherited from Urho3D::IDFamily< AbstractConnection >
static const unsigned GetNextFreeObjectID ()
 Return upper bound of all used object IDs within family.
 

Public Attributes

VariantMap identity_
 Identity map.
 

Private Member Functions

 URHO3D_OBJECT (Connection, AbstractConnection)
 
void HandleAsyncLoadFinished ()
 Handle scene loaded event.
 
void ProcessLoadScene (int msgID, MemoryBuffer &msg)
 Process a LoadScene message from the server. Called by Network.
 
void ProcessSceneChecksumError (int msgID, MemoryBuffer &msg)
 Process a SceneChecksumError message from the server. Called by Network.
 
void ProcessPackageDownload (int msgID, MemoryBuffer &msg)
 Process package download related messages. Called by Network.
 
void ProcessIdentity (int msgID, MemoryBuffer &msg)
 Process an Identity message from the client. Called by Network.
 
void ProcessSceneLoaded (int msgID, MemoryBuffer &msg)
 Process a SceneLoaded message from the client. Called by Network.
 
void ProcessRemoteEvent (int msgID, MemoryBuffer &msg)
 Process a remote event message from the client or server. Called by Network.
 
void ProcessPackageInfo (int msgID, MemoryBuffer &msg)
 Process a SyncPackagesInfo message from server.
 
void ProcessUnknownMessage (int msgID, MemoryBuffer &msg)
 Process unknown message. All unknown messages are forwarded as an events.
 
bool RequestNeededPackages (unsigned numPackages, MemoryBuffer &msg)
 Check a package list received from server and initiate package downloads as necessary. Return true on success, or false if failed to initialze downloads (cache dir not set).
 
void RequestPackage (const ea::string &name, unsigned fileSize, unsigned checksum)
 Initiate a package download.
 
void SendPackageError (const ea::string &name)
 Send an error reply for a package download.
 
void OnSceneLoadFailed ()
 Handle scene load failure on the server or client.
 
void OnPackageDownloadFailed (const ea::string &name)
 Handle a package download failure on the client.
 
void OnPackagesReady ()
 Handle all packages loaded successfully. Also called directly on MSG_LOADSCENE if there are none.
 
void ProcessPackets ()
 Handles queued packets. Should only be called from main thread.
 

Private Attributes

SharedPtr< NetworkConnectiontransportConnection_
 
Mutex packetQueueLock_
 
ea::vector< VectorBufferincomingPackets_
 
TimedCounter packetCounterIncoming_ {10, 1000}
 
TimedCounter packetCounterOutgoing_ {10, 1000}
 
TimedCounter bytesCounterIncoming_ {10, 1000}
 
TimedCounter bytesCounterOutgoing_ {10, 1000}
 
Timer statsTimer_
 Statistics timer.
 
ea::unordered_map< int, VectorBufferoutgoingBuffer_
 Outgoing packet buffer which can contain multiple messages.
 
int packedMessageLimit_ = 1024
 Outgoing packet size limit.
 
ea::vector< RemoteEventremoteEvents_
 Queued remote events.
 
ea::unique_ptr< ClockSynchronizerclock_
 
WeakPtr< Scenescene_
 
WeakPtr< ReplicationManagerreplicationManager_
 Scene replication and synchronization manager.
 
ea::unordered_map< StringHash, PackageDownloaddownloads_
 Waiting or ongoing package file receive transfers.
 
ea::unordered_map< StringHash, PackageUploaduploads_
 Ongoing package send transfers.
 
ea::string sceneFileName_
 Scene file to load once all packages (if any) have been downloaded.
 
bool isClient_ = false
 
bool connectPending_ = true
 Set to true when connection is initiated, but has not fully opened yet and network stream is not available yet.
 
bool sceneLoaded_ = false
 Scene loaded flag.
 
bool logStatistics_ = false
 Show statistics flag.
 

Friends

class Network
 

Additional Inherited Members

- Static Public Attributes inherited from Urho3D::Object
static constexpr ea::array< StringHash, 0 > TypeHierarchy {}
 
- Protected Attributes inherited from Urho3D::AbstractConnection
VectorBuffer msg_
 Reusable message buffer.
 
- Protected Attributes inherited from Urho3D::Object
WeakPtr< Contextcontext_
 Execution context.
 

Detailed Description

Connection to a remote network host.

Member Function Documentation

◆ GetAddress()

ea::string Urho3D::Connection::GetAddress ( ) const

Return remote address.

◆ GetBytesInPerSec()

unsigned long long Urho3D::Connection::GetBytesInPerSec ( ) const

Return bytes received per second.

◆ GetBytesOutPerSec()

unsigned long long Urho3D::Connection::GetBytesOutPerSec ( ) const

Return bytes sent per second.

◆ GetDownloadName()

const ea::string & Urho3D::Connection::GetDownloadName ( ) const

Return name of current package download, or empty if no downloads.

◆ GetDownloadProgress()

float Urho3D::Connection::GetDownloadProgress ( ) const

Return progress of current package download, or 1.0 if no downloads.

◆ GetLogStatistics()

bool Urho3D::Connection::GetLogStatistics ( ) const
inline

Return whether to log data in/out statistics.

◆ GetNumDownloads()

unsigned Urho3D::Connection::GetNumDownloads ( ) const

Return number of package downloads remaining.

◆ GetPacketsInPerSec()

int Urho3D::Connection::GetPacketsInPerSec ( ) const

Return packets received per second.

◆ GetPacketsOutPerSec()

int Urho3D::Connection::GetPacketsOutPerSec ( ) const

Return packets sent per second.

◆ GetPort()

unsigned short Urho3D::Connection::GetPort ( ) const

Return remote port.

◆ GetScene()

Scene * Urho3D::Connection::GetScene ( ) const

Return the scene used by this connection.

◆ IsClient()

bool Urho3D::Connection::IsClient ( ) const
inline

Return whether is a client connection.

◆ IsConnected()

bool Urho3D::Connection::IsConnected ( ) const

Return whether is fully connected.

◆ IsConnectPending()

bool Urho3D::Connection::IsConnectPending ( ) const
inline

Return whether connection is pending.

◆ IsSceneLoaded()

bool Urho3D::Connection::IsSceneLoaded ( ) const
inline

Return whether the scene is loaded and ready to receive server updates.

◆ SendMessageInternal()

void Urho3D::Connection::SendMessageInternal ( NetworkMessageId  messageId,
const unsigned char *  data,
unsigned  numBytes,
PacketTypeFlags  packetType = PacketType::ReliableOrdered 
)
overridevirtual

◆ SetLogStatistics()

void Urho3D::Connection::SetLogStatistics ( bool  enable)

Set whether to log data in/out statistics.

◆ SetScene()

void Urho3D::Connection::SetScene ( Scene newScene)

Assign scene. On the server, this will cause the client to load it.

Member Data Documentation

◆ clock_

ea::unique_ptr<ClockSynchronizer> Urho3D::Connection::clock_
private

Scene synchronization.

Utility to keep server and client clocks synchronized.

◆ isClient_

bool Urho3D::Connection::isClient_ = false
private

General connection state.

Client connection flag. True for many connections accepted by the server through Network::StartServer. False for a single client connection connected to the server through Network::Connect.

◆ packetCounterIncoming_

TimedCounter Urho3D::Connection::packetCounterIncoming_ {10, 1000}
mutableprivate

Packet handling.

Packet count in the last second.


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