PICloud with streampacker

This commit is contained in:
2021-04-07 14:38:32 +03:00
parent fcf9f0f80e
commit 1fd9851068
13 changed files with 90 additions and 67 deletions

View File

@@ -25,6 +25,7 @@
#include "picloudtcp.h"
#include "piethernet.h"
#include "pistreampacker.h"
class PICloudBase
@@ -34,6 +35,7 @@ public:
protected:
PIEthernet eth;
PIStreamPacker streampacker;
PICloud::TCP tcp;
};

View File

@@ -41,14 +41,17 @@ public:
protected:
bool openDevice();
bool closeDevice();
bool isConnected() const {return is_connected;}
int readDevice(void * read_to, int max_size);
int writeDevice(const void * data, int max_size);
private:
EVENT_HANDLER2(void, readed, uchar * , data, int, size);
EVENT_HANDLER1(void, _readed, PIByteArray &, data);
PIByteArray buff;
PIMutex mutex_buff;
PIMutex mutex_connect;
PIConditionVariable cond_buff;
PIConditionVariable cond_connect;
std::atomic_bool is_connected;
};

View File

@@ -66,7 +66,7 @@ protected:
int writeDevice(const void * data, int max_size);
private:
EVENT_HANDLER2(void, readed, uchar * , data, int, size);
EVENT_HANDLER1(void, _readed, PIByteArray &, ba);
void clientDisconnect(uint client_id);
int sendData(const PIByteArray & data, uint client_id);

View File

@@ -28,6 +28,7 @@
class PIEthernet;
class PIStreamPacker;
namespace PICloud {
@@ -40,27 +41,28 @@ public:
};
enum Role {
InvalidRole = 0,
Server = 1,
Client = 2,
};
enum Type {
Invalid = 0,
InvalidType = 0,
Connect = 1,
Disconnect = 2,
Data = 3,
};
TCP();
TCP(PIStreamPacker * s);
void setRole(Role r);
Role role() const {return (Role)header.role;}
void setServerName(const PIString & server_name);
void sendStart(PIEthernet * eth);
void sendConnected(PIEthernet * eth, uint client_id);
void sendDisconnected(PIEthernet * eth, uint client_id);
void sendData(PIEthernet * eth, const PIByteArray & data);
int sendData(PIEthernet * eth, const PIByteArray & data, uint client_id);
void sendStart();
void sendConnected(uint client_id);
void sendDisconnected(uint client_id);
void sendData(const PIByteArray & data);
int sendData(const PIByteArray & data, uint client_id);
PIPair<PICloud::TCP::Type, PICloud::TCP::Role> parseHeader(PIByteArray & ba);
PIByteArray parseData(PIByteArray & ba);
PIPair<uint, PIByteArray> parseDataServer(PIByteArray & ba);
@@ -78,6 +80,7 @@ private:
Header header;
PIString sname;
PIStreamPacker * streampacker;
};
}