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:
2015-03-30 13:44:55 +00:00
parent 0cb2b20d2e
commit c87f73207d
5 changed files with 143 additions and 55 deletions

View File

@@ -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);}