server.h
#ifndef TOOL_SERVER_H
#define TOOL_SERVER_H
#include "UdsZmqHandler.h"
#include "EventHandler.h"
class Server final {
public:
Server();
~Server() = default;
void run();
private:
void handleEvents();
UdsZmqHandler udsZmqHandler_;
EventHandler eventHandler_;
};
#endif //TOOL_SERVER_H
server.cpp
#include "Server.h"
ServerManager::ServerManager():udsZmqHandler_(zmq::socket_type::rep)
{
}
void ServerManager::handleEvents()
{
Message msg;
udsZmqHandler_.recv(msg);
auto &protobufmsg = msg.getProtoMsg();
auto commandType = protobufmsg.command().type();
your_tool_proto::Response_Status respStatus = your_tool_proto::Response_Status_SUCCESS;
std::string cmdResult("SUCCESS");
std::string xmlData;
eventHandler_.handleEvent(commandType, ...);
auto operationReqType = protobufmsg.request().reqtype();
Message rspMsg;
rspMsg.createRspMessage(commandType, respStatus, xmlData, cmdResult);
udsZmqHandler_.send(rspMsg);
}
void ServerManager::run()
{
zmq_pollitem_t pollitem{udsZmqHandler_.handle(), -1, ZMQ_POLLIN, 0};
while (true)
{
int rc = 0;
try
{
rc = zmq::poll(&pollitem, 1);
}
catch (zmq::error_t& e)
{
std::cout <<"server: ZMQ POLL with errno: " << e.what() <<std::endl;
}
//-1 means error and 0 means timeout.
if (rc > 0)
{
if(pollitem.revents & ZMQ_POLLIN)
{
handleEvents();
}
}
else
{
std::cout <<"server: ZMQ POLL with errno: "<< zmq_strerror(zmq_errno())<<std::endl;
}
}
}
main.cpp
#include <iostream>
#include <thread>
#include "Server.h"
int main()
{
Server server;
server.run();
return 0;
}