Exemplo n.º 1
0
        private void Connection(bool nick = false)
        {
            try
            {
                NetworkQuit = false;
                _cts = new CancellationTokenSource();

                if(nick)
                {
                    sMyNickInfo.ChangeNick(IRCConfig.List[_servername].NickName);

                    if(Rfc2812Util.IsServInLower(sMyNickInfo.NickStorage)) // NickName
                    {
                        sMyNickInfo.ChangeNick(); // NickName -> NickName2

                        if(Rfc2812Util.IsServInLower(sMyNickInfo.NickStorage)) // NickName2
                        {
                            sMyNickInfo.ChangeNick(); // NickName2 -> NickName3

                            if(Rfc2812Util.IsServInLower(sMyNickInfo.NickStorage)) // NickName3
                                sMyNickInfo.ChangeNick(); // NickName3 -> Other
                        }

                        Log.Warning("Network", sLConsole.GetString("This nick name ({0}) is used by a service bot. Your nick is automaticly changed to a placeholder one."), sMyNickInfo.NickStorage);
                    }
                }

                Log.Notice("Network", sLConsole.GetString("Connection type: {0}"), CType.ToString());

                try
                {
                    client = new TcpClient();
                    client.Connect(_server, _port);
                }
                catch(Exception)
                {
                    Log.Error("Network", sLConsole.GetString("Fatal error was happened while established the connection!"));
                    return;
                }

                if(!client.IsNull() && client.Connected)
                    Log.Success("Network", sLConsole.GetString("Successfully established the connection!"));
                else
                {
                    Log.Error("Network", sLConsole.GetString("Error was happened while established the connection!"));
                    return;
                }

                if(CType == ConnectionType.Ssl)
                {
                    SslStream networkStream = null;

                    try
                    {
                        networkStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback((s,ce,ca,p) => true), null);
                        networkStream.AuthenticateAsClient(_server);
                    }
                    catch(AuthenticationException e)
                    {
                        Log.Error("Network", sLConsole.GetString("Certificate not accepted, exception: {0}"), e.Message);
                        return;
                    }
                    catch(Exception e)
                    {
                        Log.Error("Network", sLConsole.GetString("Failure details: {0}"), e.Message);
                        return;
                    }

                    if(networkStream.IsNull())
                        return;

                    InitializeStream(networkStream);
                }
                else
                    InitializeStream(client.GetStream());

                if(reader.IsNull() || INetwork.WriterList[_servername].IsNull())
                    return;

                Connected = true;
                sSender.RegisterConnection(IRCConfig.List[_servername].Password, sMyNickInfo.NickStorage, IRCConfig.List[_servername].UserName, IRCConfig.List[_servername].UserInfo);

                Log.Notice("Network", sLConsole.GetString("Users' datas are sent."));
                Online = false;
                IsAllJoin = false;
                _enabled = true;
                KickPrivmsg = string.Empty;
                ModePrivmsg = string.Empty;
                ChannelPrivmsg = string.Empty;
                NewNickPrivmsg = string.Empty;
                UrlTitleEnabled = false;
                sMyNickInfo.ChangeIdentifyStatus(false);
                sMyNickInfo.ChangeVhostStatus(false);
            }
            catch(Exception e)
            {
                Online = false;
                Connected = false;
                Log.Error("Network", sLConsole.GetString("Failure details: {0}"), e.Message);
            }
        }