working commit

This commit is contained in:
2026-04-27 13:57:49 +02:00
parent ac88dbd051
commit 0c647ec97c
7 changed files with 106 additions and 65 deletions
+3
View File
@@ -6,3 +6,6 @@ Makefile
autom4te.cache
stamp-h1
defines.h
*.o
*.bin
*.tar*
+2 -1
View File
@@ -122,7 +122,7 @@ rpcclient_test_OBJECTS = $(am_rpcclient_test_OBJECTS)
rpcclient_test_LDADD = $(LDADD)
am_service_test_OBJECTS = service_test.$(OBJEXT) tunclient.$(OBJEXT) \
service.$(OBJEXT) interface.$(OBJEXT) rpcheader.$(OBJEXT) \
logger.$(OBJEXT) control.pb.$(OBJEXT)
logger.$(OBJEXT) nethandler.$(OBJEXT) control.pb.$(OBJEXT)
service_test_OBJECTS = $(am_service_test_OBJECTS)
service_test_LDADD = $(LDADD)
am_tcpclient_test_OBJECTS = resolver.$(OBJEXT) netclient.$(OBJEXT) \
@@ -360,6 +360,7 @@ service_test_SOURCES = service_test.cpp \
interface.cpp interface.hpp \
rpcheader.cpp rpcheader.hpp \
logger.cpp logger.hpp \
nethandler.cpp nethandler.hpp \
control.pb.cc control.pb.h
udpclient_test_SOURCES = \
+1
View File
@@ -39,6 +39,7 @@ service_test_SOURCES = service_test.cpp \
interface.cpp interface.hpp \
rpcheader.cpp rpcheader.hpp \
logger.cpp logger.hpp \
nethandler.cpp nethandler.hpp \
control.pb.cc control.pb.h
udpclient_test_SOURCES = \
+2 -1
View File
@@ -122,7 +122,7 @@ rpcclient_test_OBJECTS = $(am_rpcclient_test_OBJECTS)
rpcclient_test_LDADD = $(LDADD)
am_service_test_OBJECTS = service_test.$(OBJEXT) tunclient.$(OBJEXT) \
service.$(OBJEXT) interface.$(OBJEXT) rpcheader.$(OBJEXT) \
logger.$(OBJEXT) control.pb.$(OBJEXT)
logger.$(OBJEXT) nethandler.$(OBJEXT) control.pb.$(OBJEXT)
service_test_OBJECTS = $(am_service_test_OBJECTS)
service_test_LDADD = $(LDADD)
am_tcpclient_test_OBJECTS = resolver.$(OBJEXT) netclient.$(OBJEXT) \
@@ -360,6 +360,7 @@ service_test_SOURCES = service_test.cpp \
interface.cpp interface.hpp \
rpcheader.cpp rpcheader.hpp \
logger.cpp logger.hpp \
nethandler.cpp nethandler.hpp \
control.pb.cc control.pb.h
udpclient_test_SOURCES = \
+2 -60
View File
@@ -20,66 +20,8 @@ extern "C" {
using namespace std::chrono_literals;
void SocketHandler::Handle(int sock) {
std::cout << std::format("Handler {} start", 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);
}
void SocketHandler::Handle(int sock) {};
SocketHandler::~SocketHandler(void) {};
Service::Service(int svcport) {
port = svcport;
+2 -1
View File
@@ -7,7 +7,8 @@
class SocketHandler {
public:
void Handle(int sock);
virtual void Handle(int sock);
virtual ~SocketHandler(void);
};
class Service {
+94 -2
View File
@@ -5,7 +5,97 @@
#include <cstring>
#include <iostream>
#include <control.pb.h>
#include <rpcclient.hpp>
#include <nethandler.hpp>
#include <service.hpp>
#include <logger.hpp>
#include <rpcheader.hpp>
class TestRPCHandler : public NetHandler {
public:
std::expected<void, std::string> Handle(std::string& req, std::string& res) override;
};
std::expected<void, std::string> TestRPCHandler::Handle(std::string& rawReq, std::string& rawRes) {
control::HelloRequest pbReq;
pbReq.ParseFromString(rawReq);
logger.Log(std::format("rpcName: {}", pbReq.meta().rpcname()));
logger.Log(std::format("req message: {}", pbReq.message()));
control::HelloResult pbRes;
pbRes.set_message("Johnny!");
logger.Log(std::format("res message: {}", pbRes.message()));
auto resMeta = pbRes.mutable_meta();
resMeta->set_error(false);
pbRes.SerializeToString(&rawRes);
return {};
}
class TestSocketHandler : public SocketHandler {
private:
NetHandler* nextHandler;
public:
TestSocketHandler(NetHandler& rcpHandler);
virtual void Handle(int sock) override;
virtual ~TestSocketHandler(void) override;
};
TestSocketHandler::TestSocketHandler(NetHandler& rpcHandler) {
nextHandler = &rpcHandler;
}
TestSocketHandler::~TestSocketHandler(void) {};
void TestSocketHandler::Handle(int sock) {
logger.Log(std::format("Handler {} start", sock));
const int headerSize = 8;
std::string inRawHeader(headerSize, '\0');
int rsize = 0;
if ((rsize = read(sock, inRawHeader.data(), inRawHeader.size())) < 0) {
logger.Log("Error read");
close(sock);
return;
}
logger.Log(std::format("header read size {}", rsize));
RPCHeader inHeader;
inHeader.Decode(inRawHeader);
int inPacketSize = inHeader.PacketSize();
logger.Log(std::format("rpc packet size {}", inPacketSize));
std::string inRawRequest(inPacketSize, '\0');
if ((rsize = read(sock, inRawRequest.data(), inRawRequest.size())) < 0) {
logger.Log("Error read");
close(sock);
return;
}
logger.Log(std::format("rpc packet rsize {}", rsize));
std::string outRawResult;
nextHandler->Handle(inRawRequest, outRawResult);
RPCHeader outHeader(outRawResult.size());
auto rawPacket = outHeader.Encode();
rawPacket.append(outRawResult);
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);
}
int main(int argc, char** argv) {
Service svc(1025);
@@ -14,8 +104,10 @@ int main(int argc, char** argv) {
std::cerr << bindres.error() << std::endl;
return 1;
}
SocketHandler handler;
auto listres = svc.Listen(&handler);
TestRPCHandler rcpHandler;
TestSocketHandler socketHandler(rcpHandler);
auto listres = svc.Listen(&socketHandler);
if (!listres) {
std::cerr << listres.error() << std::endl;
return 1;