git-svn-id: svn://db.shs.com.ru/pip@251 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -1,26 +1,26 @@
|
|||||||
/*! \file pibase.h
|
/*! \file pibase.h
|
||||||
* \brief Base types and functions
|
* \brief Base types and functions
|
||||||
*
|
*
|
||||||
* This file implements first layer above the system and
|
* This file implements first layer above the system and
|
||||||
* declares some basic useful functions
|
* declares some basic useful functions
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
PIP - Platform Independent Primitives
|
PIP - Platform Independent Primitives
|
||||||
Base types and functions
|
Base types and functions
|
||||||
Copyright (C) 2016 Ivan Pelipenko peri4ko@yandex.ru
|
Copyright (C) 2016 Ivan Pelipenko peri4ko@yandex.ru
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef PIBASE_H
|
#ifndef PIBASE_H
|
||||||
@@ -176,9 +176,9 @@
|
|||||||
# pragma warning(disable: 4986)
|
# pragma warning(disable: 4986)
|
||||||
# pragma warning(disable: 4996)
|
# pragma warning(disable: 4996)
|
||||||
# ifdef ARCH_BITS_32
|
# ifdef ARCH_BITS_32
|
||||||
typedef long ssize_t;
|
typedef long ssize_t;
|
||||||
# else
|
# else
|
||||||
typedef long long ssize_t;
|
typedef long long ssize_t;
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -266,7 +266,7 @@ template<typename T> inline void piSwapBinary(T & f, T & s) {
|
|||||||
* There are some macros:
|
* There are some macros:
|
||||||
* - \c piRoundf for "float"
|
* - \c piRoundf for "float"
|
||||||
* - \c piRoundd for "double"
|
* - \c piRoundd for "double"
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* \snippet piincludes.cpp round */
|
* \snippet piincludes.cpp round */
|
||||||
template<typename T> inline int piRound(const T & v) {return int(v >= T(0.) ? v + T(0.5) : v - T(0.5));}
|
template<typename T> inline int piRound(const T & v) {return int(v >= T(0.) ? v + T(0.5) : v - T(0.5));}
|
||||||
@@ -276,7 +276,7 @@ template<typename T> inline int piRound(const T & v) {return int(v >= T(0.) ? v
|
|||||||
* There are some macros:
|
* There are some macros:
|
||||||
* - \c piFloorf for "float"
|
* - \c piFloorf for "float"
|
||||||
* - \c piFloord for "double"
|
* - \c piFloord for "double"
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* \snippet piincludes.cpp floor */
|
* \snippet piincludes.cpp floor */
|
||||||
template<typename T> inline int piFloor(const T & v) {return v < T(0) ? int(v) - 1 : int(v);}
|
template<typename T> inline int piFloor(const T & v) {return v < T(0) ? int(v) - 1 : int(v);}
|
||||||
@@ -286,7 +286,7 @@ template<typename T> inline int piFloor(const T & v) {return v < T(0) ? int(v) -
|
|||||||
* There are some macros:
|
* There are some macros:
|
||||||
* - \c piCeilf for "float"
|
* - \c piCeilf for "float"
|
||||||
* - \c piCeild for "double"
|
* - \c piCeild for "double"
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* \snippet piincludes.cpp ceil */
|
* \snippet piincludes.cpp ceil */
|
||||||
template<typename T> inline int piCeil(const T & v) {return v < T(0) ? int(v) : int(v) + 1;}
|
template<typename T> inline int piCeil(const T & v) {return v < T(0) ? int(v) : int(v) + 1;}
|
||||||
@@ -300,7 +300,7 @@ template<typename T> inline int piCeil(const T & v) {return v < T(0) ? int(v) :
|
|||||||
* - \c piAbsll for "llong"
|
* - \c piAbsll for "llong"
|
||||||
* - \c piAbsf for "float"
|
* - \c piAbsf for "float"
|
||||||
* - \c piAbsd for "double"
|
* - \c piAbsd for "double"
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* \snippet piincludes.cpp abs */
|
* \snippet piincludes.cpp abs */
|
||||||
template<typename T> inline T piAbs(const T & v) {return (v >= T(0) ? v : -v);}
|
template<typename T> inline T piAbs(const T & v) {return (v >= T(0) ? v : -v);}
|
||||||
@@ -313,7 +313,7 @@ template<typename T> inline T piAbs(const T & v) {return (v >= T(0) ? v : -v);}
|
|||||||
* - \c piMinll for "llong"
|
* - \c piMinll for "llong"
|
||||||
* - \c piMinf for "float"
|
* - \c piMinf for "float"
|
||||||
* - \c piMind for "double"
|
* - \c piMind for "double"
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* \snippet piincludes.cpp min2 */
|
* \snippet piincludes.cpp min2 */
|
||||||
template<typename T> inline T piMin(const T & f, const T & s) {return ((f > s) ? s : f);}
|
template<typename T> inline T piMin(const T & f, const T & s) {return ((f > s) ? s : f);}
|
||||||
@@ -326,7 +326,7 @@ template<typename T> inline T piMin(const T & f, const T & s) {return ((f > s) ?
|
|||||||
* - \c piMinll for "llong"
|
* - \c piMinll for "llong"
|
||||||
* - \c piMinf for "float"
|
* - \c piMinf for "float"
|
||||||
* - \c piMind for "double"
|
* - \c piMind for "double"
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* \snippet piincludes.cpp min3 */
|
* \snippet piincludes.cpp min3 */
|
||||||
template<typename T> inline T piMin(const T & f, const T & s, const T & t) {return ((f < s && f < t) ? f : ((s < t) ? s : t));}
|
template<typename T> inline T piMin(const T & f, const T & s, const T & t) {return ((f < s && f < t) ? f : ((s < t) ? s : t));}
|
||||||
@@ -339,7 +339,7 @@ template<typename T> inline T piMin(const T & f, const T & s, const T & t) {retu
|
|||||||
* - \c piMaxll for "llong"
|
* - \c piMaxll for "llong"
|
||||||
* - \c piMaxf for "float"
|
* - \c piMaxf for "float"
|
||||||
* - \c piMaxd for "double"
|
* - \c piMaxd for "double"
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* \snippet piincludes.cpp max2 */
|
* \snippet piincludes.cpp max2 */
|
||||||
template<typename T> inline T piMax(const T & f, const T & s) {return ((f < s) ? s : f);}
|
template<typename T> inline T piMax(const T & f, const T & s) {return ((f < s) ? s : f);}
|
||||||
@@ -352,7 +352,7 @@ template<typename T> inline T piMax(const T & f, const T & s) {return ((f < s) ?
|
|||||||
* - \c piMaxll for "llong"
|
* - \c piMaxll for "llong"
|
||||||
* - \c piMaxf for "float"
|
* - \c piMaxf for "float"
|
||||||
* - \c piMaxd for "double"
|
* - \c piMaxd for "double"
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* \snippet piincludes.cpp max3 */
|
* \snippet piincludes.cpp max3 */
|
||||||
template<typename T> inline T piMax(const T & f, const T & s, const T & t) {return ((f > s && f > t) ? f : ((s > t) ? s : t));}
|
template<typename T> inline T piMax(const T & f, const T & s, const T & t) {return ((f > s && f > t) ? f : ((s > t) ? s : t));}
|
||||||
@@ -366,7 +366,7 @@ template<typename T> inline T piMax(const T & f, const T & s, const T & t) {retu
|
|||||||
* - \c piClampll for "llong"
|
* - \c piClampll for "llong"
|
||||||
* - \c piClampf for "float"
|
* - \c piClampf for "float"
|
||||||
* - \c piClampd for "double"
|
* - \c piClampd for "double"
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* \snippet piincludes.cpp clamp */
|
* \snippet piincludes.cpp clamp */
|
||||||
template<typename T> inline T piClamp(const T & v, const T & min, const T & max) {return (v > max ? max : (v < min ? min : v));}
|
template<typename T> inline T piClamp(const T & v, const T & min, const T & max) {return (v > max ? max : (v < min ? min : v));}
|
||||||
@@ -387,7 +387,7 @@ template<typename T> inline void piLetobe(T * v) {piLetobe(v, sizeof(T));}
|
|||||||
* - \c piLetobei for "uint"
|
* - \c piLetobei for "uint"
|
||||||
* - \c piLetobel for "ulong"
|
* - \c piLetobel for "ulong"
|
||||||
* - \c piLetobell for "ullong"
|
* - \c piLetobell for "ullong"
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* \snippet piincludes.cpp letobe */
|
* \snippet piincludes.cpp letobe */
|
||||||
template<typename T> inline T piLetobe(const T & v) {T tv(v); piLetobe(&tv, sizeof(T)); return tv;}
|
template<typename T> inline T piLetobe(const T & v) {T tv(v); piLetobe(&tv, sizeof(T)); return tv;}
|
||||||
@@ -395,6 +395,11 @@ template<typename T> inline T piLetobe(const T & v) {T tv(v); piLetobe(&tv, size
|
|||||||
// specialization
|
// specialization
|
||||||
template<> inline ushort piLetobe(const ushort & v) {return (v << 8) | (v >> 8);}
|
template<> inline ushort piLetobe(const ushort & v) {return (v << 8) | (v >> 8);}
|
||||||
template<> inline uint piLetobe(const uint & v) {return (v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | ((v << 24) & 0xFF000000);}
|
template<> inline uint piLetobe(const uint & v) {return (v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | ((v << 24) & 0xFF000000);}
|
||||||
|
template<> inline float piLetobe(const float & f) {
|
||||||
|
uint v = *((uint *)&f);
|
||||||
|
v = (v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | ((v << 24) & 0xFF000000);
|
||||||
|
return *((float *)&v);
|
||||||
|
}
|
||||||
|
|
||||||
DEPRECATED inline ushort letobe_s(const ushort & v) {return (v << 8) | (v >> 8);}
|
DEPRECATED inline ushort letobe_s(const ushort & v) {return (v << 8) | (v >> 8);}
|
||||||
DEPRECATED inline uint letobe_i(const uint & v) {return (v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | ((v << 24) & 0xFF000000);}
|
DEPRECATED inline uint letobe_i(const uint & v) {return (v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | ((v << 24) & 0xFF000000);}
|
||||||
@@ -443,6 +448,7 @@ uint letobe_i(uint v) {return (v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF
|
|||||||
#define piLetobei piLetobe<uint>
|
#define piLetobei piLetobe<uint>
|
||||||
#define piLetobel piLetobe<ulong>
|
#define piLetobel piLetobe<ulong>
|
||||||
#define piLetobell piLetobe<ullong>
|
#define piLetobell piLetobe<ullong>
|
||||||
|
#define piLetobef piLetobe<float>
|
||||||
|
|
||||||
|
|
||||||
#endif // PIBASE_H
|
#endif // PIBASE_H
|
||||||
|
|||||||
@@ -828,12 +828,6 @@ void PIConnection::stopAllSenders() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PIConnection::destroy() {
|
|
||||||
stop();
|
|
||||||
removeAllDevices();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PIDiagnostics * PIConnection::diagnostic(const PIString & full_path_name) const {
|
PIDiagnostics * PIConnection::diagnostic(const PIString & full_path_name) const {
|
||||||
PIIODevice * dev = deviceByFullPath(full_path_name);
|
PIIODevice * dev = deviceByFullPath(full_path_name);
|
||||||
if (dev == 0) dev = device_names.value(full_path_name, 0);
|
if (dev == 0) dev = device_names.value(full_path_name, 0);
|
||||||
|
|||||||
@@ -246,7 +246,8 @@ public:
|
|||||||
//! Stop all read threads and senders
|
//! Stop all read threads and senders
|
||||||
void stop() {stopAllThreadedReads(); stopAllSenders();}
|
void stop() {stopAllThreadedReads(); stopAllSenders();}
|
||||||
|
|
||||||
void destroy();
|
//! Stop connection and remove all devices
|
||||||
|
void destroy() {stop(); removeAllDevices();}
|
||||||
|
|
||||||
//! Returns if there are no devices in this connection
|
//! Returns if there are no devices in this connection
|
||||||
bool isEmpty() const {return device_modes.isEmpty();}
|
bool isEmpty() const {return device_modes.isEmpty();}
|
||||||
|
|||||||
@@ -105,7 +105,9 @@ void PIDiagnostics::tick(void * , int ) {
|
|||||||
float itr = disconn_ * (float(tcnt_recv) / history_rec.size());
|
float itr = disconn_ * (float(tcnt_recv) / history_rec.size());
|
||||||
float its = disconn_ * (float(tcnt_send) / history_send.size());
|
float its = disconn_ * (float(tcnt_send) / history_send.size());
|
||||||
float hz = interval() / 1000.f;
|
float hz = interval() / 1000.f;
|
||||||
integral_freq = recv.cnt_ok / itr;
|
if (tcnt_recv == 0) integral_freq = 0;
|
||||||
|
// piCoutObj << itr << tcnt_recv << history_rec.size();
|
||||||
|
else integral_freq = recv.cnt_ok / itr;
|
||||||
packets_recv_sec = ullong(float(recv.cnt_ok) / itr);
|
packets_recv_sec = ullong(float(recv.cnt_ok) / itr);
|
||||||
packets_send_sec = ullong(float(send.cnt_ok) / its);
|
packets_send_sec = ullong(float(send.cnt_ok) / its);
|
||||||
bytes_recv_sec = ullong(double(recv.bytes_ok) / itr);
|
bytes_recv_sec = ullong(double(recv.bytes_ok) / itr);
|
||||||
|
|||||||
95
src/io/piiobytearray.cpp
Normal file
95
src/io/piiobytearray.cpp
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
PIP - Platform Independent Primitives
|
||||||
|
PIIODevice wrapper around PIByteArray
|
||||||
|
Copyright (C) 2016 Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "piiobytearray.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*! \class PIIOByteArray
|
||||||
|
* \brief PIIODevice wrapper around PIByteArray
|
||||||
|
*
|
||||||
|
* \section PIIOByteArray_sec0 Synopsis
|
||||||
|
* This class sllow you to use PIByteArray as PIIODevice and pass it to, e.g. PIConfig
|
||||||
|
*/
|
||||||
|
|
||||||
|
//REGISTER_DEVICE(PIIOByteArray);
|
||||||
|
|
||||||
|
|
||||||
|
PIIOByteArray::PIIOByteArray(PIByteArray *buffer, PIIODevice::DeviceMode mode) {
|
||||||
|
open(buffer, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PIIOByteArray::PIIOByteArray(const PIByteArray &buffer) {
|
||||||
|
open(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PIIOByteArray::open(PIByteArray *buffer, PIIODevice::DeviceMode mode) {
|
||||||
|
data_ = buffer;
|
||||||
|
mode_ = mode;
|
||||||
|
return PIIODevice::open(mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PIIOByteArray::open(const PIByteArray &buffer) {
|
||||||
|
data_ = const_cast<PIByteArray*>(&buffer);
|
||||||
|
mode_ = PIIODevice::ReadOnly;
|
||||||
|
return PIIODevice::open(PIIODevice::ReadOnly);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int PIIOByteArray::read(void * read_to, int size) {
|
||||||
|
// piCout << "PIIOByteArray::read" << data_ << size << canRead();
|
||||||
|
if (!canRead() || !data_) return -1;
|
||||||
|
int ret = piMini(size, data_->size_s() - pos);
|
||||||
|
if (ret <= 0) return -1;
|
||||||
|
memcpy(read_to, data_->data(pos), ret);
|
||||||
|
// piCout << "readed" << ret;
|
||||||
|
pos += size;
|
||||||
|
if (pos > data_->size_s()) pos = data_->size_s();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int PIIOByteArray::write(const void * data, int size) {
|
||||||
|
// piCout << "PIIOByteArray::write" << data << size << canWrite();
|
||||||
|
if (!canWrite() || !data) return -1;
|
||||||
|
//piCout << "write" << data;
|
||||||
|
if (pos > data_->size_s()) pos = data_->size_s();
|
||||||
|
PIByteArray rs = PIByteArray(data, size);
|
||||||
|
// piCoutObj << rs;
|
||||||
|
data_->insert(pos, rs);
|
||||||
|
pos += rs.size_s();
|
||||||
|
return rs.size_s();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int PIIOByteArray::writeByteArray(const PIByteArray &ba) {
|
||||||
|
if (!canWrite() || !data_) return -1;
|
||||||
|
if (pos > data_->size_s()) pos = data_->size_s();
|
||||||
|
data_->insert(pos, ba);
|
||||||
|
pos += ba.size_s();
|
||||||
|
return ba.size_s();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PIIOByteArray::openDevice() {
|
||||||
|
pos = 0;
|
||||||
|
return (data_ != 0);
|
||||||
|
}
|
||||||
82
src/io/piiobytearray.h
Normal file
82
src/io/piiobytearray.h
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
/*! \file piiobytearray.h
|
||||||
|
* \brief PIIODevice wrapper around PIByteArray
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
PIP - Platform Independent Primitives
|
||||||
|
PIIODevice wrapper around PIString
|
||||||
|
Copyright (C) 2016 Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PIIOBYTEARRAY_H
|
||||||
|
#define PIIOBYTEARRAY_H
|
||||||
|
|
||||||
|
#include "piiodevice.h"
|
||||||
|
|
||||||
|
|
||||||
|
class PIP_EXPORT PIIOByteArray: public PIIODevice
|
||||||
|
{
|
||||||
|
PIIODEVICE(PIIOByteArray)
|
||||||
|
public:
|
||||||
|
|
||||||
|
//! Contructs %PIIOByteArray with \"buffer\" content and \"mode\" open mode
|
||||||
|
PIIOByteArray(PIByteArray * buffer = 0, PIIODevice::DeviceMode mode = PIIODevice::ReadWrite);
|
||||||
|
|
||||||
|
//! Contructs %PIIOByteArray with \"buffer\" content only for read
|
||||||
|
PIIOByteArray(const PIByteArray & buffer);
|
||||||
|
|
||||||
|
~PIIOByteArray() {closeDevice();}
|
||||||
|
|
||||||
|
//! Returns content
|
||||||
|
PIByteArray * byteArray() const {return data_;}
|
||||||
|
|
||||||
|
//! Clear content buffer
|
||||||
|
void clear() {if (data_) data_->clear(); pos = 0;}
|
||||||
|
|
||||||
|
//! Open \"buffer\" content with \"mode\" open mode
|
||||||
|
bool open(PIByteArray * buffer, PIIODevice::DeviceMode mode = PIIODevice::ReadWrite);
|
||||||
|
|
||||||
|
//! Open \"buffer\" content only for read
|
||||||
|
bool open(const PIByteArray & buffer);
|
||||||
|
|
||||||
|
//! Returns if position is at the end of content
|
||||||
|
bool isEnd() const {if (!data_) return true; return pos >= data_->size_s();}
|
||||||
|
|
||||||
|
|
||||||
|
//! Move read/write position to \"position\"
|
||||||
|
void seek(llong position) {pos = position;}
|
||||||
|
|
||||||
|
//! Move read/write position to the begin of the string
|
||||||
|
void seekToBegin() {if (data_) pos = 0;}
|
||||||
|
|
||||||
|
//! Move read/write position to the end of the string
|
||||||
|
void seekToEnd() {if (data_) pos = data_->size_s();}
|
||||||
|
|
||||||
|
|
||||||
|
int read(void * read_to, int size);
|
||||||
|
int write(const void * data_, int size);
|
||||||
|
|
||||||
|
//! Insert data \"ba\" into content at current position
|
||||||
|
int writeByteArray(const PIByteArray & ba);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool openDevice();
|
||||||
|
|
||||||
|
ssize_t pos;
|
||||||
|
PIByteArray * data_;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // PIIOBYTEARRAY_H
|
||||||
@@ -30,6 +30,7 @@
|
|||||||
#include "pibinarylog.h"
|
#include "pibinarylog.h"
|
||||||
#include "pifiletransfer.h"
|
#include "pifiletransfer.h"
|
||||||
#include "piiostring.h"
|
#include "piiostring.h"
|
||||||
|
#include "piiobytearray.h"
|
||||||
#include "pipeer.h"
|
#include "pipeer.h"
|
||||||
#include "pipacketextractor.h"
|
#include "pipacketextractor.h"
|
||||||
#include "piprotocol.h"
|
#include "piprotocol.h"
|
||||||
|
|||||||
@@ -30,8 +30,8 @@
|
|||||||
//REGISTER_DEVICE(PIIOString);
|
//REGISTER_DEVICE(PIIOString);
|
||||||
|
|
||||||
|
|
||||||
PIIOString::PIIOString(PIString * string, PIIODevice::DeviceMode mode_) {
|
PIIOString::PIIOString(PIString * string, PIIODevice::DeviceMode mode) {
|
||||||
open(string, mode_);
|
open(string, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -40,9 +40,9 @@ PIIOString::PIIOString(const PIString & string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool PIIOString::open(PIString * string, PIIODevice::DeviceMode mode_) {
|
bool PIIOString::open(PIString * string, PIIODevice::DeviceMode mode) {
|
||||||
str = string;
|
str = string;
|
||||||
return PIIODevice::open(mode_);
|
return PIIODevice::open(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public:
|
|||||||
int bufferSize() const {return buffer_size;}
|
int bufferSize() const {return buffer_size;}
|
||||||
|
|
||||||
//! Set buffer size to "new_size" bytes, should be at least greater than whole packet size
|
//! Set buffer size to "new_size" bytes, should be at least greater than whole packet size
|
||||||
void setBufferSize(int new_size) {buffer_size = new_size; buffer.resize(buffer_size); sbuffer.resize(buffer_size); memset(buffer.data(), 0, buffer.size()); memset(sbuffer.data(), 0, sbuffer.size());}
|
void setBufferSize(int new_size) {buffer_size = new_size; buffer.resize(buffer_size); memset(buffer.data(), 0, buffer.size());}
|
||||||
|
|
||||||
void setHeaderCheckSlot(PacketExtractorCheckFunc f) {ret_func_header = f;}
|
void setHeaderCheckSlot(PacketExtractorCheckFunc f) {ret_func_header = f;}
|
||||||
void setFooterCheckSlot(PacketExtractorCheckFunc f) {ret_func_footer = f;}
|
void setFooterCheckSlot(PacketExtractorCheckFunc f) {ret_func_footer = f;}
|
||||||
@@ -167,7 +167,7 @@ private:
|
|||||||
bool openDevice() {if (dev == 0) return false; return dev->open();}
|
bool openDevice() {if (dev == 0) return false; return dev->open();}
|
||||||
|
|
||||||
PIIODevice * dev;
|
PIIODevice * dev;
|
||||||
PIByteArray buffer, sbuffer, tmpbuf, src_header, src_footer, trbuf;
|
PIByteArray buffer, tmpbuf, src_header, src_footer, trbuf;
|
||||||
PacketExtractorCheckFunc ret_func_header, ret_func_footer;
|
PacketExtractorCheckFunc ret_func_header, ret_func_footer;
|
||||||
SplitMode mode_;
|
SplitMode mode_;
|
||||||
void * data;
|
void * data;
|
||||||
|
|||||||
@@ -147,7 +147,6 @@ PIPeer::PIPeer(const PIString & n): PIIODevice() {
|
|||||||
prev_ifaces = PIEthernet::interfaces();
|
prev_ifaces = PIEthernet::interfaces();
|
||||||
no_timer = false;
|
no_timer = false;
|
||||||
// initNetwork();
|
// initNetwork();
|
||||||
sendSelfInfo();
|
|
||||||
sync_timer.addDelimiter(5);
|
sync_timer.addDelimiter(5);
|
||||||
sync_timer.start(1000);
|
sync_timer.start(1000);
|
||||||
}
|
}
|
||||||
@@ -835,6 +834,7 @@ void PIPeer::reinit() {
|
|||||||
PIMutexLocker pl(peers_mutex);
|
PIMutexLocker pl(peers_mutex);
|
||||||
PIMutexLocker sl(send_mutex);
|
PIMutexLocker sl(send_mutex);
|
||||||
initNetwork();
|
initNetwork();
|
||||||
|
sendSelfInfo();
|
||||||
// eth_send.close();
|
// eth_send.close();
|
||||||
// eth_lo.stopThreadedRead();
|
// eth_lo.stopThreadedRead();
|
||||||
// eth_lo.close();
|
// eth_lo.close();
|
||||||
|
|||||||
Reference in New Issue
Block a user