0
0
mirror of https://github.com/zeromq/libzmq.git synced 2025-01-01 10:50:28 +08:00

Multi-hop REQ/REP, part VI., session 'name' renamed to 'peer_identity'

This commit is contained in:
Martin Sustrik 2010-02-13 09:09:40 +01:00
parent 2e78e48503
commit 923eacd28a
3 changed files with 21 additions and 16 deletions

View File

@ -42,23 +42,23 @@ zmq::session_t::session_t (object_t *parent_, socket_base_t *owner_,
}
zmq::session_t::session_t (object_t *parent_, socket_base_t *owner_,
const options_t &options_, const char *name_) :
const options_t &options_, unsigned char peer_identity_size_,
unsigned char *peer_identity_) :
owned_t (parent_, owner_),
in_pipe (NULL),
active (true),
out_pipe (NULL),
engine (NULL),
ordinal (0),
options (options_)
{
if (name_) {
if (peer_identity_size_) {
type = named;
name = name_;
ordinal = 0;
peer_identity.assign ((char*) peer_identity_, peer_identity_size_);
}
else {
type = transient;
// TODO: Generate unique name here.
ordinal = 0;
}
}
@ -169,8 +169,8 @@ void zmq::session_t::revive (reader_t *pipe_)
void zmq::session_t::process_plug ()
{
// Register the session with the socket.
if (!name.empty ()) {
bool ok = owner->register_session (name.c_str (), this);
if (!peer_identity.empty ()) {
bool ok = owner->register_session (peer_identity.c_str (), this);
// There's already a session with the specified identity.
// We should syslog it and drop the session. TODO
@ -213,7 +213,7 @@ void zmq::session_t::process_unplug ()
if (type == unnamed)
owner->unregister_session (ordinal);
else if (type == named)
owner->unregister_session (name.c_str ());
owner->unregister_session (peer_identity.c_str ());
// Ask associated pipes to terminate.
if (in_pipe) {

View File

@ -41,7 +41,8 @@ namespace zmq
// Creates named session. If name is NULL, transient session with
// auto-generated name is created.
session_t (object_t *parent_, socket_base_t *owner_,
const options_t &options_, const char *name_);
const options_t &options_, unsigned char peer_identity_size_,
unsigned char *peer_identity_);
// i_inout interface implementation.
bool read (::zmq_msg_t *msg_);
@ -86,12 +87,15 @@ namespace zmq
unnamed
} type;
// Ordinal of the session (if any).
// Session is identified by ordinal in the case when it was created
// before connection to the peer was established and thus we are
// unaware of peer's identity.
uint64_t ordinal;
// The name of the session. One that is used to register it with
// socket-level repository of sessions.
std::string name;
// Identity of the peer. If the peer is anonymous, unique name is
// generated instead. Peer identity (or the generated name) is used
// register the session with socket-level repository of sessions.
std::string peer_identity;
// Inherited socket options.
options_t options;

View File

@ -168,7 +168,8 @@ void zmq::zmq_init_t::finalise ()
if (!session) {
session = new (std::nothrow) session_t (
choose_io_thread (options.affinity), owner, options,
peer_identity.c_str ());
(unsigned char) peer_identity.size (),
(unsigned char*) peer_identity.c_str ());
zmq_assert (session);
send_plug (session);
send_own (owner, session);
@ -182,7 +183,7 @@ void zmq::zmq_init_t::finalise ()
// transient session.
else {
session = new (std::nothrow) session_t (
choose_io_thread (options.affinity), owner, options, NULL);
choose_io_thread (options.affinity), owner, options, 0, NULL);
zmq_assert (session);
send_plug (session);
send_own (owner, session);
@ -191,7 +192,7 @@ void zmq::zmq_init_t::finalise ()
session->inc_seqnum ();
}
// No need to increment seqnum as it was laready incremented above.
// No need to increment seqnum as it was already incremented above.
send_attach (session, engine, (unsigned char) peer_identity.size (),
(unsigned char*) peer_identity.data (), false);