PIP 5.6.1
Platform-Independent Primitives
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
PIBaseTransfer Class Referenceabstract

Base transport for reliable fixed-size packet exchange over an external channel. More...

#include <pibasetransfer.h>

Inheritance diagram for PIBaseTransfer:
Inheritance graph
[legend]

Classes

struct  PacketHeader
 Common header placed before every protocol packet. More...
 
struct  Part
 Logical fragment description used to split data into packets. More...
 

Public Member Functions

 PIBaseTransfer ()
 Constructs transfer with default packet size, timeout and diagnostics.
 
 ~PIBaseTransfer ()
 Stops active transfer state and owned diagnostics.
 
void stopSend ()
 Requests cancellation of the current send session.
 
void stopReceive ()
 Requests cancellation of the current receive session.
 
bool isSending () const
 Returns whether a send session is active.
 
bool isReceiving () const
 Returns whether a receive session is active.
 
bool isPause () const
 Returns whether the transfer is currently paused.
 
void setPause (bool pause_)
 Switches current session between paused and resumed states.
 
void setPacketSize (int size)
 Sets maximum encoded packet size in bytes.
 
int packetSize () const
 Returns maximum encoded packet size in bytes.
 
void setTimeout (double sec)
 Sets session timeout in seconds for start negotiation, acknowledgements and pause recovery.
 
double timeout () const
 Returns session timeout in seconds.
 
void setCRCEnabled (bool en=true)
 Enables or disables CRC validation for data packets.
 
bool isCRCEnabled () const
 Returns whether CRC validation is enabled.
 
PIString stateString () const
 Returns short textual state of the current session.
 
PIString packetMap () const
 Returns a map of successfully received or transmitted packets for the current session.
 
llong bytesAll () const
 Returns total number of bytes planned for the current session.
 
llong bytesCur () const
 Returns number of bytes already processed in the current session.
 
const PIDiagnosticsdiagnostic ()
 Get diagnostics object. 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...
 

Static Public Member Functions

static uint packetSignature ()
 Returns the packet signature constant used by the protocol.
 
- 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.
 

Protected Member Functions

void buildSession (PIVector< Part > parts)
 
virtual PIByteArray buildPacket (Part fi)=0
 Returns payload bytes for one requested logical fragment.
 
virtual void receivePart (Part fi, PIByteArray ba, PIByteArray pheader)=0
 Consumes one received logical fragment and optional custom packet header.
 
virtual void beginReceive ()
 Called after a new receive session is accepted and initialized.
 
virtual PIByteArray customHeader ()
 Custom header.
 
bool send_process ()
 Runs the prepared send session until success, failure or cancellation.
 
- 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().
 

Handlers

void received (PIByteArray data)
 Processes a single encoded packet received from an external transport. More...
 
void stop ()
 Stops both sending and receiving sides of the current session. More...
 
void pause ()
 Switches current session to paused state. More...
 
void resume ()
 Resumes the current paused session. More...
 

Events

void receiveStarted ()
 Emitted when a receive session is accepted and initialized. More...
 
void paused ()
 Emitted when the transfer enters paused state. More...
 
void resumed ()
 Emitted when the transfer leaves paused state. More...
 
void receiveFinished (bool ok)
 Emitted when the receive session finishes with result "ok". More...
 
void sendStarted ()
 Emitted when a prepared send session starts. More...
 
void sendFinished (bool ok)
 Emitted when the send session finishes with result "ok". More...
 
void sendRequest (PIByteArray &data)
 Emitted for every encoded packet that must be written to the external transport. More...
 

Additional Inherited Members

Detailed Description

Base transport for reliable fixed-size packet exchange over an external channel.

This class provides a foundation for reliable data transfer with features like error correction, pause/resume functionality, and packet-based communication.

Member Function Documentation

◆ diagnostic()

const PIDiagnostics & PIBaseTransfer::diagnostic ( )
inline

Get diagnostics object.

Returns
Diagnostic object reference

◆ received()

void PIBaseTransfer::received ( PIByteArray  data)

Processes a single encoded packet received from an external transport.

Note
This handler must be called when data is received by an external transport.

◆ stop()

void PIBaseTransfer::stop ( )
inline

Stops both sending and receiving sides of the current session.

Note
Equivalent to calling both stopSend() and stopReceive().

◆ pause()

void PIBaseTransfer::pause ( )
inline

Switches current session to paused state.

Note
Triggers the paused() signal.

◆ resume()

void PIBaseTransfer::resume ( )
inline

Resumes the current paused session.

Note
Triggers the resumed() signal.

◆ receiveStarted()

void PIBaseTransfer::receiveStarted ( )

Emitted when a receive session is accepted and initialized.

Note
Triggered by internal logic after receiving a valid pt_Start packet.

◆ paused()

void PIBaseTransfer::paused ( )

Emitted when the transfer enters paused state.

Note
Triggered when pause handler is invoked (e.g., via setPause(true) or incoming pt_Pause).

◆ resumed()

void PIBaseTransfer::resumed ( )

Emitted when the transfer leaves paused state.

Note
Triggered when resume handler is invoked (e.g., via setPause(false) or incoming pt_Start during pause).

◆ receiveFinished()

void PIBaseTransfer::receiveFinished ( bool  ok)

Emitted when the receive session finishes with result "ok".

Parameters
oktrue if all packets were received and verified, false on error or interruption.

◆ sendStarted()

void PIBaseTransfer::sendStarted ( )

Emitted when a prepared send session starts.

Note
Triggered after buildSession() and before the first packet is sent.

◆ sendFinished()

void PIBaseTransfer::sendFinished ( bool  ok)

Emitted when the send session finishes with result "ok".

Parameters
oktrue if all packets were sent and acknowledged, false on error or timeout.

◆ sendRequest()

void PIBaseTransfer::sendRequest ( PIByteArray data)

Emitted for every encoded packet that must be written to the external transport.

Parameters
dataEncoded packet including protocol header and payload.
Note
The external transport should send this data.

◆ buildSession()

void PIBaseTransfer::buildSession ( PIVector< Part parts)
protected

Builds session packet layout for logical parts in "parts".