PIP  0.5.0_alpha
Platform-Independent Primitives
PIBinaryLog Class Reference

Class for read and write binary data to logfile, and playback this data in realtime, or custom speed. More...

Inheritance diagram for PIBinaryLog:

Classes

struct  BinLogIndex
 Struct contains position, ID and timestamp of record in file. More...
 
struct  BinLogInfo
 Struct contains full information about Binary Log file and about all Records using map of BinLogRecordInfo. More...
 
struct  BinLogRecordInfo
 Struct contains information about all records with same ID. More...
 

Public Types

enum  PlayMode { PlayRealTime, PlayVariableSpeed, PlayStaticDelay }
 Play modes for PIBinaryLog. More...
 
enum  SplitMode { SplitNone, SplitTime, SplitSize, SplitCount }
 Different split modes for writing PIBinaryLog, which can separate files by size, by time or by records count. More...
 
- Public Types inherited from PIIODevice
enum  DeviceMode { ReadOnly = 0x01, WriteOnly = 0x02, ReadWrite = 0x03 }
 Open modes for PIIODevice. More...
 
- Public Types inherited from PIThread
enum  Priority {
  piLowerst, piLow, piNormal, piHigh,
  piHighest
}
 Priority of thread. More...
 

Public Member Functions

PlayMode playMode () const
 Current PlayMode.
 
SplitMode splitMode () const
 Current SplitMode.
 
PIString logDir () const
 Current directory where billogs wiil be saved.
 
PIString filePrefix () const
 Returns current file prefix.
 
int defaultID () const
 Default ID, used in write function.
 
double playSpeed () const
 Returns current play speed.
 
PISystemTime playDelay () const
 Returns current play delay.
 
PISystemTime splitTime () const
 Returns current binlog file split time.
 
llong splitFileSize () const
 Returns current binlog file split size.
 
int splitRecordCount () const
 Returns current binlog file split records count.
 
bool rapidStart () const
 Returns if rapid start enabled.
 
void createNewFile (const PIString &path)
 Create binlog file with Filename = path.
 
void setPlayMode (PlayMode mode)
 Set PlayMode.
 
void setSplitMode (SplitMode mode)
 Set SplitMode.
 
void setLogDir (const PIString &path)
 Set path to directory where binlogs will be saved.
 
void setFilePrefix (const PIString &prefix)
 Set file prefix, used to.
 
void setDefaultID (int id)
 Set defaultID, used in write function.
 
void setRapidStart (bool enabled)
 If enabled BinLog ThreadedRead starts without delay for first record, i.e. first record will be readed immediately.
 
void setPlaySpeed (double speed)
 
void setPlayDelay (const PISystemTime &delay)
 
void setPlayRealTime ()
 Set playMode to PlayRealTime.
 
void setSplitTime (const PISystemTime &time)
 
void setSplitFileSize (llong size)
 
void setSplitRecordCount (int count)
 
int writeBinLog (int id, PIByteArray data)
 Write one record to BinLog file, with ID = id, id must be greather than 0.
 
int writeBinLog (int id, const void *data, int size)
 Write one record to BinLog file, with ID = id, id must be greather than 0.
 
int writeBinLog_raw (int id, const PISystemTime &time, const PIByteArray &data)
 Write one RAW record to BinLog file, with ID = id, Timestamp = time.
 
int writeCount () const
 Returns count of writed records.
 
PIByteArray readBinLog (int id=0, PISystemTime *time=0)
 Read one record from BinLog file, with ID = id, if id = 0 than any id will be readed.
 
int readBinLog (int id, void *read_to, int max_size, PISystemTime *time=0)
 Read one record from BinLog file, with ID = id, if id = 0 than any id will be readed.
 
llong logSize () const
 Returns binary log file size.
 
bool isEnd () const
 Return true, if position at the end of BinLog file.
 
bool isEmpty () const
 Returns if BinLog file is empty.
 
int lastReadedID () const
 Returns if BinLog file is empty.
 
int read (void *read_to, int max_size)
 Set position in file to reading/playing. More...
 
int write (const void *data, int size)
 Write one record to BinLog file, with ID = "defaultID".
 
void restart ()
 Go to begin of BinLog file.
 
