RTBKit
0.9
Open-source framework to create real-time ad bidding systems.
|
00001 /* zmq_message_router.h -*- C++ -*- 00002 Jeremy Barnes, 22 November 2012 00003 Copyright (c) 2012 Datacratic. All rights reserved. 00004 00005 Router object to hook up zeromq messages (identified with a topic) 00006 to callback functions. 00007 */ 00008 00009 #pragma once 00010 00011 #include "named_endpoint.h" 00012 #include "message_loop.h" 00013 00014 00015 namespace Datacratic { 00016 00017 00018 /*****************************************************************************/ 00019 /* ZMQ MESSAGE ROUTER */ 00020 /*****************************************************************************/ 00021 00022 struct ZmqMessageRouter: public ZmqEventSource { 00023 00024 ZmqMessageRouter(bool routable = true) 00025 : routable(routable) 00026 { 00027 } 00028 00029 void addRoute(const std::string & topic, 00030 AsyncMessageHandler handler) 00031 { 00032 messageHandlers[topic] = handler; 00033 } 00034 00035 void bind(const std::string & topic, 00036 const std::function<void (const std::vector<std::string> & args)> & handler) 00037 { 00038 messageHandlers[topic] = handler; 00039 } 00040 00041 virtual void handleMessage(const std::vector<std::string> & message) 00042 { 00043 std::string topic = message.at(routable); 00044 00045 //using namespace std; 00046 //cerr << "got message " << topic << " " << message << endl; 00047 00048 auto it = messageHandlers.find(topic); 00049 if (it == messageHandlers.end()) 00050 defaultHandler(message); 00051 else it->second(message); 00052 } 00053 00054 bool routable; 00055 std::map<std::string, AsyncMessageHandler> messageHandlers; 00056 AsyncMessageHandler defaultHandler; 00057 }; 00058 00059 00060 } // namespace Datacratic 00061