public void Disconnect()
        {
            if (protocol != null)
            {
                DoLogOut();

                protocol.MessageReceived -= HandleMessage;
                protocol.StreamError -= OnStreamError;
                protocol.StopProcessing();

                protocol.Dispose();
                protocol = null;
            }
        }
        public void Connect(Stream source)
        {
            if (source == null)
                throw new ArgumentNullException("source");
            if (protocol != null)
            {
                log.Warn("A second connection is being established.  Disconnecting first...");
                Disconnect();
            }

            protocol = new Network(source);
            protocol.MessageReceived += HandleMessage;
            protocol.StreamError += OnStreamError;

            protocol.StartProcessing();
        }