PIP 5.6.1
Platform-Independent Primitives
Public Member Functions | Protected Member Functions | List of all members
PIStreamPacker Class Reference

Simple packet wrapper around any PIIODevice Provides packet framing and deframing for data transmission over any PIIODevice implementation. More...

#include <pistreampacker.h>

Inheritance diagram for PIStreamPacker:
Inheritance graph
[legend]

Public Member Functions

 PIStreamPacker (PIIODevice *dev=nullptr)
 Constructs packer and optionally binds it to "dev".
 
int receivePacketProgress () const
 Returns number of payload bytes collected for current packet.
 
void clear ()
 Clears buffered stream state and incomplete packet data.
 
void send (const PIByteArray &data)
 Fragments data and raises sendRequest() for each fragment.
 
void received (const PIByteArray &data)
 Feeds received bytes into the unpacker. More...
 
void assignDevice (PIIODevice *dev)
 Binds "dev" read and write callbacks to this packer. More...
 
- Public Member Functions inherited from PIObject
 PIObject (const PIString &name=PIString())
 Constructs an object and initializes its name property.
 
virtual ~PIObject ()
 Destroys the object, raises deleted() and disconnects it from the event graph.
 
PIString name () const
 Returns the name property of this object.
 
virtual const char * className () const
 Returns the registered class name of this object.
 
virtual uint classNameID () const
 Returns the hash of className().
 
virtual const char * parentClassName () const
 Returns the registered parent class name, or an empty string for the root.
 
bool debug () const
 Returns whether piCoutObj output is enabled for this object.
 
void setName (const PIString &name)
 Sets the name property of this object.
 
void setDebug (bool debug)
 Enables or disables piCoutObj output for this object.
 
PIVariant property (const char *name) const
 Returns the property with name "name".
 
void setProperty (const char *name, const PIVariant &value)
 Sets the property "name" to "value" and creates it if needed. More...
 
bool isPropertyExists (const char *name) const
 Returns whether the property "name" exists.
 
void setThreadSafe (bool yes)
 Enables or disables the internal object mutex during handler execution. More...
 
bool isThreadSafe () const
 Returns whether the internal object mutex is enabled for handler execution.
 
bool execute (const PIString &method, const PIVector< PIVariantSimple > &vl)
 Executes a registered method or handler method by name with the supplied arguments. More...
 
bool execute (const PIString &method)
 Overload of execute() for a method without arguments.
 
bool execute (const PIString &method, const PIVariantSimple &v0)
 Overload of execute() for one argument.
 
bool execute (const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1)
 Overload of execute() for two arguments.
 
bool execute (const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2)
 Overload of execute() for three arguments.
 
bool execute (const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2, const PIVariantSimple &v3)
 Overload of execute() for four arguments.
 
bool executeQueued (PIObject *performer, const PIString &method, const PIVector< PIVariantSimple > &vl)
 Queues execution of a registered method on the performer object. More...
 
bool executeQueued (PIObject *performer, const PIString &method)
 Overload of executeQueued() for a method without arguments.
 
bool executeQueued (PIObject *performer, const PIString &method, const PIVariantSimple &v0)
 Overload of executeQueued() for one argument.
 
bool executeQueued (PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1)
 Overload of executeQueued() for two arguments.
 
bool executeQueued (PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2)
 Overload of executeQueued() for three arguments.
 
bool executeQueued (PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2, const PIVariantSimple &v3)
 Overload of executeQueued() for four arguments.
 
void dump (const PIString &line_prefix=PIString()) const
 Dumps object diagnostics to the project output stream.
 
PIStringList scopeList () const
 Returns the registered inheritance scope of this object, including its own class.
 
PIStringList methodsEH () const
 Returns full signatures of all registered event and handler methods for this class scope.
 
bool isMethodEHContains (const PIString &name) const
 Returns whether a registered event or handler method with this name exists.
 
PIString methodEHArguments (const PIString &name) const
 Returns the comma-separated argument type list of a registered method.
 
PIString methodEHFullFormat (const PIString &name) const
 Returns the full registered signature of a method.
 
PIString methodEHFromAddr (const void *addr) const
 Returns the registered method name for the specified entry-point address.
 
void piDisconnect (const PIString &sig, PIObject *dest, void *ev_h)
 Disconnects this source object from a specific destination handler for event "sig".
 
void piDisconnect (const PIString &sig, PIObject *dest)
 Disconnects this source object from all connections of event "sig" to destination object "dest".
 
void piDisconnect (const PIString &sig)
 Disconnects this source object from all connections of event "sig".
 
