working commit
This commit is contained in:
+28
-19
@@ -19,12 +19,6 @@ extern "C" {
|
||||
|
||||
#include <uxcontrol.pb.h>
|
||||
|
||||
|
||||
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
|
||||
void SocketHandler::Handle(int newsock, std::string laddr, std::string raddr, int prefix) {
|
||||
sock = newsock;
|
||||
auto interfaceName = std::format("uxsrv{}", sock);
|
||||
@@ -49,8 +43,6 @@ void SocketHandler::Handle(int newsock, std::string laddr, std::string raddr, in
|
||||
uxlogger.Error(createRes.error());
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
std::thread recvThr(&SocketHandler::RecvMessages, this);
|
||||
recvThr.detach();
|
||||
|
||||
@@ -148,7 +140,7 @@ void SocketHandler::RecvMessages(void) {
|
||||
break;
|
||||
}
|
||||
if (rsize < msgHeaderSize) {
|
||||
uxlogger.Log(std::format("Read only {} from {} bytes", rsize, msgHeaderSize));
|
||||
uxlogger.Log(std::format("Read only {} from {} header bytes", rsize, msgHeaderSize));
|
||||
break;
|
||||
}
|
||||
MessageHeader header;
|
||||
@@ -158,17 +150,34 @@ void SocketHandler::RecvMessages(void) {
|
||||
break;
|
||||
}
|
||||
auto pSize = header.PayloadSize();
|
||||
if (pSize > 0) {
|
||||
std::string rawMessage(pSize, 0);
|
||||
if ((rsize = recv(sock, rawMessage.data(), rawMessage.size(), MSG_WAITALL)) < 0) {
|
||||
int errnoCopy = errno;
|
||||
std::string error = std::strerror(errnoCopy);
|
||||
uxlogger.Log(std::format("Read message error: {}", error));
|
||||
break;
|
||||
if (pSize == 0) {
|
||||
continue;
|
||||
}
|
||||
std::string rawMessage(pSize, 0);
|
||||
if ((rsize = recv(sock, rawMessage.data(), rawMessage.size(), MSG_WAITALL)) < 0) {
|
||||
int errnoCopy = errno;
|
||||
std::string error = std::strerror(errnoCopy);
|
||||
uxlogger.Log(std::format("Read message error: {}", error));
|
||||
break;
|
||||
}
|
||||
uxcontrol::SimpleMessage simpleMsg;
|
||||
simpleMsg.ParseFromString(rawMessage);
|
||||
|
||||
auto metaPart = simpleMsg.meta();
|
||||
auto kind = metaPart.kind();
|
||||
uxlogger.Debug(std::format("Received message kind of {}", kind));
|
||||
|
||||
if (kind == internetPkgMsg) {
|
||||
uxcontrol::PacketMessage packetMessage;
|
||||
packetMessage.ParseFromString(rawMessage);
|
||||
auto payload = packetMessage.payload();
|
||||
auto writeRes = interface.Write(payload);
|
||||
if (!writeRes) {
|
||||
auto error = writeRes.error();
|
||||
uxlogger.Error(std::format("Write packet error: {}", error));
|
||||
}
|
||||
uxcontrol::SimpleMessage msg;
|
||||
msg.ParseFromString(rawMessage);
|
||||
uxlogger.Log(std::format("Receive message {}", msg.meta().kind()));
|
||||
} else {
|
||||
uxlogger.Warning("Received unknown kind of message");
|
||||
}
|
||||
}
|
||||
done.release();
|
||||
|
||||
Reference in New Issue
Block a user