mirror of
https://github.com/zeromq/libzmq.git
synced 2024-12-14 02:57:47 +01:00
PGM transport reconciled with subscription forwarding
As PGM is not capable of passing subscriptions upstream, subscriptions are ignored at sub side and engine subscribes for all messages on pub side. Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
This commit is contained in:
parent
d7adc3f19a
commit
c7542981d1
@ -68,6 +68,9 @@ void zmq::pgm_receiver_t::plug (io_thread_t *io_thread_, i_engine_sink *sink_)
|
||||
set_pollin (socket_handle);
|
||||
|
||||
sink = sink_;
|
||||
|
||||
// If there are any subscriptions already queued in the session, drop them.
|
||||
drop_subscriptions ();
|
||||
}
|
||||
|
||||
void zmq::pgm_receiver_t::unplug ()
|
||||
@ -101,7 +104,7 @@ void zmq::pgm_receiver_t::terminate ()
|
||||
|
||||
void zmq::pgm_receiver_t::activate_out ()
|
||||
{
|
||||
zmq_assert (false);
|
||||
drop_subscriptions ();
|
||||
}
|
||||
|
||||
void zmq::pgm_receiver_t::activate_in ()
|
||||
@ -255,5 +258,12 @@ void zmq::pgm_receiver_t::timer_event (int token)
|
||||
in_event ();
|
||||
}
|
||||
|
||||
void zmq::pgm_receiver_t::drop_subscriptions ()
|
||||
{
|
||||
msg_t msg;
|
||||
while (sink->read (&msg))
|
||||
msg.close ();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -64,6 +64,10 @@ namespace zmq
|
||||
|
||||
private:
|
||||
|
||||
// PGM is not able to move subscriptions upstream. Thus, drop all
|
||||
// the pending subscriptions.
|
||||
void drop_subscriptions ();
|
||||
|
||||
// RX timeout timer ID.
|
||||
enum {rx_timer_id = 0xa1};
|
||||
|
||||
|
@ -88,6 +88,15 @@ void zmq::pgm_sender_t::plug (io_thread_t *io_thread_, i_engine_sink *sink_)
|
||||
|
||||
// Set POLLOUT for downlink_socket_handle.
|
||||
set_pollout (handle);
|
||||
|
||||
// PGM is not able to pass subscriptions upstream, thus we have no idea
|
||||
// what messages are peers interested in. Because of that we have to
|
||||
// subscribe for all the messages.
|
||||
msg_t msg;
|
||||
msg.init ();
|
||||
bool ok = sink_->write (&msg);
|
||||
zmq_assert (ok);
|
||||
sink_->flush ();
|
||||
}
|
||||
|
||||
void zmq::pgm_sender_t::unplug ()
|
||||
|
Loading…
Reference in New Issue
Block a user