bool isPIObject () const
 Returns whether this pointer still refers to a live PIObject instance.
 
template<typename T >
bool isTypeOf () const
 Returns whether this object belongs to class "T" or one of its registered descendants.
 
template<typename T >
T * cast () const
 Returns this object cast to "T" when isTypeOf<T>() succeeds, otherwise nullptr.
 
void callQueuedEvents ()
 Executes all queued deliveries posted to this performer object.
 
bool maybeCallQueuedEvents ()
 Executes queued deliveries only when this object was used as a performer. More...
 
void deleteLater ()
 Schedules the object for deferred deletion. More...
 
void deleted (PIObject *o)
 Raised immediately before object destruction. More...
 
- Public Member Functions inherited from PIStreamPackerConfig
 PIStreamPackerConfig ()
 Constructs configuration with default packet framing parameters.
 
void setMaxPacketSize (int max_size)
 Sets maximum size of one emitted frame chunk.
 
int maxPacketSize () const
 Returns maximum size of one emitted frame chunk.
 
void setPacketSign (ushort sign_)
 Sets packet signature used to detect frame boundaries.
 
ushort packetSign () const
 Returns packet signature.
 
void setaAggressiveOptimization (bool yes)
 Enables faster resynchronization on invalid stream data. More...
 
bool aggressiveOptimization () const
 Returns whether aggressive resynchronization is enabled.
 
bool cryptSizeEnabled () const
 Returns whether packet size field is encrypted too.
 
void setCryptSizeEnabled (bool on)
 Enables or disables encryption of the packet size field.
 
const PIStreamPackerConfigconfiguration () const
 Returns configuration as a const self-reference.
 
PIStreamPackerConfigconfiguration ()
 Returns configuration as a mutable self-reference.
 
void setConfiguration (const PIStreamPackerConfig &config)
 Replaces current framing configuration with "config".
 
- Public Member Functions inherited from PIEthUtilBase
 PIEthUtilBase ()
 Constructs helper with crypt layer disabled.
 
 ~PIEthUtilBase ()
 Destroys the crypt helper.
 
void setCryptEnabled (bool on)
 Enables or disables the crypt layer.
 
void cryptEnable ()
 Enables the crypt layer.
 
void cryptDisable ()
 Disables the crypt layer.
 
bool isCryptEnabled () const
 Returns whether the crypt layer is enabled.
 
void setCryptKey (const PIByteArray &k)
 Sets crypt key "k" and enables the crypt layer.
 
void createCryptKey (const PIString &k)
 Generates crypt key from passphrase "k" and enables the crypt layer.
 
PIByteArray cryptKey () const
 Returns current crypt key.
 

Protected Member Functions

virtual void packetReceived (PIByteArray data)
 Called after a packet payload has been reconstructed.
 
- Protected Member Functions inherited from PIObject
PIObjectemitter () const
 Returns the source object that raised the current event. More...
 
virtual void propertyChanged (const char *name)
 Virtual method called after property "name" has been changed by setProperty().
 
- Protected Member Functions inherited from PIEthUtilBase
PIByteArray cryptData (const PIByteArray &data)
 Encrypts "data" when the crypt layer is enabled.
 
PIByteArray decryptData (const PIByteArray &data)
 Decrypts "data" when the crypt layer is enabled. More...
 

Handlers

void received (const uchar *readed, ssize_t size)
 Handler overload for raw byte buffers from PIIODevice::threadedReadEvent().
 

Events

void packetReceiveEvent (PIByteArray &data)
 Emitted when a complete packet is received.
 
void startPacketReceive (int size)
 Emitted when a new packet with payload size "size" starts.
 
void endPacketReceive ()
 Emitted after the current packet has been fully received.
 
void sendRequest (PIByteArray data)
 Emitted by send() for every framed chunk ready to write to the device.
 

Additional Inherited Members

- Static Public Member Functions inherited from PIObject
static bool execute (PIObject *o, const PIString &method, const PIVector< PIVariantSimple > &vl)
 Static convenience wrapper for execute().
 
static bool execute (PIObject *o, const PIString &method)
 Static overload of execute() without arguments.
 
static bool execute (PIObject *o, const PIString &method, const PIVariantSimple &v0)
 Static overload of execute() for one argument.
 
static bool execute (PIObject *o, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1)
 Static overload of execute() for two arguments.
 
static bool execute (PIObject *o, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2)
 Static overload of execute() for three arguments.
 
static bool execute (PIObject *o, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2, const PIVariantSimple &v3)
 Static overload of execute() for four arguments.
 
