some PICloud and PIEthernet fixes

This commit is contained in:
Бычков Андрей
2022-11-09 17:04:13 +03:00
parent d3dd3fb32b
commit 8738043dce
6 changed files with 20 additions and 10 deletions

View File

@@ -25,10 +25,12 @@ PICloudServer::PICloudServer(const PIString & path, PIIODevice::DeviceMode mode)
tcp.setRole(PICloud::TCP::Server);
tcp.setServerName(server_name);
setName("cloud_server__" + server_name);
is_deleted = false;
eth.setReopenEnabled(false);
CONNECT1(void, PIByteArray, &streampacker, packetReceiveEvent, this, _readed);
CONNECTL(&eth, connected, [this](){opened_ = true; piCoutObj << "connected" << &eth; tcp.sendStart();});
CONNECTL(&eth, disconnected, [this](bool){
if (is_deleted) return;
piCoutObj << "disconnected" << &eth;
for (auto c : clients_) {
delete c;
@@ -45,6 +47,7 @@ PICloudServer::PICloudServer(const PIString & path, PIIODevice::DeviceMode mode)
PICloudServer::~PICloudServer() {
piCoutObj << "~PICloudServer ..." << this;
is_deleted = true;
stop();
close();
piCout << "wait";
@@ -94,6 +97,7 @@ bool PICloudServer::closeDevice() {
ssize_t PICloudServer::readDevice(void * read_to, ssize_t max_size) {
if (is_deleted) return -1;
//piCoutObj << "readDevice";
if (!opened_) openDevice();
//else piMSleep(eth.readTimeout());
@@ -118,6 +122,7 @@ void PICloudServer::clientDisconnect(uint client_id) {
int PICloudServer::sendData(const PIByteArray & data, uint client_id) {
if (!opened_) return -1;
return tcp.sendData(data, client_id);
}
@@ -173,6 +178,7 @@ ssize_t PICloudServer::Client::readDevice(void * read_to, ssize_t max_size) {
ssize_t PICloudServer::Client::writeDevice(const void * data, ssize_t size) {
if (!is_connected) return -1;
return server->sendData(PIByteArray(data, size), client_id);
}
@@ -193,6 +199,7 @@ void PICloudServer::Client::pushBuffer(const PIByteArray & ba) {
void PICloudServer::_readed(PIByteArray & ba) {
if (is_deleted) return;
PIPair<PICloud::TCP::Type, PICloud::TCP::Role> hdr = tcp.parseHeader(ba);
if (hdr.second == tcp.role()) {
switch (hdr.first) {
@@ -222,8 +229,7 @@ void PICloudServer::_readed(PIByteArray & ba) {
clients_mutex.unlock();
if (oc) {
oc->stopAndWait();
//oc->is_connected = false;
//oc->close();
oc->is_connected = false;
delete oc;
}
} break;