/// <summary>
/// Attaches the channel to an existing socket.
/// </summary>
public void Attach(uint channelId, Socket socket)
{
if (socket == null)
{
throw new ArgumentNullException(nameof(socket));
}
lock (DataLock)
{
// check for existing socket.
if (Socket != null)
{
throw new InvalidOperationException("Channel is already attached to a socket.");
}
ChannelId = channelId;
State = TcpChannelState.Connecting;
Socket = new TcpMessageSocket(this, socket, BufferManager, Quotas.MaxBufferSize);
Utils.Trace("{0} SOCKET ATTACHED: {1:X8}, ChannelId={2}", ChannelName, Socket.Handle, ChannelId);
Socket.ReadNextMessage();
// automatically clean up the channel if no hello received.
StartCleanupTimer(StatusCodes.BadTimeout);
}
}