static bool executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVector< PIVariantSimple > &vl)
 Static convenience wrapper for executeQueued().
 
static bool executeQueued (PIObject *o, PIObject *performer, const PIString &method)
 Static overload of executeQueued() without arguments.
 
static bool executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVariantSimple &v0)
 Static overload of executeQueued() for one argument.
 
static bool executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1)
 Static overload of executeQueued() for two arguments.
 
static bool executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2)
 Static overload of executeQueued() for three arguments.
 
static bool executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2, const PIVariantSimple &v3)
 Static overload of executeQueued() for four arguments.
 
static PIObject::Connection piConnect (PIObject *src, const PIString &sig, PIObject *dest_o, void *dest, void *ev_h, void *e_h, int args, const char *loc)
 Low-level direct connection helper behind the legacy CONNECT* macros.
 
static PIObject::Connection piConnectU (PIObject *src, const PIString &sig, PIObject *dest_o, void *dest, const PIString &hname, const char *loc, PIObject *performer=0)
 Low-level name-based connection helper behind CONNECTU() and CONNECTU_QUEUED().
 
static PIObject::Connection piConnectLS (PIObject *src, const PIString &sig, std::function< void()> *f, const char *loc)
 Low-level helper that connects an event to a lambda or functor wrapper.
 
static void piDisconnect (PIObject *src, const PIString &sig, PIObject *dest, void *ev_h)
 Disconnects source object "src" from a specific destination handler for event "sig".
 
static void piDisconnect (PIObject *src, const PIString &sig, PIObject *dest)
 Disconnects source object "src" from all connections of event "sig" to destination object "dest".
 
static void piDisconnect (PIObject *src, const PIString &sig)
 Disconnects source object "src" from all connections of event "sig".
 
static void raiseEvent (PIObject *sender, const uint eventID)
 Internal event delivery helper for registered events without arguments.
 
template<typename T0 >
static void raiseEvent (PIObject *sender, const uint eventID, const T0 &v0=T0())
 Internal event delivery helper for registered events with one argument.
 
template<typename T0 , typename T1 >
static void raiseEvent (PIObject *sender, const uint eventID, const T0 &v0=T0(), const T1 &v1=T1())
 Internal event delivery helper for registered events with two arguments.
 
template<typename T0 , typename T1 , typename T2 >
static void raiseEvent (PIObject *sender, const uint eventID, const T0 &v0=T0(), const T1 &v1=T1(), const T2 &v2=T2())
 Internal event delivery helper for registered events with three arguments.
 
template<typename T0 , typename T1 , typename T2 , typename T3 >
static void raiseEvent (PIObject *sender, const uint eventID, const T0 &v0=T0(), const T1 &v1=T1(), const T2 &v2=T2(), const T3 &v3=T3())
 Internal event delivery helper for registered events with four arguments.
 
static PIObjectfindByName (const PIString &name)
 Returns the first live object with name "name", or nullptr.
 
static bool isPIObject (const PIObject *o)
 Returns whether "o" points to a live PIObject instance.
 
static bool isPIObject (const void *o)
 Overload of isPIObject() for an untyped pointer.
 
template<typename T >
static bool isTypeOf (const PIObject *o)
 Returns whether "o" belongs to class "T" or one of its registered descendants.
 
template<typename T >
static bool isTypeOf (const void *o)
 Overload of isTypeOf() for an untyped pointer.
 
static PIString simplifyType (const char *a, bool readable=true)
 Simplifies a C++ type spelling for registered-method metadata.
 
- Static Public Member Functions inherited from PIEthUtilBase
static size_t cryptSizeAddition ()
 Returns extra size added by encryption.
 

Detailed Description

Simple packet wrapper around any PIIODevice Provides packet framing and deframing for data transmission over any PIIODevice implementation.

Simple packet wrap aroud any PIIODevice.

Synopsis

PIStreamPacker provides simple pack/unpack logic for any data packets.

When you call send() function data splited into several parts, packetSign() prepended to first part and sendRequest() event raised several times.

When your device receive some data, call received() function. packetReceiveEvent() event will be raised when packet will be collected.

Use assignDevice() to connect device to this PIStreamPacker.

Member Function Documentation

◆ received()

void PIStreamPacker::received ( const PIByteArray data)

Feeds received bytes into the unpacker.

Calls packetReceived() and emits packetReceiveEvent() when a packet is complete.

◆ assignDevice()

void PIStreamPacker::assignDevice ( PIIODevice dev)

Binds "dev" read and write callbacks to this packer.

Connects PIIODevice::threadedReadEvent() to received() and sendRequest() to PIIODevice::write().