コード例 #1
0
ファイル: IrcSocket.cs プロジェクト: mlarouche/WinIRC
        public override async void Connect()
        {
            var autoReconnect = Config.GetBoolean(Config.AutoReconnect, true);

            if (Server == null)
            {
                return;
            }

            try
            {
                foreach (var current in BackgroundTaskRegistration.AllTasks)
                {
                    if (current.Value.Name == BackgroundTaskName)
                    {
                        task = current.Value;
                        break;
                    }
                }

                if (task == null)
                {
                    var socketTaskBuilder = new BackgroundTaskBuilder();
                    socketTaskBuilder.Name = "WinIRCBackgroundTask." + Server.Name;

                    var trigger = new SocketActivityTrigger();
                    socketTaskBuilder.SetTrigger(trigger);
                    //task = socketTaskBuilder.Register();
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
            }

            IsAuthed          = false;
            ReadOrWriteFailed = false;

            if (!ConnCheck.HasInternetAccess)
            {
                var msg = autoReconnect
                    ? "We'll try to connect once a connection is available."
                    : "Please try again once your connection is restored";

                var error = IrcUWPBase.CreateBasicToast("No connection detected.", msg);
                error.ExpirationTime = DateTime.Now.AddDays(2);
                ToastNotificationManager.CreateToastNotifier().Show(error);

                if (!autoReconnect)
                {
                    DisconnectAsync(attemptReconnect: autoReconnect);
                }

                return;
            }

            streamSocket = new StreamSocket();
            streamSocket.Control.KeepAlive = true;

            if (Config.GetBoolean(Config.IgnoreSSL))
            {
                streamSocket.Control.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted);
                streamSocket.Control.IgnorableServerCertificateErrors.Add(ChainValidationResult.Expired);
            }

            if (task != null)
            {
                streamSocket.EnableTransferOwnership(task.TaskId, SocketActivityConnectedStandbyAction.Wake);
            }

            dataStreamLineReader = new SafeLineReader();

            try
            {
                var protectionLevel = Server.Ssl ? SocketProtectionLevel.Tls12 : SocketProtectionLevel.PlainSocket;
                Debug.WriteLine("Attempting to connect...");
                await streamSocket.ConnectAsync(new Windows.Networking.HostName(Server.Hostname), Server.Port.ToString(), protectionLevel);

                Debug.WriteLine("Connected!");

                reader = new DataReader(streamSocket.InputStream);
                writer = new DataWriter(streamSocket.OutputStream);

                IsConnected  = true;
                IsConnecting = false;

                ConnectionHandler();
            }
            catch (Exception e)
            {
                var msg = autoReconnect
                    ? "Attempting to reconnect..."
                    : "Please try again later.";

                AddError("Error whilst connecting: " + e.Message + "\n" + msg);
                AddError(e.StackTrace);
                AddError("If this error keeps occuring, ensure your connection settings are correct.");

                DisconnectAsync(attemptReconnect: autoReconnect);

                Debug.WriteLine(e.Message);
                Debug.WriteLine(e.StackTrace);
            }
        }
コード例 #2
0
        public override async void Connect()
        {
            if (server == null)
            {
                return;
            }

            IsAuthed          = false;
            ReadOrWriteFailed = false;

            if (!ConnCheck.HasInternetAccess)
            {
                var autoReconnect = Config.GetBoolean(Config.AutoReconnect);
                var msg           = autoReconnect
                    ? "We'll try to connect once a connection is available."
                    : "Please try again once your connection is restored";

                var error = Irc.CreateBasicToast("No connection detected.", msg);
                error.ExpirationTime = DateTime.Now.AddDays(2);
                ToastNotificationManager.CreateToastNotifier().Show(error);

                if (!autoReconnect)
                {
                    DisconnectAsync(attemptReconnect: autoReconnect);
                }

                return;
            }

            streamSocket = new StreamSocket();
            streamSocket.Control.KeepAlive = true;

            if (Config.GetBoolean(Config.IgnoreSSL))
            {
                streamSocket.Control.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted);
                streamSocket.Control.IgnorableServerCertificateErrors.Add(ChainValidationResult.Expired);
            }

            dataStreamLineReader = new SafeLineReader();

            try
            {
                var protectionLevel = server.ssl ? SocketProtectionLevel.Tls12 : SocketProtectionLevel.PlainSocket;
                Debug.WriteLine("Attempting to connect...");
                await streamSocket.ConnectAsync(new Windows.Networking.HostName(server.hostname), server.port.ToString(), protectionLevel);

                Debug.WriteLine("Connected!");

                reader = new DataReader(streamSocket.InputStream);
                writer = new DataWriter(streamSocket.OutputStream);

                IsConnected    = true;
                IsReconnecting = false;

                ConnectionHandler();
            }
            catch (Exception e)
            {
                var autoReconnect = Config.GetBoolean(Config.AutoReconnect, true);
                var msg           = autoReconnect
                    ? "Attempting to reconnect..."
                    : "Please try again later.";

                AddError("Error whilst connecting: " + e.Message + "\n" + msg);
                AddError(e.StackTrace);
                AddError("If this error keeps occuring, ensure your connection settings are correct.");

                DisconnectAsync(attemptReconnect: autoReconnect);

                Debug.WriteLine(e.Message);
                Debug.WriteLine(e.StackTrace);
            }
        }