PIPeer ported to data transfer
git-svn-id: svn://db.shs.com.ru/pip@46 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -25,21 +25,21 @@
|
||||
|
||||
#include "piethernet.h"
|
||||
#include "pidiagnostics.h"
|
||||
#include "pidatatransfer.h"
|
||||
|
||||
class PIP_EXPORT PIPeer: public PIObject
|
||||
{
|
||||
PIOBJECT_SUBCLASS(PIPeer, PIObject)
|
||||
private:
|
||||
struct PeerData {
|
||||
PeerData() {msg_count = msg_rec = 0;}
|
||||
void clear() {msg_count = msg_rec = 0; data.clear();}
|
||||
bool isEmpty() const {return msg_count == 0;}
|
||||
bool isFullReceived() const {return msg_count == msg_rec;}
|
||||
void addData(const PIByteArray & ba) {data.append(ba); msg_rec++;}
|
||||
void setData(const PIByteArray & ba) {data = ba; msg_rec = 0; msg_count = (data.size_s() - 1) / 4096 + 1;}
|
||||
explicit PeerData() {dt_in = dt_out = 0; t = 0;}
|
||||
PeerData(const PeerData & ) {dt_in = dt_out = 0; t = 0;}
|
||||
PeerData & operator =(const PeerData & ) {dt_in = dt_out = 0; t = 0; return *this;}
|
||||
~PeerData();
|
||||
void initDT(const PIString & name);
|
||||
PIByteArray data;
|
||||
int msg_count;
|
||||
int msg_rec;
|
||||
PIThread * t;
|
||||
PIDataTransfer * dt_in, * dt_out;
|
||||
};
|
||||
|
||||
public:
|
||||
@@ -134,11 +134,18 @@ protected:
|
||||
|
||||
private:
|
||||
EVENT_HANDLER2(void, timerEvent, void * , data, int, delim);
|
||||
EVENT_HANDLER1(void, dtSendRequestIn, PIByteArray &, data) {dtSendRequest(2, data);}
|
||||
EVENT_HANDLER1(void, dtSendRequestOut, PIByteArray &, data) {dtSendRequest(3, data);}
|
||||
EVENT_HANDLER1(void, dtReceiveFinished, bool, ok);
|
||||
EVENT_HANDLER(void, dtThread);
|
||||
|
||||
bool hasPeer(const PIString & name) {piForeachC (PeerInfo & i, peers) if (i.name == name) return true; return false;}
|
||||
bool removePeer(const PIString & name);
|
||||
void removeNeighbour(const PIString & name);
|
||||
void addPeer(const PeerInfo & pd);
|
||||
|
||||
bool sendInternal(const PIString & to, const PIByteArray & data);
|
||||
void dtSendRequest(uchar type, PIByteArray & data);
|
||||
void sendPeerInfo(const PeerInfo & info);
|
||||
void sendPeerRemove(const PIString & peer);
|
||||
void sendSelfInfo() {sendPeerInfo(self_info);}
|
||||
|
||||
Reference in New Issue
Block a user