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

TCP device wrapper that exposes framed packets through the PIIODevice API.The PIPackedTCP class provides a TCP client/server device with automatic data packing/unpacking using PIStreamPacker. It supports both client and server roles with reliable byte-stream transmission over TCP connections. More...

#include <pipackedtcp.h>

Inheritance diagram for PIPackedTCP:
Inheritance graph
[legend]

Public Types

enum  Role { Client , Server }
 Operating role of PIPackedTCP. More...
 
- Public Types inherited from PIIODevice
enum  DeviceMode { ReadOnly = 0x01 , WriteOnly = 0x02 , ReadWrite = 0x03 }
 Open modes for PIIODevice. More...
 
enum  DeviceOption { BlockingRead = 0x01 , BlockingWrite = 0x02 }
 Generic options supported by some devices. More...
 
enum  DeviceInfoFlag { Sequential = 0x01 , Reliable = 0x02 }
 Characteristics of the device channel. More...
 
typedef PIFlags< DeviceOptionDeviceOptions
 Bitmask of DeviceOption values.
 
typedef PIFlags< DeviceInfoFlagDeviceInfoFlags
 Bitmask of DeviceInfoFlag values.
 

Public Member Functions

 PIPackedTCP (Role role=Client, const PINetworkAddress &addr={})
 Constructs PIPackedTCP with role "role" and endpoint "addr".
 
virtual ~PIPackedTCP ()
 Destroys the packed TCP device.
 
void setAddress (const PINetworkAddress &addr)
 Sets listen address for server mode or remote address for client mode.
 
bool isConnected () const
 Returns true if the TCP connection is established and active.
 
bool isConnecting () const
 Returns true if the device is currently attempting to establish a TCP connection.
 
PINetworkAddress address () const
 Returns configured endpoint address.
 
Role role () const
 Returns current operating role.
 
- Public Member Functions inherited from PIIODevice
 PIIODevice ()
 Constructs an empty PIIODevice.
 
 PIIODevice (const PIString &path, DeviceMode mode=ReadWrite)
 Constructs PIIODevice with path "path" and open mode "mode".
 
virtual ~PIIODevice ()
 Destroys the device base object.
 
DeviceMode mode () const
 Returns current open mode.
 
void setMode (DeviceMode m)
 Sets open mode without reopening the device.
 
DeviceOptions options () const
 Returns current device options.
 
bool isOptionSet (DeviceOption o) const
 Returns whether option "o" is enabled.
 
void setOptions (DeviceOptions o)
 Replaces all current device options with "o".
 
bool setOption (DeviceOption o, bool yes=true)
 Sets option "o" to "yes" and returns its previous state.
 
DeviceInfoFlags infoFlags () const
 Returns device channel characteristics.
 
PIString path () const
 Returns current device path.
 
void setPath (const PIString &path)
 Sets device path without reopening the device.
 
bool isReadable () const
 Returns whether the current mode allows reading.
 
bool isWriteable () const
 Returns whether the current mode allows writing.
 
bool isOpened () const
 Returns whether the device is currently opened.
 
bool isClosed () const
 Returns whether the device is currently closed.
 
virtual bool canRead () const
 Returns whether reading is possible right now.
 
virtual bool canWrite () const
 Returns whether writing is possible right now.
 
void setReopenEnabled (bool yes=true)
 Enables or disables automatic reopen attempts during threaded read.
 
void setReopenTimeout (PISystemTime timeout)
 Sets delay between automatic reopen attempts.
 
bool isReopenEnabled () const
 Returns whether automatic reopen is enabled.
 
PISystemTime reopenTimeout ()
 Returns delay between automatic reopen attempts.
 
void setThreadedReadSlot (ReadRetFunc func)
 Sets callback invoked after successful threaded reads. More...
 
void setThreadedReadData (void *d)
 Sets custom user data passed to threaded read callback.
 
void setThreadedReadBufferSize (int new_size)
 Sets background read buffer size in bytes. More...
 
int threadedReadBufferSize () const
 Returns background read buffer size in bytes.
 
const uchar * threadedReadBuffer () const
 Returns pointer to the internal threaded-read buffer.
 
void * threadedReadData () const
 Returns custom data passed to threaded read callback.
 
bool isThreadedRead () const
 Returns whether threaded read is running.
 
bool isThreadedReadStopping () const
 Returns whether threaded read is stopping.
 
