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

Connection diagnostics for packet frequency, throughput and receive quality This class provides connection quality diagnostics based on packet reception statistics. More...

#include <pidiagnostics.h>

Inheritance diagram for PIDiagnostics:
Inheritance graph
[legend]

Classes

struct  State
 Snapshot of current counters and derived statistics. More...
 

Public Types

enum  Quality
 Receive quality estimated from recent packet history.
 

Public Member Functions

 PIDiagnostics (bool start_=true)
 Constructs diagnostics and optionally starts periodic evaluation immediately.
 
virtual ~PIDiagnostics ()
 Stops diagnostics updates.
 
PIDiagnostics::State state () const
 Returns a thread-safe snapshot of current diagnostics state.
 
PISystemTime disconnectTimeout () const
 Returns the disconnect timeout and averaging window.
 
void setDisconnectTimeout (float s) DEPRECATEDM("use setDisconnectTimeout(PISystemTime)")
 Sets the disconnect timeout in seconds.
 
void setDisconnectTimeout (PISystemTime tm)
 Sets the disconnect timeout and averaging window.
 
PIDiagnostics::Quality quality () const
 Returns current receive quality.
 
PIString receiveSpeed () const
 Returns formatted receive throughput string.
 
PIString sendSpeed () const
 Returns formatted send throughput string.
 
- Public Member Functions inherited from PITimer
 PITimer ()
 Constructs a timer without a tick callback.
 
 PITimer (std::function< void(int)> func)
 Constructs a timer with a callback that receives the delimiter value.
 
 PITimer (std::function< void()> func)
 Constructs a timer with a callback that ignores the delimiter value.
 
virtual ~PITimer ()
 Destroys the timer and stops its internal worker thread.
 
PISystemTime interval () const
 Returns the configured base interval between main ticks.
 
void setInterval (PISystemTime interval)
 Sets the base interval. If the timer is running, restarts it with the new value.
 
bool isRunning () const
 Returns whether the timer thread is currently running.
 
bool isStopping () const
 Returns whether stop has been requested and shutdown is still in progress.
 
bool waitForFinish (PISystemTime timeout={})
 Waits until the timer finishes. Returns false if the timeout expires first.
 
bool start (PISystemTime interval)
 Sets the base interval and starts the timer.
 
bool start (PISystemTime interval, std::function< void()> func)
 Sets the base interval and tick callback, then starts the timer.
 
bool start (double interval_ms) DEPRECATEDM("use start(PISystemTime)")
 Deprecated overload of start() that accepts milliseconds.
 
void stopAndWait (int timeout_ms)
 Deprecated overload of stopAndWait() that accepts milliseconds.
 
void stopAndWait (PISystemTime timeout={})
 Requests stop and waits for the worker thread to finish.
 
void setSlot (std::function< void()> func)
 Sets a tick callback that ignores the delimiter value.
 
void setSlot (std::function< void(int)> func)
 Sets a tick callback that receives the current delimiter value.
 
void needLockRun (bool need)
 Enables locking of the internal mutex around tick processing.
 
bool isCallQueuedEvents () const
 Returns whether the timer drains queued delivery for itself as performer on each main tick. By default true.
 
void setCallQueuedEvents (bool yes)
 Enables or disables queued-delivery draining through maybeCallQueuedEvents() on each main tick.
 
void addDelimiter (int delim, std::function< void(int)> func=nullptr)
 Adds a frequency delimiter that invokes func every delim main ticks.
 
void addDelimiter (int delim, std::function< void()> func)
 Adds a delimiter with a callback that ignores the delimiter value.
 
void addDelimiter (int delim, std::function< void(void *)> slot)
 Adds a delimiter with a pointer-based callback signature.
 
void removeDelimiter (int delim)
 Removes all delimiters with value delim.
 
bool start ()
 Starts the timer with the current interval().
 
bool restart ()
 Stops the timer, then starts it again with the current interval().
 
void stop ()
 Requests stop and wakes the timer thread, but does not wait for completion.
 
void lock ()
 Locks the internal timer mutex.
 
void unlock ()
 Unlocks the internal timer mutex.
 
void clearDelimiters ()
 Remove all frequency delimiters.
 
void tickEvent (int delimiter)
 Raised on each timer tick and on configured delimiter ticks. 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...
 

Handlers

void start ()
 Starts periodic diagnostics evaluation with the default interval.
 
void start (PISystemTime interval)
 Starts periodic diagnostics evaluation with interval "interval".
 
void reset ()
 Resets counters, rolling history and derived statistics.
 
void received (int size)
 
void received (int size, bool correct)
 Notifies diagnostics about one received packet of size "size".
 
void sended (int size)
 Notifies diagnostics about one sent packet of size "size".
 

Events

void qualityChanged (PIDiagnostics::Quality new_quality, PIDiagnostics::Quality old_quality)
 Emitted when receive quality changes from "old_quality" to "new_quality".
 

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.
 
virtual void tick (int delimiter)
 Virtual tick method. The main loop passes delimiter 1, additional delimiters pass their own value.
 
- 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().
 

Detailed Description

Connection diagnostics for packet frequency, throughput and receive quality This class provides connection quality diagnostics based on packet reception statistics.

Connection quality diagnostics.

Synopsis

This class provide abstract connection quality diagnostics and counting. You should create instance of PIDiagnostics and on packet receive call function received(), on packet send call function sended(). PIDiagnostics calculates correct, wrong and sended counters, packets per second, bytes per seconds, immediate and integral receive frequencies and receive/send speeds in human readable representation. There statistics are calculates one time per period, by default 1 second. To calculate them you should start PIDiagnostics with function start() or pass true to constructor.