mirror of
https://github.com/zeromq/libzmq.git
synced 2024-12-28 16:15:23 +08:00
Merge pull request #1539 from djelenc/issue1116
Addresses zeromq/libzmq#1116.
This commit is contained in:
commit
391bc12d17
@ -92,6 +92,7 @@ void zmq::xpub_t::xread_activated (pipe_t *pipe_)
|
||||
{
|
||||
last_pipe = pipe_;
|
||||
pending_data.push_back(blob_t(data, size));
|
||||
pending_metadata.push_back(sub.metadata());
|
||||
pending_flags.push_back(0);
|
||||
}
|
||||
else
|
||||
@ -108,6 +109,7 @@ void zmq::xpub_t::xread_activated (pipe_t *pipe_)
|
||||
if (options.type == ZMQ_XPUB && (unique || (*data == 1 && verbose_subs) ||
|
||||
(*data == 0 && verbose_unsubs && verbose_subs))) {
|
||||
pending_data.push_back(blob_t(data, size));
|
||||
pending_metadata.push_back(sub.metadata());
|
||||
pending_flags.push_back(0);
|
||||
}
|
||||
}
|
||||
@ -115,6 +117,7 @@ void zmq::xpub_t::xread_activated (pipe_t *pipe_)
|
||||
else {
|
||||
// Process user message coming upstream from xsub socket
|
||||
pending_data.push_back (blob_t (data, size));
|
||||
pending_metadata.push_back (sub.metadata ());
|
||||
pending_flags.push_back (sub.flags ());
|
||||
}
|
||||
sub.close ();
|
||||
@ -241,8 +244,10 @@ int zmq::xpub_t::xrecv (msg_t *msg_)
|
||||
memcpy (msg_->data (),
|
||||
pending_data.front ().data (),
|
||||
pending_data.front ().size ());
|
||||
msg_->set_metadata (pending_metadata.front ());
|
||||
msg_->set_flags (pending_flags.front ());
|
||||
pending_data.pop_front ();
|
||||
pending_metadata.pop_front ();
|
||||
pending_flags.pop_front ();
|
||||
return 0;
|
||||
}
|
||||
@ -265,6 +270,7 @@ void zmq::xpub_t::send_unsubscription (unsigned char *data_, size_t size_,
|
||||
if (size_ > 0)
|
||||
memcpy (&unsub [1], data_, size_);
|
||||
self->pending_data.push_back (unsub);
|
||||
self->pending_metadata.push_back (NULL);
|
||||
self->pending_flags.push_back (0);
|
||||
}
|
||||
}
|
||||
|
@ -109,6 +109,7 @@ namespace zmq
|
||||
// applied to the trie, but not yet received by the user.
|
||||
typedef std::basic_string <unsigned char> blob_t;
|
||||
std::deque <blob_t> pending_data;
|
||||
std::deque <metadata_t*> pending_metadata;
|
||||
std::deque <unsigned char> pending_flags;
|
||||
|
||||
xpub_t (const xpub_t&);
|
||||
|
Loading…
x
Reference in New Issue
Block a user