protbuf协议的自动派发消息?就是不用switch判断的那种, 是如何写的?

发布于 2022-09-11 19:09:16 字数 55 浏览 18 评论 0

求指导一下,如何不使用switch,就可以处理protobuf消息,就好像mvc中的控制器一样。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

っ〆星空下的拥抱 2022-09-18 19:09:16
#ifndef TEST_USERCONTROLLER_H
#define TEST_USERCONTROLLER_H

#include <iostream>
class UserController {
public:
    void signIn(const char* data) const;
    void signOut(const char* data) const;
};

#endif //TEST_USERCONTROLLER_H
#include "UserController.h"

void UserController::signIn(const char *data) const {
    std::cout << "sign-in" << std::endl;
}

void UserController::signOut(const char *data) const {
    std::cout << "sign-out" << std::endl;
}
#ifndef TEST_PROTONETMANAGER_H
#define TEST_PROTONETMANAGER_H

#include <map>
#include <iostream>
enum METHOD {
    USER_SIGN_IN,
    USER_SIGN_OUT
};
typedef std::function<void(const char*)> callback;
class ProtoNetManager {
public:
    void registerProtoHandler(const int &msgId, const callback &fun);
    void dispatchProto(const int&msgId, const char* data);
private:
    std::map<int, callback> _listenerList;
};

#endif
#include "ProtoNetManager.h"

void ProtoNetManager::registerProtoHandler(const int &msgId, const callback &fun) {
    this->_listenerList[msgId] = fun;
}

void ProtoNetManager::dispatchProto(const int &msgId, const char *data) {
    auto iter = this->_listenerList.find(msgId);
    if (iter != this->_listenerList.end()) {
        this->_listenerList[msgId](data);
    } else {
        std::cout << "warning!!!!!" << std::endl;
    }
}
#include <iostream>
#include "ProtoNetManager.h"
#include "UserController.h"


using namespace std::placeholders;
int main(int argc, const char* argv[]) {

    ProtoNetManager* protoNetManager = new ProtoNetManager();
    UserController*  userController  = new UserController();

    protoNetManager->registerProtoHandler(METHOD::USER_SIGN_IN,
        std::bind(&UserController::signIn, userController, _1)
    );
    protoNetManager->registerProtoHandler(METHOD::USER_SIGN_OUT,
        std::bind(&UserController::signOut, userController, _1)
    );

    protoNetManager->dispatchProto(METHOD::USER_SIGN_IN, "adc");
    protoNetManager->dispatchProto(METHOD::USER_SIGN_OUT, "apc");
    return 0;
}

破解成功!
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文