Skip to content

Commit 224bfca

Browse files
committed
moved process_event into protected area
1 parent f2301a8 commit 224bfca

File tree

1 file changed

+109
-107
lines changed

1 file changed

+109
-107
lines changed

zmq.hpp

Lines changed: 109 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -2374,112 +2374,6 @@ class monitor_t
23742374

23752375
return process_event(items[0].revents);
23762376
}
2377-
2378-
bool process_event(short events)
2379-
{
2380-
zmq::message_t eventMsg;
2381-
2382-
if (events & ZMQ_POLLIN) {
2383-
int rc = zmq_msg_recv(eventMsg.handle(), _monitor_socket.handle(), 0);
2384-
if (rc == -1 && zmq_errno() == ETERM)
2385-
return false;
2386-
assert(rc != -1);
2387-
2388-
} else {
2389-
return false;
2390-
}
2391-
2392-
#if ZMQ_VERSION_MAJOR >= 4
2393-
const char *data = static_cast<const char *>(eventMsg.data());
2394-
zmq_event_t msgEvent;
2395-
memcpy(&msgEvent.event, data, sizeof(uint16_t));
2396-
data += sizeof(uint16_t);
2397-
memcpy(&msgEvent.value, data, sizeof(int32_t));
2398-
zmq_event_t *event = &msgEvent;
2399-
#else
2400-
zmq_event_t *event = static_cast<zmq_event_t *>(eventMsg.data());
2401-
#endif
2402-
2403-
#ifdef ZMQ_NEW_MONITOR_EVENT_LAYOUT
2404-
zmq::message_t addrMsg;
2405-
int rc = zmq_msg_recv(addrMsg.handle(), _monitor_socket.handle(), 0);
2406-
if (rc == -1 && zmq_errno() == ETERM) {
2407-
return false;
2408-
}
2409-
2410-
assert(rc != -1);
2411-
std::string address = addrMsg.to_string();
2412-
#else
2413-
// Bit of a hack, but all events in the zmq_event_t union have the same layout so this will work for all event types.
2414-
std::string address = event->data.connected.addr;
2415-
#endif
2416-
2417-
#ifdef ZMQ_EVENT_MONITOR_STOPPED
2418-
if (event->event == ZMQ_EVENT_MONITOR_STOPPED) {
2419-
return false;
2420-
}
2421-
2422-
#endif
2423-
2424-
switch (event->event) {
2425-
case ZMQ_EVENT_CONNECTED:
2426-
on_event_connected(*event, address.c_str());
2427-
break;
2428-
case ZMQ_EVENT_CONNECT_DELAYED:
2429-
on_event_connect_delayed(*event, address.c_str());
2430-
break;
2431-
case ZMQ_EVENT_CONNECT_RETRIED:
2432-
on_event_connect_retried(*event, address.c_str());
2433-
break;
2434-
case ZMQ_EVENT_LISTENING:
2435-
on_event_listening(*event, address.c_str());
2436-
break;
2437-
case ZMQ_EVENT_BIND_FAILED:
2438-
on_event_bind_failed(*event, address.c_str());
2439-
break;
2440-
case ZMQ_EVENT_ACCEPTED:
2441-
on_event_accepted(*event, address.c_str());
2442-
break;
2443-
case ZMQ_EVENT_ACCEPT_FAILED:
2444-
on_event_accept_failed(*event, address.c_str());
2445-
break;
2446-
case ZMQ_EVENT_CLOSED:
2447-
on_event_closed(*event, address.c_str());
2448-
break;
2449-
case ZMQ_EVENT_CLOSE_FAILED:
2450-
on_event_close_failed(*event, address.c_str());
2451-
break;
2452-
case ZMQ_EVENT_DISCONNECTED:
2453-
on_event_disconnected(*event, address.c_str());
2454-
break;
2455-
#if ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 3, 0) || (defined(ZMQ_BUILD_DRAFT_API) && ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 2, 3))
2456-
case ZMQ_EVENT_HANDSHAKE_FAILED_NO_DETAIL:
2457-
on_event_handshake_failed_no_detail(*event, address.c_str());
2458-
break;
2459-
case ZMQ_EVENT_HANDSHAKE_FAILED_PROTOCOL:
2460-
on_event_handshake_failed_protocol(*event, address.c_str());
2461-
break;
2462-
case ZMQ_EVENT_HANDSHAKE_FAILED_AUTH:
2463-
on_event_handshake_failed_auth(*event, address.c_str());
2464-
break;
2465-
case ZMQ_EVENT_HANDSHAKE_SUCCEEDED:
2466-
on_event_handshake_succeeded(*event, address.c_str());
2467-
break;
2468-
#elif defined(ZMQ_BUILD_DRAFT_API) && ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 2, 1)
2469-
case ZMQ_EVENT_HANDSHAKE_FAILED:
2470-
on_event_handshake_failed(*event, address.c_str());
2471-
break;
2472-
case ZMQ_EVENT_HANDSHAKE_SUCCEED:
2473-
on_event_handshake_succeed(*event, address.c_str());
2474-
break;
2475-
#endif
2476-
default:
2477-
on_event_unknown(*event, address.c_str());
2478-
break;
2479-
}
2480-
2481-
return true;
2482-
}
24832377

24842378
#ifdef ZMQ_EVENT_MONITOR_STOPPED
24852379
void abort()
@@ -2588,12 +2482,120 @@ class monitor_t
25882482
(void) addr_;
25892483
}
25902484

