merged AI doc, some new pages
This commit is contained in:
@@ -1,9 +1,8 @@
|
||||
/*! \file pistreampacker.h
|
||||
* \ingroup IO-Utils
|
||||
* \~\brief
|
||||
* \~english Simple packet wrap aroud any PIIODevice
|
||||
* \~russian Простая фрагментация пакетов, использует любой PIIODevice
|
||||
*/
|
||||
//! \~\file pistreampacker.h
|
||||
//! \~\ingroup IO-Utils
|
||||
//! \~\brief
|
||||
//! \~english Packet framing helper for byte-stream devices
|
||||
//! \~russian Вспомогательный класс пакетирования для потоковых устройств
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
Simple packet wrap aroud any PIIODevice
|
||||
@@ -33,45 +32,72 @@
|
||||
|
||||
class PIIODevice;
|
||||
|
||||
//! \~\ingroup IO-Utils
|
||||
//! \~\brief
|
||||
//! \~english Configuration for %PIStreamPacker packet framing.
|
||||
//! \~russian Конфигурация пакетирования для %PIStreamPacker.
|
||||
class PIStreamPackerConfig: public PIEthUtilBase {
|
||||
friend class PIStreamPacker;
|
||||
|
||||
public:
|
||||
//! \~english Constructs configuration with default packet framing parameters.
|
||||
//! \~russian Создает конфигурацию с параметрами пакетирования по умолчанию.
|
||||
PIStreamPackerConfig() {
|
||||
crypt_size = false;
|
||||
crypt_size = false;
|
||||
aggressive_optimization = true;
|
||||
max_packet_size = 1400;
|
||||
packet_sign = 0xAFBE;
|
||||
}
|
||||
|
||||
//! Set maximum size of single packet
|
||||
//! \~english Sets maximum size of one emitted frame chunk.
|
||||
//! \~russian Устанавливает максимальный размер одного отправляемого фрагмента.
|
||||
void setMaxPacketSize(int max_size) { max_packet_size = max_size; }
|
||||
|
||||
//! Returns maximum size of single packet, default 1400 bytes
|
||||
//! \~english Returns maximum size of one emitted frame chunk.
|
||||
//! \~russian Возвращает максимальный размер одного отправляемого фрагмента.
|
||||
int maxPacketSize() const { return max_packet_size; }
|
||||
|
||||
//! Set packet sinature
|
||||
//! \~english Sets packet signature used to detect frame boundaries.
|
||||
//! \~russian Устанавливает сигнатуру пакета для поиска границ кадра.
|
||||
void setPacketSign(ushort sign_) { packet_sign = sign_; }
|
||||
|
||||
//! Returns packet sinature, default 0xAFBE
|
||||
//! \~english Returns packet signature.
|
||||
//! \~russian Возвращает сигнатуру пакета.
|
||||
ushort packetSign() const { return packet_sign; }
|
||||
|
||||
//! Set receive aggressive optimization. If yes then %PIStreamPacker doesn`t
|
||||
//! check every byte in incoming stream but check only begin of each read()
|
||||
//! result. Default is \b true.
|
||||
//! \~english Enables faster resynchronization on invalid stream data.
|
||||
//! \~russian Включает более быструю ресинхронизацию при неверных данных в потоке.
|
||||
//! \~\details
|
||||
//! \~english
|
||||
//! When enabled, %PIStreamPacker drops the whole current read chunk after a
|
||||
//! signature mismatch instead of scanning byte by byte.
|
||||
//! \~russian
|
||||
//! Когда режим включен, %PIStreamPacker отбрасывает весь текущий прочитанный
|
||||
//! блок после несовпадения сигнатуры вместо побайтного поиска.
|
||||
void setaAggressiveOptimization(bool yes) { aggressive_optimization = yes; }
|
||||
|
||||
//! Returns aggressive optimization
|
||||
//! \~english Returns whether aggressive resynchronization is enabled.
|
||||
//! \~russian Возвращает, включена ли агрессивная ресинхронизация.
|
||||
bool aggressiveOptimization() const { return aggressive_optimization; }
|
||||
|
||||
//! \~english Returns whether packet size field is encrypted too.
|
||||
//! \~russian Возвращает, шифруется ли также поле размера пакета.
|
||||
bool cryptSizeEnabled() const { return crypt_size; }
|
||||
|
||||
//! \~english Enables or disables encryption of the packet size field.
|
||||
//! \~russian Включает или выключает шифрование поля размера пакета.
|
||||
void setCryptSizeEnabled(bool on) { crypt_size = on; }
|
||||
|
||||
//! Get configuration
|
||||
//! \~english Returns configuration as a const self-reference.
|
||||
//! \~russian Возвращает конфигурацию как константную ссылку на себя.
|
||||
const PIStreamPackerConfig & configuration() const { return *this; }
|
||||
|
||||
//! \~english Returns configuration as a mutable self-reference.
|
||||
//! \~russian Возвращает конфигурацию как изменяемую ссылку на себя.
|
||||
PIStreamPackerConfig & configuration() { return *this; }
|
||||
|
||||
//! Apply configuration
|
||||
//! \~english Replaces current framing configuration with "config".
|
||||
//! \~russian Заменяет текущую конфигурацию пакетирования на "config".
|
||||
void setConfiguration(const PIStreamPackerConfig & config) { *this = config; }
|
||||
|
||||
private:
|
||||
@@ -81,44 +107,58 @@ private:
|
||||
};
|
||||
|
||||
|
||||
//! \~\ingroup IO-Utils
|
||||
//! \~\brief
|
||||
//! \~english Simple packet wrapper around any PIIODevice
|
||||
//! \~russian Простая фрагментация пакетов, использует любой PIIODevice
|
||||
//! \details
|
||||
//! \~english Provides packet framing and deframing for data transmission over any PIIODevice implementation
|
||||
//! \~russian Предоставляет фрагментацию и дефрагментацию пакетов для передачи данных через любую реализацию PIIODevice
|
||||
class PIP_IO_UTILS_EXPORT PIStreamPacker
|
||||
: public PIObject
|
||||
, public PIStreamPackerConfig {
|
||||
PIOBJECT(PIStreamPacker)
|
||||
|
||||
public:
|
||||
//! Contructs packer and try to assign \"dev\"
|
||||
//! \~english Constructs packer and optionally binds it to "dev".
|
||||
//! \~russian Создает упаковщик и при необходимости привязывает его к "dev".
|
||||
PIStreamPacker(PIIODevice * dev = nullptr);
|
||||
|
||||
//! Returns progress of current packet receive in bytes
|
||||
//! \~english Returns number of payload bytes collected for current packet.
|
||||
//! \~russian Возвращает число байтов полезной нагрузки, собранных для текущего пакета.
|
||||
int receivePacketProgress() const { return packet.size_s(); }
|
||||
|
||||
//! \~english Clears buffered stream state and incomplete packet data.
|
||||
//! \~russian Очищает буферизованное состояние потока и данные незавершенного пакета.
|
||||
void clear();
|
||||
|
||||
//! Prepare data for send and raise \a sendRequest() events
|
||||
//! \~english Fragments data and raises \a sendRequest() for each fragment
|
||||
//! \~russian Фрагментирует данные и вызывает \a sendRequest() для каждого фрагмента
|
||||
void send(const PIByteArray & data);
|
||||
|
||||
//! Receive data part. If packet is ready, raise \a packetReceiveEvent() event
|
||||
//! and \a packetReceived() virtual method
|
||||
//! \~english Feeds received bytes into the unpacker.
|
||||
//! \~russian Передает полученные байты в распаковщик.
|
||||
//! \~\details
|
||||
//! \~english Calls \a packetReceived() and emits \a packetReceiveEvent() when a packet is complete.
|
||||
//! \~russian Вызывает \a packetReceived() и генерирует \a packetReceiveEvent(), когда пакет собран полностью.
|
||||
void received(const PIByteArray & data);
|
||||
|
||||
EVENT_HANDLER2(void, received, const uchar *, readed, ssize_t, size);
|
||||
|
||||
//! Connect \"dev\" \a PIIODevice::threadedReadEvent() event to \a received() handler
|
||||
//! and \a sendRequest() event to \"dev\" \a PIIODevice::write() handler
|
||||
//! \~english Binds "dev" read and write callbacks to this packer.
|
||||
//! \~russian Связывает обратные вызовы чтения и записи устройства "dev" с этим упаковщиком.
|
||||
//! \~\details
|
||||
//! \~english Connects \a PIIODevice::threadedReadEvent() to \a received() and \a sendRequest() to \a PIIODevice::write().
|
||||
//! \~russian Подключает \a PIIODevice::threadedReadEvent() к \a received(), а \a sendRequest() к \a PIIODevice::write().
|
||||
void assignDevice(PIIODevice * dev);
|
||||
|
||||
EVENT1(packetReceiveEvent, PIByteArray &, data);
|
||||
EVENT1(startPacketReceive, int, size);
|
||||
EVENT0(endPacketReceive);
|
||||
EVENT1(sendRequest, PIByteArray, data);
|
||||
|
||||
//! \handlers
|
||||
//! \{
|
||||
|
||||
//! \fn void received(uchar * readed, int size)
|
||||
//! \brief Handler to receive data. \a PIIODevice::threadedReadEvent()
|
||||
//! can be connected to this handler
|
||||
//! \fn void received(const uchar * readed, ssize_t size)
|
||||
//! \~english Handler overload for raw byte buffers from \a PIIODevice::threadedReadEvent().
|
||||
//! \~russian Перегрузка обработчика для сырых буферов байтов из \a PIIODevice::threadedReadEvent().
|
||||
EVENT_HANDLER2(void, received, const uchar *, readed, ssize_t, size);
|
||||
|
||||
//! \}
|
||||
|
||||
@@ -126,23 +166,30 @@ public:
|
||||
//! \{
|
||||
|
||||
//! \fn void packetReceiveEvent(PIByteArray data)
|
||||
//! \brief Raise on packet successfully received
|
||||
//! \~english Emitted when a complete packet is received.
|
||||
//! \~russian Генерируется, когда пакет полностью принят.
|
||||
EVENT1(packetReceiveEvent, PIByteArray &, data);
|
||||
|
||||
//! \fn void startPacketReceive(int size)
|
||||
//! \brief Raise on start receive packet with overall size \"size\"
|
||||
//! \~english Emitted when a new packet with payload size "size" starts.
|
||||
//! \~russian Генерируется при начале приема нового пакета с размером полезной нагрузки "size".
|
||||
EVENT1(startPacketReceive, int, size);
|
||||
|
||||
//! \fn void endPacketReceive()
|
||||
//! \brief Raise on finish receive packet
|
||||
//! \~english Emitted after the current packet has been fully received.
|
||||
//! \~russian Генерируется после полного приема текущего пакета.
|
||||
EVENT0(endPacketReceive);
|
||||
|
||||
//! \fn void sendRequest(PIByteArray data)
|
||||
//! \brief Raise from \a send() function. This data should
|
||||
//! be directly sended to your device. You can
|
||||
//! connect this event to \a PIIODevice::write() handler
|
||||
//! \~english Emitted by \a send() for every framed chunk ready to write to the device.
|
||||
//! \~russian Генерируется методом \a send() для каждого готового к записи во устройство фрагмента.
|
||||
EVENT1(sendRequest, PIByteArray, data);
|
||||
|
||||
//! \}
|
||||
|
||||
protected:
|
||||
//! Packet successfully received, by default does nothing
|
||||
//! \~english Called after a packet payload has been reconstructed.
|
||||
//! \~russian Вызывается после восстановления полезной нагрузки пакета.
|
||||
virtual void packetReceived(PIByteArray data) {}
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user