void startThreadedRead ()
 Starts threaded read.
 
void startThreadedRead (ReadRetFunc func)
 Sets threaded read callback to "func" and starts threaded read.
 
void stopThreadedRead ()
 Requests threaded read stop.
 
void terminateThreadedRead ()
 Terminate threaded read. More...
 
bool waitThreadedReadFinished (PISystemTime timeout={})
 Waits until threaded read finishes or "timeout" expires.
 
uint threadedReadTimeout () const
 Returns delay between unsuccessful threaded read attempts in milliseconds.
 
void setThreadedReadTimeout (uint ms)
 Sets delay between unsuccessful threaded read attempts in milliseconds.
 
bool isThreadedWrite () const
 Returns whether threaded write is running.
 
void startThreadedWrite ()
 Starts threaded write.
 
void stopThreadedWrite ()
 Requests threaded write stop.
 
void terminateThreadedWrite ()
 Terminate threaded write. More...
 
bool waitThreadedWriteFinished (PISystemTime timeout={})
 Waits until threaded write finishes or "timeout" expires.
 
void clearThreadedWriteQueue ()
 Clears queued threaded-write tasks.
 
void start ()
 Starts both threaded read and threaded write.
 
void stop ()
 Requests stop for both threaded read and threaded write.
 
void stopAndWait (PISystemTime timeout={})
 Stops both background threads and waits for completion.
 
virtual void interrupt ()
 Interrupts a blocking device operation.
 
ssize_t read (void *read_to, ssize_t max_size)
 Reads at most "max_size" bytes into "read_to".
 
ssize_t read (PIMemoryBlock mb)
 Reads data into memory block "mb".
 
PIByteArray read (ssize_t max_size)
 Reads at most "max_size" bytes and returns them as PIByteArray.
 
virtual ssize_t bytesAvailable () const
 Returns the number of bytes that are available for reading. More...
 
ssize_t write (const void *data, ssize_t max_size)
 Writes at most "max_size" bytes from "data".
 
PIByteArray readForTime (PISystemTime timeout)
 Reads data for up to "timeout" and returns collected bytes.
 
ullong writeThreaded (const void *data, ssize_t max_size)
 Queues "data" for threaded write and returns task ID.
 
ullong writeThreaded (const PIByteArray &data)
 Queues byte array "data" for threaded write and returns task ID.
 
bool configure (const PIString &config_file, const PIString &section, bool parent_section=false)
 Configures the device from section "section" of file "config_file". More...
 
virtual PIConstChars fullPathPrefix () const
 Returns device prefix used in full-path notation. Creating devices by unambiguous string.
 
PIString constructFullPath () const
 Returns full-path representation of this device, fullPathPrefix() + "://" + ...
 
void configureFromFullPath (const PIString &full_path)
 Configures the device from full-path parameters.
 
PIVariantTypes::IODevice constructVariant () const
 Builds PIVariantTypes::IODevice description for this device.
 
void configureFromVariant (const PIVariantTypes::IODevice &d)
 Configures the device from PIVariantTypes::IODevice.
 
ssize_t write (const PIMemoryBlock &mb)
 Writes memory block "mb" to the device.
 
bool open ()
 Opens the device with current path and mode.
 
bool open (const PIString &_path)
 Opens the device with path "path".
 
bool open (DeviceMode _mode)
 Opens the device with mode "mode".
 
bool open (const PIString &_path, DeviceMode _mode)
 Opens the device with path "path" and mode "mode".
 
bool close ()
 Closes the device.
 
ssize_t write (PIByteArray data)
 Writes "data" to the device.
 
virtual void flush ()
 Immediately flushes device buffers.
 
void opened ()
 Raised after successful opening.
 
void closed ()
 Raised after successful closing.
 
void threadedReadEvent (const uchar *readed, ssize_t size)
 Raised after threaded read receives some data.
 
void threadedWriteEvent (ullong id, ssize_t written_size)
 Raised after threaded write processes task with ID "id".
 
- 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...
 

Protected Member Functions

DeviceInfoFlags deviceInfoFlags () const override
 Reimplement to report actual DeviceInfoFlags. Default implementation returns 0.
 
PIString constructFullPathDevice () const override
 Reimplement to build device-specific part of full-path string. Default implementation returns path().
 
