工具常用系列 6: Server端实现样例

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值