working commit
This commit is contained in:
@@ -6,3 +6,6 @@ Makefile
|
||||
autom4te.cache
|
||||
stamp-h1
|
||||
defines.h
|
||||
*.o
|
||||
*.bin
|
||||
*.tar*
|
||||
|
||||
@@ -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 = \
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -7,7 +7,8 @@
|
||||
|
||||
class SocketHandler {
|
||||
public:
|
||||
void Handle(int sock);
|
||||
virtual void Handle(int sock);
|
||||
virtual ~SocketHandler(void);
|
||||
};
|
||||
|
||||
class Service {
|
||||
|
||||
+94
-2
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user