void configureFromFullPathDevice (const PIString &full_path) override
 Reimplement to configure the device from device-specific full-path parameters. Default implementation calls setPath().
 
ssize_t readDevice (void *read_to, ssize_t max_size) override
 Reimplement this function to read from your device.
 
ssize_t writeDevice (const void *data, ssize_t max_size) override
 Reimplement this function to write to your device.
 
bool openDevice () override
 Reimplement to open device, return value will be set to "opened_" variable. Don't call this function in subclass, use open()!
 
bool closeDevice () override
 Reimplement to close the device; inverse return value is stored into "opened_".
 
- Protected Member Functions inherited from PIIODevice
virtual bool configureDevice (const void *e_main, const void *e_parent=0)
 Reimplement to configure the device from "e_main" and optional "e_parent" entries cast to PIConfig::Entry*.
 
virtual bool openDevice ()=0
 Reimplement to open device, return value will be set to "opened_" variable. Don't call this function in subclass, use open()!
 
virtual bool closeDevice ()
 Reimplement to close the device; inverse return value is stored into "opened_".
 
virtual ssize_t readDevice (void *read_to, ssize_t max_size)
 Reimplement this function to read from your device.
 
virtual ssize_t writeDevice (const void *data, ssize_t max_size)
 Reimplement this function to write to your device.
 
virtual bool threadedRead (const uchar *readed, ssize_t size)
 Called after threaded read receives data; default implementation calls the external callback set by setThreadedReadSlot().
 
virtual PIString constructFullPathDevice () const
 Reimplement to build device-specific part of full-path string. Default implementation returns path().
 
virtual void configureFromFullPathDevice (const PIString &full_path)
 Reimplement to configure the device from device-specific full-path parameters. Default implementation calls setPath().
 
virtual PIPropertyStorage constructVariantDevice () const
 Reimplement to build device-specific variant properties. Default implementation returns PIPropertyStorage with "path".
 
virtual void configureFromVariantDevice (const PIPropertyStorage &d)
 Reimplement to configure the device from PIPropertyStorage. Mode and options are already applied. Default implementation applies "path".
 
virtual void optionsChanged ()
 Reimplement to react to changed device options.
 
virtual DeviceInfoFlags deviceInfoFlags () const
 Reimplement to report actual DeviceInfoFlags. Default implementation returns 0.
 
virtual void threadedReadBufferSizeChanged ()
 Reimplement to react to new threadedReadBufferSize().
 
- 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().
 

Events

void connected ()
 Emitted when client connection becomes ready or a server accepts a client.
 
void disconnected ()
 Emitted when active TCP connection is lost or closed.
 

Additional Inherited Members

- Static Public Member Functions inherited from PIIODevice
static PIIODevicecreateFromFullPath (const PIString &full_path)
 Try to create new device by prefix, configure it with configureFromFullPath() and returns it. More...
 
static PIIODevicecreateFromVariant (const PIVariantTypes::IODevice &d)
 Try to create new device by prefix, configure it with configureFromVariant() and returns it.
 
static PIString normalizeFullPath (const PIString &full_path)
 Returns normalized full-path representation for "full_path".
 
static void splitFullPath (PIString fpwm, PIString *full_path, DeviceMode *mode=0, DeviceOptions *opts=0)
 Splits full-path string into path, mode and options.
 
static PIStringList availablePrefixes ()
 Returns fullPath prefixes of all registered devices.
 
static PIStringList availableClasses ()
 Returns class names of all registered devices.
 
- 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.
 
- Public Attributes inherited from PIIODevice
bool reopenEnabled
 setReopenEnabled, default "true".
 
int reopenTimeout
 setReopenTimeout, default 1_s.
 
int threadedReadBufferSize
 setThreadedReadBufferSize in bytes, default 4096.
 

Detailed Description

TCP device wrapper that exposes framed packets through the PIIODevice API.

The PIPackedTCP class provides a TCP client/server device with automatic data packing/unpacking using PIStreamPacker. It supports both client and server roles with reliable byte-stream transmission over TCP connections.

TCP packed channel.

Synopsis

PIEthernet designed to work with IPv4 network via two protocols: UDP and TCP. This class allow you send and receive packets to/from another computer through network. Also it supports broadcast and multicast extensions.

Member Enumeration Documentation

◆ Role

Operating role of PIPackedTCP.

Enumerator
Client 

TCP client side

Server 

TCP server for one client