public final void connect (final String peer, final SessionSpecification specification, final Message message, final SessionCallbacks callbacks)
{
Preconditions.checkNotNull (peer);
Preconditions.checkNotNull (specification);
Preconditions.checkNotNull (callbacks);
final RoleSpecification selfRole = specification.getSelfRole ();
final RoleSpecification peerRole = specification.getPeerRole ();
final String selfRoleIdentifier = selfRole.getIdentifier ();
final String peerRoleIdentifier = peerRole.getIdentifier ();
Preconditions.checkNotNull (selfRoleIdentifier);
Preconditions.checkNotNull (peerRoleIdentifier);
Preconditions.checkArgument (message.specification.getType () == MessageType.Initiation);
final String sessionIdentifier = UUID.randomUUID ().toString ();
synchronized (this.state.monitor) {