PIString constructFullPath () const
 Reimplement to construct full unambiguous string, describes this device, default returns fullPathPrefix() + "://" + path()
 
BinLogInfo logInfo () const
 Get binlog info BinLogInfo.
 
const PIVector< BinLogIndex > & logIndex () const
 Get binlog index BinLogIndex, need createIndex before getting index.
 
bool createIndex ()
 TODO: Think about index positions. More...
 
void seekTo (int rindex)
 Go to record #index.
 
bool seek (const PISystemTime &time)
 Go to nearest record.
 
int pos () const
 Get current record index (position record in file)
 
- Public Member Functions inherited from PIIODevice
 PIIODevice ()
 Constructs a empty PIIODevice.
 
 PIIODevice (const PIString &path, DeviceMode mode=ReadWrite)
 Constructs a PIIODevice with path and mode. More...
 
DeviceMode mode () const
 Current open mode of device.
 
void setMode (DeviceMode m)
 Set open mode of device.
 
PIString path () const
 Current path of device.
 
void setPath (const PIString &path)
 Set path of device.
 
bool isReadable () const
 Return true if mode is ReadOnly or ReadWrite.
 
bool isWriteable () const
 Return true if mode is WriteOnly or ReadWrite.
 
bool isOpened () const
 Return true if device is successfully opened.
 
bool isClosed () const
 Return true if device is closed.
 
virtual bool canRead () const
 Return true if device can read now.
 
virtual bool canWrite () const
 Return true if device can write now.
 
void setReopenEnabled (bool yes=true)
 Set execution of open enabled while threaded read on closed device.
 
void setReopenTimeout (int msecs)
 Set timeout in milliseconds between open tryings if reopen is enabled.
 
bool isReopenEnabled () const
 Return reopen enable.
 
int reopenTimeout ()
 Return reopen timeout.
 
void setThreadedReadSlot (ReadRetFunc func)
 Set "threaded read slot". More...
 
void setThreadedReadData (void *d)
 Set custom data that will be passed to "threaded read slot".
 
void setThreadedReadBufferSize (int new_size)
 Set size of threaded read buffer. More...
 
int threadedReadBufferSize () const
 Return size of threaded read buffer.
 
const uchar * threadedReadBuffer () const
 Return content of threaded read buffer.
 
void * threadedReadData () const
 Return custom data that will be passed to "threaded read slot".
 
bool isThreadedRead () const
 Return true if threaded read is started.
 
void startThreadedRead ()
 Start threaded read.
 
void startThreadedRead (ReadRetFunc func)
 Start threaded read and assign "threaded read slot" to "func".
 
void stopThreadedRead ()
 Stop threaded read.
 
bool isThreadedWrite () const
 Return true if threaded write is started.
 
void startThreadedWrite ()
 Start threaded write.
 
void stopThreadedWrite ()
 Stop threaded write.
 
void clearThreadedWriteQueue ()
 Clear threaded write task queue.
 
void start ()
 Start both threaded read and threaded write.
 
void stop (bool wait=false)
 Stop both threaded read and threaded write and if "wait" block until both threads are stop.
 
PIByteArray read (int max_size)
 Read from device maximum "max_size" bytes and return them as PIByteArray.
 
PIByteArray readForTime (double timeout_ms)
 Read from device for "timeout_ms" milliseconds and return readed data as PIByteArray. Timeout should to be greater than 0.
 
int write (const PIByteArray &data)
 Write "data" to device.
 
ullong writeThreaded (const void *data, int max_size)
 Add task to threaded write queue and return task ID.
 
ullong writeThreaded (const PIByteArray &data)
 Add task to threaded write queue and return task ID.
 
bool configure (const PIString &config_file, const PIString &section, bool parent_section=false)
 Configure device from section "section" of file "config_file", if "parent_section" parent section also will be read.
 
bool open ()
 Open device.
 
bool open (const PIString &_path)
 Open device with path "path".
 
bool open (const DeviceMode &_mode)
 Open device with mode "mode".
 
bool open (const PIString &_path, const DeviceMode &_mode)
 Open device with path "path" and mode "mode".
 
bool close ()
 Close device.
 
bool initialize ()
 Initialize device.
 
virtual void flush ()
 Immediate write all buffers.
 