2485+
protected:
2486+
bool process_event(short events)
2487+
{
2488+
zmq::message_t eventMsg;
2489+
2490+
if (events & ZMQ_POLLIN) {
2491+
int rc = zmq_msg_recv(eventMsg.handle(), _monitor_socket.handle(), 0);
2492+
if (rc == -1 && zmq_errno() == ETERM)
2493+
return false;
2494+
assert(rc != -1);
2495+
2496+
} else {
2497+
return false;
2498+
}
2499+
2500+
#if ZMQ_VERSION_MAJOR >= 4
2501+
const char *data = static_cast<const char *>(eventMsg.data());
2502+
zmq_event_t msgEvent;
2503+
memcpy(&msgEvent.event, data, sizeof(uint16_t));
2504+
data += sizeof(uint16_t);
2505+
memcpy(&msgEvent.value, data, sizeof(int32_t));
2506+
zmq_event_t *event = &msgEvent;
2507+
#else
2508+
zmq_event_t *event = static_cast<zmq_event_t *>(eventMsg.data());
2509+
#endif
2510+
2511+
#ifdef ZMQ_NEW_MONITOR_EVENT_LAYOUT
2512+
zmq::message_t addrMsg;
2513+
int rc = zmq_msg_recv(addrMsg.handle(), _monitor_socket.handle(), 0);
2514+
if (rc == -1 && zmq_errno() == ETERM) {
2515+
return false;
2516+
}
2517+
2518+
assert(rc != -1);
2519+
std::string address = addrMsg.to_string();
2520+
#else
2521+
// Bit of a hack, but all events in the zmq_event_t union have the same layout so this will work for all event types.
2522+
std::string address = event->data.connected.addr;
2523+
#endif
2524+
2525+
#ifdef ZMQ_EVENT_MONITOR_STOPPED
2526+
if (event->event == ZMQ_EVENT_MONITOR_STOPPED) {
2527+
return false;
2528+
}
2529+
2530+
#endif
2531+
2532+
switch (event->event) {
2533+
case ZMQ_EVENT_CONNECTED:
2534+
on_event_connected(*event, address.c_str());
2535+
break;
2536+
case ZMQ_EVENT_CONNECT_DELAYED:
2537+
on_event_connect_delayed(*event, address.c_str());
2538+
break;
2539+
case ZMQ_EVENT_CONNECT_RETRIED:
2540+
on_event_connect_retried(*event, address.c_str());
2541+
break;
2542+
case ZMQ_EVENT_LISTENING:
2543+
on_event_listening(*event, address.c_str());
2544+
break;
2545+
case ZMQ_EVENT_BIND_FAILED:
2546+
on_event_bind_failed(*event, address.c_str());
2547+
break;
2548+
case ZMQ_EVENT_ACCEPTED:
2549+
on_event_accepted(*event, address.c_str());
2550+
break;
2551+
case ZMQ_EVENT_ACCEPT_FAILED:
2552+
on_event_accept_failed(*event, address.c_str());
2553+
break;
2554+
case ZMQ_EVENT_CLOSED:
2555+
on_event_closed(*event, address.c_str());
2556+
break;
2557+
case ZMQ_EVENT_CLOSE_FAILED:
2558+
on_event_close_failed(*event, address.c_str());
2559+
break;
2560+
case ZMQ_EVENT_DISCONNECTED:
2561+
on_event_disconnected(*event, address.c_str());
2562+
break;
2563+
#if ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 3, 0) || (defined(ZMQ_BUILD_DRAFT_API) && ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 2, 3))
2564+
case ZMQ_EVENT_HANDSHAKE_FAILED_NO_DETAIL:
2565+
on_event_handshake_failed_no_detail(*event, address.c_str());
2566+
break;
2567+
case ZMQ_EVENT_HANDSHAKE_FAILED_PROTOCOL:
2568+
on_event_handshake_failed_protocol(*event, address.c_str());
2569+
break;
2570+
case ZMQ_EVENT_HANDSHAKE_FAILED_AUTH:
2571+
on_event_handshake_failed_auth(*event, address.c_str());
2572+
break;
2573+
case ZMQ_EVENT_HANDSHAKE_SUCCEEDED:
2574+
on_event_handshake_succeeded(*event, address.c_str());
2575+
break;
2576+
#elif defined(ZMQ_BUILD_DRAFT_API) && ZMQ_VERSION >= ZMQ_MAKE_VERSION(4, 2, 1)
2577+
case ZMQ_EVENT_HANDSHAKE_FAILED:
2578+
on_event_handshake_failed(*event, address.c_str());
2579+
break;
2580+
case ZMQ_EVENT_HANDSHAKE_SUCCEED:
2581+
on_event_handshake_succeed(*event, address.c_str());
2582+
break;
2583+
#endif
2584+
default:
2585+
on_event_unknown(*event, address.c_str());
2586+
break;
2587+
}
2588+
2589+
return true;
2590+
}
2591+
2592+
socket_t _monitor_socket;
2593+
25912594
private:
25922595
monitor_t(const monitor_t &) ZMQ_DELETED_FUNCTION;
25932596
void operator=(const monitor_t &) ZMQ_DELETED_FUNCTION;
25942597

25952598
socket_ref _socket;
2596-
socket_t _monitor_socket;
25972599

25982600
void close() ZMQ_NOTHROW
25992601
{

0 commit comments

Comments
 (0)