working commit
This commit is contained in:
@@ -6,3 +6,6 @@ Makefile
|
|||||||
autom4te.cache
|
autom4te.cache
|
||||||
stamp-h1
|
stamp-h1
|
||||||
defines.h
|
defines.h
|
||||||
|
*.o
|
||||||
|
*.bin
|
||||||
|
*.tar*
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ rpcclient_test_OBJECTS = $(am_rpcclient_test_OBJECTS)
|
|||||||
rpcclient_test_LDADD = $(LDADD)
|
rpcclient_test_LDADD = $(LDADD)
|
||||||
am_service_test_OBJECTS = service_test.$(OBJEXT) tunclient.$(OBJEXT) \
|
am_service_test_OBJECTS = service_test.$(OBJEXT) tunclient.$(OBJEXT) \
|
||||||
service.$(OBJEXT) interface.$(OBJEXT) rpcheader.$(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_OBJECTS = $(am_service_test_OBJECTS)
|
||||||
service_test_LDADD = $(LDADD)
|
service_test_LDADD = $(LDADD)
|
||||||
am_tcpclient_test_OBJECTS = resolver.$(OBJEXT) netclient.$(OBJEXT) \
|
am_tcpclient_test_OBJECTS = resolver.$(OBJEXT) netclient.$(OBJEXT) \
|
||||||
@@ -360,6 +360,7 @@ service_test_SOURCES = service_test.cpp \
|
|||||||
interface.cpp interface.hpp \
|
interface.cpp interface.hpp \
|
||||||
rpcheader.cpp rpcheader.hpp \
|
rpcheader.cpp rpcheader.hpp \
|
||||||
logger.cpp logger.hpp \
|
logger.cpp logger.hpp \
|
||||||
|
nethandler.cpp nethandler.hpp \
|
||||||
control.pb.cc control.pb.h
|
control.pb.cc control.pb.h
|
||||||
|
|
||||||
udpclient_test_SOURCES = \
|
udpclient_test_SOURCES = \
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ service_test_SOURCES = service_test.cpp \
|
|||||||
interface.cpp interface.hpp \
|
interface.cpp interface.hpp \
|
||||||
rpcheader.cpp rpcheader.hpp \
|
rpcheader.cpp rpcheader.hpp \
|
||||||
logger.cpp logger.hpp \
|
logger.cpp logger.hpp \
|
||||||
|
nethandler.cpp nethandler.hpp \
|
||||||
control.pb.cc control.pb.h
|
control.pb.cc control.pb.h
|
||||||
|
|
||||||
udpclient_test_SOURCES = \
|
udpclient_test_SOURCES = \
|
||||||
|
|||||||
+2
-1
@@ -122,7 +122,7 @@ rpcclient_test_OBJECTS = $(am_rpcclient_test_OBJECTS)
|
|||||||
rpcclient_test_LDADD = $(LDADD)
|
rpcclient_test_LDADD = $(LDADD)
|
||||||
am_service_test_OBJECTS = service_test.$(OBJEXT) tunclient.$(OBJEXT) \
|
am_service_test_OBJECTS = service_test.$(OBJEXT) tunclient.$(OBJEXT) \
|
||||||
service.$(OBJEXT) interface.$(OBJEXT) rpcheader.$(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_OBJECTS = $(am_service_test_OBJECTS)
|
||||||
service_test_LDADD = $(LDADD)
|
service_test_LDADD = $(LDADD)
|
||||||
am_tcpclient_test_OBJECTS = resolver.$(OBJEXT) netclient.$(OBJEXT) \
|
am_tcpclient_test_OBJECTS = resolver.$(OBJEXT) netclient.$(OBJEXT) \
|
||||||
@@ -360,6 +360,7 @@ service_test_SOURCES = service_test.cpp \
|
|||||||
interface.cpp interface.hpp \
|
interface.cpp interface.hpp \
|
||||||
rpcheader.cpp rpcheader.hpp \
|
rpcheader.cpp rpcheader.hpp \
|
||||||
logger.cpp logger.hpp \
|
logger.cpp logger.hpp \
|
||||||
|
nethandler.cpp nethandler.hpp \
|
||||||
control.pb.cc control.pb.h
|
control.pb.cc control.pb.h
|
||||||
|
|
||||||
udpclient_test_SOURCES = \
|
udpclient_test_SOURCES = \
|
||||||
|
|||||||
+2
-60
@@ -20,66 +20,8 @@ extern "C" {
|
|||||||
|
|
||||||
using namespace std::chrono_literals;
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
void SocketHandler::Handle(int sock) {
|
void SocketHandler::Handle(int sock) {};
|
||||||
std::cout << std::format("Handler {} start", sock) << std::endl;
|
SocketHandler::~SocketHandler(void) {};
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
Service::Service(int svcport) {
|
Service::Service(int svcport) {
|
||||||
port = svcport;
|
port = svcport;
|
||||||
|
|||||||
+2
-1
@@ -7,7 +7,8 @@
|
|||||||
|
|
||||||
class SocketHandler {
|
class SocketHandler {
|
||||||
public:
|
public:
|
||||||
void Handle(int sock);
|
virtual void Handle(int sock);
|
||||||
|
virtual ~SocketHandler(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
class Service {
|
class Service {
|
||||||
|
|||||||
+94
-2
@@ -5,7 +5,97 @@
|
|||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <control.pb.h>
|
||||||
|
|
||||||
|
#include <rpcclient.hpp>
|
||||||
|
#include <nethandler.hpp>
|
||||||
#include <service.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) {
|
int main(int argc, char** argv) {
|
||||||
Service svc(1025);
|
Service svc(1025);
|
||||||
@@ -14,8 +104,10 @@ int main(int argc, char** argv) {
|
|||||||
std::cerr << bindres.error() << std::endl;
|
std::cerr << bindres.error() << std::endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
SocketHandler handler;
|
|
||||||
auto listres = svc.Listen(&handler);
|
TestRPCHandler rcpHandler;
|
||||||
|
TestSocketHandler socketHandler(rcpHandler);
|
||||||
|
auto listres = svc.Listen(&socketHandler);
|
||||||
if (!listres) {
|
if (!listres) {
|
||||||
std::cerr << listres.error() << std::endl;
|
std::cerr << listres.error() << std::endl;
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user