Plasma Engine  2.0
Loading...
Searching...
No Matches
plMessage Class Reference

Base class for all message types. Each message type has it's own id which is used to dispatch messages efficiently. More...

#include <Message.h>

Inheritance diagram for plMessage:

Public Member Functions

virtual plInt32 GetSortingKey () const
 Derived message types can override this method to influence sorting order. Smaller keys are processed first.
 
PL_ALWAYS_INLINE plMessageId GetId () const
 Returns the id for this message type.
 
PL_ALWAYS_INLINE plUInt16 GetSize () const
 Returns the size in byte of this message.
 
PL_ALWAYS_INLINE plUInt64 GetHash () const
 Calculates a hash of the message.
 
virtual void Serialize (plStreamWriter &inout_stream) const
 Implement this for efficient transmission across process boundaries (e.g. network transfer etc.)
 
virtual void Deserialize (plStreamReader &inout_stream, plUInt8 uiTypeVersion)
 
- Public Member Functions inherited from plReflectedClass
virtual const plRTTIGetDynamicRTTI () const
 
bool IsInstanceOf (const plRTTI *pType) const
 Returns whether the type of this instance is of the given type or derived from it.
 
template<typename T >
PL_ALWAYS_INLINE bool IsInstanceOf () const
 Returns whether the type of this instance is of the given type or derived from it.
 

Static Public Member Functions

static void PackageForTransfer (const plMessage &msg, plStreamWriter &inout_stream)
 Writes msg to stream in such a way that ReplicatePackedMessage() can restore it even in another process.
 
static plUniquePtr< plMessageReplicatePackedMessage (plStreamReader &inout_stream)
 Restores a message that was written by PackageForTransfer()
 
- Static Public Member Functions inherited from plNoBase
static const plRTTIGetStaticRTTI ()
 

Protected Member Functions

 plMessage (size_t messageSize)
 

Static Protected Member Functions

static PL_ALWAYS_INLINE plMessageId GetNextMsgId ()
 

Protected Attributes

plMessageId m_Id
 
plUInt16 m_uiSize
 

Static Protected Attributes

static plMessageId s_NextMsgId = 0
 

Detailed Description

Base class for all message types. Each message type has it's own id which is used to dispatch messages efficiently.

To implement a custom message type derive from plMessage and add PL_DECLARE_MESSAGE_TYPE to the type declaration. PL_IMPLEMENT_MESSAGE_TYPE needs to be added to a cpp.

See also
plRTTI

For the automatic cloning to work and for efficiency the messages must only contain simple data members. For instance, everything that allocates internally (strings, arrays) should be avoided. Instead, such objects should be located somewhere else and the message should only contain pointers to the data.

Member Function Documentation

◆ Deserialize()

virtual void plMessage::Deserialize ( plStreamReader & inout_stream,
plUInt8 uiTypeVersion )
inlinevirtual
See also
Serialize()

Reimplemented in plMsgSetColor, and plMsgSetMeshMaterial.

◆ PackageForTransfer()

void plMessage::PackageForTransfer ( const plMessage & msg,
plStreamWriter & inout_stream )
static

Writes msg to stream in such a way that ReplicatePackedMessage() can restore it even in another process.

For this to work the message type has to have the Serialize and Deserialize functions implemented.

Note
This is NOT used by plWorld. Within the same process messages can be dispatched more efficiently.

◆ ReplicatePackedMessage()

plUniquePtr< plMessage > plMessage::ReplicatePackedMessage ( plStreamReader & inout_stream)
static

Restores a message that was written by PackageForTransfer()

If the message type is unknown, nullptr is returned.

See also
PackageForTransfer()

◆ Serialize()

virtual void plMessage::Serialize ( plStreamWriter & inout_stream) const
inlinevirtual

Implement this for efficient transmission across process boundaries (e.g. network transfer etc.)

If the message is only ever sent within the same process between nodes of the same plWorld, this does not need to be implemented.

Note that PackageForTransfer() will automatically include the plRTTI type version into the stream and ReplicatePackedMessage() will pass this into Deserialize(). Use this if the serialization changes.

Reimplemented in plMsgSetColor, and plMsgSetMeshMaterial.


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