void opened ()
 Raise if succesfull open.
 
void closed ()
 Raise if succesfull close.
 
void threadedReadEvent (uchar *readed, int size)
 Raise if read thread succesfull read some data.
 
void threadedWriteEvent (ullong id, int written_size)
 Raise if write thread succesfull write some data of task with ID "id".
 
- Public Member Functions inherited from PIThread
 PIThread (void *data, ThreadFunc func, bool startNow=false, int loop_delay=-1)
 Contructs thread with custom data "data", external function "func" and main loop delay "loop_delay".
 
 PIThread (bool startNow=false, int loop_delay=-1)
 Contructs thread with main loop delay "loop_delay".
 
void setData (void *d)
 Set common data passed to external function.
 
void setSlot (ThreadFunc func)
 Set external function that will be executed after every run()
 
void setPriority (PIThread::Priority prior)
 Set priority of thread.
 
void * data () const
 Returns common data passed to external function.
 
PIThread::Priority priority () const
 Return priority of thread.
 
bool isRunning () const
 Return true if thread is running.
 
void needLockRun (bool need)
 Set necessity of lock every run with internal mutex.
 
PIMutexmutex ()
 Return internal mutex.
 
bool start (int timer_delay)
 Start thread. More...
 
bool start (ThreadFunc func, int timer_delay)
 Start thread. More...
 
bool startOnce ()
 Start thread without internal loop. More...
 
bool startOnce (ThreadFunc func)
 Start thread without internal loop. More...
 
void stop (bool wait)
 Stop thread. More...
 
void terminate ()
 Strongly stop thread. More...
 
bool waitForStart (int timeout_msecs)
 Wait for thread start. More...
 
bool waitForFinish (int timeout_msecs)
 Wait for thread finish. More...
 
void lock ()
 Lock internal mutex.
 
void unlock ()
 Unlock internal mutex.
 
void started ()
 Raise on thread start.
 
void stopped ()
 Raise on thread stop.
 
- Public Member Functions inherited from PIObject
 PIObject (const PIString &name=PIString())
 Contructs PIObject with name "name".
 
PIString name () const
 Returns object name.
 
virtual const char * className () const
 Returns object class name.
 
virtual const char * superClassName () const
 Returns object superclass name.
 
bool debug () const
 Return if debug of this object is active.
 
void setName (const PIString &name)
 Set object name.
 
void setDebug (bool debug)
 Set object debug active.
 
const PIMap< PIString, PIVariant > & properties () const
 Returns properties of the object.
 
int propertiesCount () const
 Returns properties count of the object.
 
PIVariant property (const PIString &name) const
 Returns property with name "name".
 
void setProperty (const PIString &name, const PIVariant &value)
 Set property with name "name" to "value". If there is no such property in object it will be added.
 
bool isPropertyExists (const PIString &name) const
 Returns if property with name "name" exists.
 

Static Public Member Functions

static BinLogInfo getLogInfo (const PIString &path)
 TODO: Think about index positions. More...
 
- Static Public Member Functions inherited from PIIODevice
static PIIODevicecreateFromFullPath (const PIString &full_path)
 Try to determine suitable device, create new one, configure it with configureFromFullPath() and returns it. More...
 
- Static Public Member Functions inherited from PIObject
static void piDisconnect (PIObject *src, const PIString &sig)
 Disconnect object "src" from all connections with event name "sig".
 
static void piDisconnect (PIObject *src)
 Disconnect object "src" from all connections, i.e. all connections where object "src" is emitter.
 
static PIObjectfindByName (const PIString &name)
 Returns PIObject* with name "name" or 0, if there is no object found.
 

Public Attributes

PIVector< int > filterID
 Array of ID, that BinLog can read from binlog file, when use read function, or in ThreadedRead.
 
- Public Attributes inherited from PIIODevice
bool reopenEnabled
 setReopenEnabled, default "true"
 
int reopenTimeout
 setReopenTimeout in ms, default 1000
 
int threadedReadBufferSize
 setThreadedReadBufferSize in bytes, default 4096
 

Protected Member Functions

PIString fullPathPrefix () const
 Reimplement to construct full unambiguous string prefix. Creating devices by unambiguous string.
 
