working commit

This commit is contained in:
2026-04-27 11:53:11 +02:00
parent 43d1cfc2b4
commit ac88dbd051
14 changed files with 281 additions and 148 deletions
+63 -6
View File
@@ -13,14 +13,71 @@ extern "C" {
#include <cstring>
#include <service.hpp>
#include <logger.hpp>
#include <rpcheader.hpp>
#include <control.pb.h>
using namespace std::chrono_literals;
void Handler::Handle(int sock) {
void SocketHandler::Handle(int sock) {
std::cout << std::format("Handler {} start", sock) << std::endl;
std::chrono::milliseconds timesleep(1s);
std::this_thread::sleep_for(timesleep);
std::cout << std::format("Handler {} done", sock) << std::endl;
const int headerSize = 8;
std::string rawResHeader;
char buffer[headerSize];
memset(&buffer, 0, headerSize);
int rsize = 0;
if ((rsize = read(sock, &buffer, headerSize)) < 0) {
logger.Log("Error read");
close(sock);
return;
}
logger.Log(std::format("rpc rsize {}", rsize));
RPCHeader inRPCHeader;
std::string i(buffer, headerSize);
inRPCHeader.Decode(i);
int rcpPacketSize = inRPCHeader.PacketSize();
logger.Log(std::format("rpc packet size {}", rcpPacketSize));
char buffer2[rcpPacketSize];
if ((rsize = read(sock, &buffer2, rcpPacketSize)) < 0) {
logger.Log("Error read");
close(sock);
return;
}
logger.Log(std::format("rpc packet rsize {}", rsize));
std::string rawReq(buffer2, rcpPacketSize);
control::HelloRequest pbReq;
pbReq.ParseFromString(rawReq);
logger.Log(std::format("rpcName: {}", pbReq.meta().rpcname()));
logger.Log(std::format("req message: {}\n", pbReq.message()));
control::HelloResult pbRes;
pbRes.set_message("Johnny!");
auto resMeta = pbRes.mutable_meta();
resMeta->set_error(false);
std::string rawRes;
pbRes.SerializeToString(&rawRes);
RPCHeader outRPCHeader(rawRes.size());
auto rawPacket = outRPCHeader.Encode();
rawPacket.append(rawRes);
int wsize = 0;
if ((wsize = write(sock, rawPacket.data(), rawPacket.size())) < 0) {
logger.Log("Error write");
close(sock);
return;
}
logger.Log(std::format("Handler {} done", sock));
close(sock);
}
@@ -62,7 +119,7 @@ std::expected<void, std::string> Service::Bind(void) {
return {};
}
std::expected<void, std::string> Service::Listen(Handler *handler) {
std::expected<void, std::string> Service::Listen(SocketHandler *handler) {
struct sockaddr_in address;
int addrlen = sizeof(address);
int newsock = 0;
@@ -72,7 +129,7 @@ std::expected<void, std::string> Service::Listen(Handler *handler) {
std::string error = std::strerror(errnocopy);
return std::unexpected("Accept error: " + error);
}
std::jthread t(&Handler::Handle, handler, newsock);
std::jthread t(&SocketHandler::Handle, handler, newsock);
t.detach();
}
return {};