public NzbConnection(NzbServer server, int id)
        {
            ArgumentChecker.ThrowIfNull("server", server);

            _id = id;
            _server = server;
            _synchronizationObject = new ReaderWriterLockSlim();
            _status = NzbConnectionStatus.Disconnected;
            _nntpParser = new NntpParser(this);
            this.Server = _server;
        }
        public void Discard()
        {
            this.Disconnect();

            this.Status = NzbConnectionStatus.Discarded;
        }
        public void Disconnect()
        {
            this.Status = NzbConnectionStatus.Disconnecting;

            _nntpParser.Disconnect();
            this.CleanupTcpClient();

            this.Status = NzbConnectionStatus.Disconnected;
        }
        public void Connect()
        {
            this.CreateNewTcpClient();
            this.SetStream();

            this.Status = NzbConnectionStatus.Connecting;

            try
            {
                _nntpParser.Authenticate(_server.Username, _server.Password);

                this.Status = NzbConnectionStatus.Connected;
            }
            catch (NzbAuthenticationFailedException)
            {
                this.Status = NzbConnectionStatus.AuthenticationFailure;
            }
        }