void configureFromFullPath (const PIString &full_path)
 Reimplement to configure your device with parameters of full unambiguous string. Default implementation does nothing.
 
bool openDevice ()
 Reimplement to open device, return value will be set to "opened_" variable.
 
bool closeDevice ()
 Reimplement to close device, inverse return value will be set to "opened_" variable.
 
void propertyChanged (const PIString &)
 Virtual function executes after property with name "name" has been changed.
 
bool threadedRead (uchar *readed, int size)
 Function executed when thread read some data, default implementation execute external slot "ret_func_".
 
- Protected Member Functions inherited from PIIODevice
virtual bool init ()
 Function executed before first openDevice() or from constructor.
 
virtual bool configureDevice (const void *e_main, const void *e_parent=0)
 Reimplement to configure device from entries "e_main" and "e_parent", cast arguments to PIConfig::Entry*.
 
- Protected Member Functions inherited from PIObject
PIObjectemitter () const
 Returns PIObject* which has raised an event. This value is correct only in definition of some event handler.
 
void deleted ()
 Raise before object delete. More...
 

Handlers

TODO: Think about index positions

PIString createNewFile ()
 Create new binlog file in logDir, if successful returns filename, else returns empty string. Filename is like filePrefix + "yyyy_MM_dd__hh_mm_ss.binlog".
 

Events

void fileEnd ()
 Raise on file end while reading.
 
void fileError ()
 Raise on file creation error.
 
void newFile (const PIString &filename)
 Raise on new file created.
 

Additional Inherited Members

Detailed Description

Class for read and write binary data to logfile, and playback this data in realtime, or custom speed.

TODO: Create static functions to split and join binlog files TODO: Create functions to insert and delete records

Synopsis

Binary Log is a file with simple header, where you can read and write some binary data. Any written data include special header with ID, size and timestamp. This header provides separation different messages from the one file by choosing different IDs. With filterID or special functions, like readBinLog() you can choose IDs what you want to read. With function writeBinLog() or setDefaultID() you can choose ID that mark you data. By default ID = 1, and filterID is empty, that mean you read any ID without filtering. ThreadedRead provide you playback data, with delay that you write data. You can choose different playbak modes by set PlayMode.

Basic usage

This class provide all functions of PIIODevice, such open(), close(), read() ,write(), and threaded read/write. function setLogDir() need to set directory for BinLog files function createNewFile() need to create new binlog file function restart() need start from the begining of binlog file

Member Enumeration Documentation

Play modes for PIBinaryLog.

Enumerator
PlayRealTime 

Play in system realtime, default mode

PlayVariableSpeed 

Play in software realtime with speed, set by setSpeed

PlayStaticDelay 

Play with custom static delay, ignoring timestamp

Different split modes for writing PIBinaryLog, which can separate files by size, by time or by records count.

Enumerator
SplitNone 

Without separate, default mode

SplitTime 

Separate files by record time

SplitSize 

Separate files by size

SplitCount 

Separate files by records count

Member Function Documentation

void PIBinaryLog::setPlaySpeed ( double  speed)
inline

Set play speed to "speed", default value is 1.0x Also this function set playMode to PlayVariableSpeed

void PIBinaryLog::setPlayDelay ( const PISystemTime delay)
inline

Setting static delay between records, default value is 1 sec Also this function set playMode to PlayStaticDelay

void PIBinaryLog::setSplitTime ( const PISystemTime time)
inline

Set binlog file split time Also this function set splitMode to SplitTime

void PIBinaryLog::setSplitFileSize ( llong  size)
inline

Set binlog file split size Also this function set splitMode to SplitSize

void PIBinaryLog::setSplitRecordCount ( int  count)
inline

Set binlog file split records count Also this function set splitMode to SplitCount

int PIBinaryLog::read ( void *  read_to,
int  max_size 
)
virtual

Set position in file to reading/playing.

Read one message from binlog file, with ID contains in "filterID" or any ID, if "filterID" is empty

Reimplemented from PIIODevice.

bool PIBinaryLog::createIndex ( )

TODO: Think about index positions.

Create index of current binlog file

PIBinaryLog::BinLogInfo PIBinaryLog::getLogInfo ( const PIString path)
static

TODO: Think about index positions.

Get binlog info and statistic