示例#1
0
        public async Task Connect()
        {
            if (Server == null)
            {
                return;
            }

            parent.IsConnecting      = true;
            parent.IsAuthed          = false;
            parent.ReadOrWriteFailed = false;
            _conn = new TcpClient {
                NoDelay = true
            };
            try
            {
                await _conn.ConnectAsync(Server.Hostname, Server.Port);

                if (!_conn.Connected)
                {
                    return;
                }
                if (Server.Ssl)
                {
                    SslStream sslStream;
                    if (Server.IgnoreCertErrors)
                    {
                        sslStream = new SslStream(_conn.GetStream(), true, new RemoteCertificateValidationCallback(CheckCert));
                    }
                    else
                    {
                        sslStream = new SslStream(_conn.GetStream());
                    }

                    await sslStream.AuthenticateAsClientAsync(Server.Hostname);

                    _stream = sslStream;
                }
                else
                {
                    _stream = _conn.GetStream();
                }

                _clientStreamReader = new StreamReader(_stream);
                _clientStreamWriter = new StreamWriter(_stream);

                parent.IsConnecting = false;
                parent.IsConnected  = true;
                parent.AttemptAuth();

                while (true)
                {
                    var line = await _clientStreamReader.ReadLineAsync();

                    await parent.RecieveLine(line);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
            }
        }