Пример #1
0
        private async Task Discord_SocketClose(SocketCloseEventArgs e)
        {
            try
            {
                await RPClass.LogChannel.SendMessageAsync("Restarting: Socket Close");
            }
            catch
            {
            }
            RPClass.SaveData(-1);
            var process = new Process()
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName  = "/bin/bash",
                    Arguments = $"-c \"dotnet RPBot-Core.dll\"",
                    RedirectStandardOutput = true,
                    UseShellExecute        = false,
                    CreateNoWindow         = true,
                }
            };

            process.Start();
            Environment.Exit(-1);
            await Task.Delay(0);
        }
Пример #2
0
        private async Task Discord_SocketClose(SocketCloseEventArgs e)
        {
            try
            {
                await(await e.Client.GetChannelAsync(392429153909080065)).SendMessageAsync("Not Restarting(test): Socket Close");
            }
            catch
            {
            }

            RPClass.SaveData(-1);

            /*
             * var process = new Process()
             * {
             *  StartInfo = new ProcessStartInfo
             *  {
             *      FileName = "/bin/bash",
             *      Arguments = $"-c \"dotnet RPBot-Core.dll\"",
             *      RedirectStandardOutput = true,
             *      UseShellExecute = false,
             *      CreateNoWindow = true,
             *  }
             * };
             * process.Start();
             * Environment.Exit(-1);
             * await Task.Delay(0);
             */
        }
Пример #3
0
 private async Task OnSocketClosed(SocketCloseEventArgs e)
 {
     if (SocketClosed != null)
     {
         await SocketClosed(e);
     }
 }
Пример #4
0
        private async Task VoiceWS_SocketClosed(IWebSocketClient client, SocketCloseEventArgs e)
        {
            this.Discord.Logger.LogDebug(VoiceNextEvents.VoiceConnectionClose, "Voice WebSocket closed ({0}, '{1}')", e.CloseCode, e.CloseMessage);

            // generally this should not be disposed on all disconnects, only on requested ones
            // or something
            // otherwise problems happen
            //this.Dispose();

            if (e.CloseCode == 4006 || e.CloseCode == 4009)
            {
                this.Resume = false;
            }

            if (!this.IsDisposed)
            {
                this.TokenSource.Cancel();
                this.TokenSource              = new CancellationTokenSource();
                this.VoiceWs                  = this.Discord.Configuration.WebSocketClientFactory(this.Discord.Configuration.Proxy);
                this.VoiceWs.Disconnected    += this.VoiceWS_SocketClosed;
                this.VoiceWs.MessageReceived += this.VoiceWS_SocketMessage;
                this.VoiceWs.Connected       += this.VoiceWS_SocketOpened;

                if (this.Resume) // emzi you dipshit
                {
                    await this.ConnectAsync().ConfigureAwait(false);
                }
            }
        }
Пример #5
0
        internal void SocketOnClose(object sender, SocketCloseEventArgs e)
        {
            //means error on socket. If e.Exception == null means correct socket closing at session end
            if (e.Exception != null)
            {
                if (this.OnError != null)
                {
                    OnError(this, new ProtocolErrorEventArgs(e.Exception));
                }

                if (this.OnClose != null)
                {
                    this.OnClose(this, new CloseFrameEventArgs(new CloseFrameExt()
                    {
                        StatusCode = (int)StatusCode.InternalError
                    }));
                }

                this.handshakeFinishedEventRaised.Set();
            }
            else
            {
                if (this.OnClose != null)
                {
                    this.OnClose(this, new CloseFrameEventArgs(new CloseFrameExt()
                    {
                        StatusCode = (int)StatusCode.Success
                    }));
                }
            }
        }
Пример #6
0
        private async Task WebSocket_OnDisconnect(SocketCloseEventArgs e)
        {
            if (this.IsConnected && e.CloseCode != 1001 && e.CloseCode != -1)
            {
                this.Discord.DebugLogger.LogMessage(LogLevel.Warning, "Lavalink", $"Connection broken ({e.CloseCode}, {e.CloseMessage}); re-establishing...", DateTime.Now);
                this.WebSocket                  = this.Discord.Configuration.WebSocketClientFactory(this.Discord.Configuration.Proxy);
                this.WebSocket.Connected       += this.WebSocket_OnConnect;
                this.WebSocket.Disconnected    += this.WebSocket_OnDisconnect;
                this.WebSocket.ExceptionThrown += this.WebSocket_OnException;
                this.WebSocket.MessageReceived += this.WebSocket_OnMessage;

                this.WebSocket.AddDefaultHeader("Authorization", this.Configuration.Password);
                this.WebSocket.AddDefaultHeader("Num-Shards", this.Discord.ShardCount.ToString(CultureInfo.InvariantCulture));
                this.WebSocket.AddDefaultHeader("User-Id", this.Discord.CurrentUser.Id.ToString(CultureInfo.InvariantCulture));

                await this.WebSocket.ConnectAsync(new Uri($"ws://{this.Configuration.SocketEndpoint}/"));
            }
            else if (e.CloseCode != 1001 && e.CloseCode != -1)
            {
                this.Discord.DebugLogger.LogMessage(LogLevel.Info, "Lavalink", $"Connection closed ({e.CloseCode}, {e.CloseMessage}).", DateTime.Now);
                this.NodeDisconnected?.Invoke(this);
                await this._disconnected.InvokeAsync(new NodeDisconnectedEventArgs(this)).ConfigureAwait(false);
            }
            else
            {
                Volatile.Write(ref this._isDisposed, true);
                this.Discord.DebugLogger.LogMessage(LogLevel.Warning, "Lavalink", "Lavalink died.", DateTime.Now);
                foreach (var kvp in this.ConnectedGuilds)
                {
                    await kvp.Value.SendVoiceUpdateAsync().ConfigureAwait(false);
                }
                this.NodeDisconnected?.Invoke(this);
                await this._disconnected.InvokeAsync(new NodeDisconnectedEventArgs(this)).ConfigureAwait(false);
            }
        }
Пример #7
0
        private async Task VoiceWS_SocketClosed(SocketCloseEventArgs e)
        {
            this.Discord.DebugLogger.LogMessage(LogLevel.Debug, "VoiceNext", $"Voice socket closed ({e.CloseCode.ToString(CultureInfo.InvariantCulture)}, '{e.CloseMessage}')", DateTime.Now);

            // generally this should not be disposed on all disconnects, only on requested ones
            // or something
            // otherwise problems happen
            //this.Dispose();

            if (e.CloseCode == 4006 || e.CloseCode == 4009)
            {
                this.Resume = false;
            }

            if (!this.IsDisposed)
            {
                this.TokenSource.Cancel();
                this.TokenSource              = new CancellationTokenSource();
                this.VoiceWs                  = this.Discord.Configuration.WebSocketClientFactory(this.Discord.Configuration.Proxy);
                this.VoiceWs.Disconnected    += this.VoiceWS_SocketClosed;
                this.VoiceWs.MessageReceived += this.VoiceWS_SocketMessage;
                this.VoiceWs.Connected       += this.VoiceWS_SocketOpened;
                await this.ConnectAsync().ConfigureAwait(false);
            }
        }
Пример #8
0
        /// <summary>
        /// Disconnects the WebSocket connection.
        /// </summary>
        /// <param name="e">Disconect event arguments.</param>
        /// <returns></returns>
        public override async Task DisconnectAsync(SocketCloseEventArgs e)
        {
            //if (this.Socket.State != WebSocketState.Open || this.Token.IsCancellationRequested)
            if (close_requested)
            {
                return;
            }

            close_requested = true;
            try
            {
                await Socket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", Token).ConfigureAwait(false);

                e = e ?? new SocketCloseEventArgs(null)
                {
                    CloseCode = (int)WebSocketCloseStatus.NormalClosure, CloseMessage = ""
                };
                Socket.Abort();
                Socket.Dispose();
            }
            catch (Exception)
            { }
            finally
            {
                if (e == null)
                {
                    var cc = Socket.CloseStatus != null ? (int)Socket.CloseStatus.Value : -1;
                    e = new SocketCloseEventArgs(null)
                    {
                        CloseCode = cc, CloseMessage = Socket.CloseStatusDescription ?? "Unknown reason"
                    };
                }
                await OnDisconnectedAsync(e).ConfigureAwait(false);
            }
        }
Пример #9
0
        internal Task CallOnDisconnectedAsync(SocketCloseEventArgs e)
        {
            // Zis is to prevent deadlocks (I hope)
            _ = this._on_disconnect.InvokeAsync(e).ConfigureAwait(false);

            return(Task.Delay(0));
        }
Пример #10
0
        private async Task SocketClosed(SocketCloseEventArgs e)
        {
            Console.WriteLine("[Reconnect] Websocket Closed. Attempting to reconnect.");
            await e.Client.DisconnectAsync();

            await e.Client.ConnectAsync();
        }
Пример #11
0
        /// <summary>
        /// Set the Action to call when the connection has been terminated.
        /// </summary>
        /// <returns></returns>
        protected override Task OnDisconnectedAsync(SocketCloseEventArgs e)
        {
            this.Socket.Abort();
            this.Socket.Dispose();

            _ = this._disconnected.InvokeAsync(e).ConfigureAwait(false);
            return(Task.Delay(0));
        }
Пример #12
0
 private Task Discord_SocketClosed(DiscordClient client, SocketCloseEventArgs e)
 {
     if (_tlm.MonitorRunning())
     {
         _tlm.StopMonitor();
     }
     return(Task.CompletedTask);
 }
Пример #13
0
 public override Task InternalDisconnectAsync(SocketCloseEventArgs e)
 {
     if (_socket.State != ws4net.WebSocketState.Closed)
     {
         _socket.Close();
     }
     return(Task.Delay(0));
 }
 /// <summary>
 /// Disconnects the WebSocket connection.
 /// </summary>
 /// <param name="e">Disconect event arguments.</param>
 /// <returns></returns>
 public override Task DisconnectAsync(SocketCloseEventArgs e)
 {
     if (_socket.IsAlive)
     {
         _socket.Close();
     }
     return(Task.Delay(0));
 }
Пример #15
0
        private async Task DiscordSocketClosed(SocketCloseEventArgs e)
        {
            Log(this, new LogEventArgs {
                Type    = LogType.Error,
                Message = $"SocketClosed triggered: {e.CloseCode} - {e.CloseMessage}"
            });

            await Task.Delay(0);
        }
Пример #16
0
        private Task SocketClosed(SocketCloseEventArgs e)
        {
            _logger.Warning("Shard #{Shard} disconnected ({CloseCode}: {CloseMessage})", e.Client.ShardId, e.CloseCode, e.CloseMessage);

            var info = TryGetShard(e.Client);

            info.DisconnectionCount++;
            info.Connected = false;
            ReportShardStatus();
            return(Task.CompletedTask);
        }
Пример #17
0
 private async Task OnDiscordDisconnected(SocketCloseEventArgs e)
 {
     await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() =>
     {
         if (ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar"))
         {
             var status = StatusBar.GetForCurrentView();
             status.ProgressIndicator.ProgressValue = NetworkHelper.IsNetworkConnected ? null : (double?)0;
             status.ProgressIndicator.Text          = NetworkHelper.IsNetworkConnected ? "Reconnecting..." : "Offline";
             await status.ProgressIndicator.ShowAsync();
         }
     });
 }
Пример #18
0
        private async Task VoiceWS_SocketClosed(SocketCloseEventArgs e)
        {
            this.Discord.DebugLogger.LogMessage(LogLevel.Debug, "VoiceNext", $"Voice socket closed ({e.CloseCode.ToString(CultureInfo.InvariantCulture)}, '{e.CloseMessage}')", DateTime.Now);
            this.Dispose();

            if (!this.IsDisposed)
            {
                this.VoiceWs = BaseWebSocketClient.Create();
                this.VoiceWs.OnDisconnect += this.VoiceWS_SocketClosed;
                this.VoiceWs.OnMessage    += this.VoiceWS_SocketMessage;
                this.VoiceWs.OnConnect    += this.VoiceWS_SocketOpened;
                await this.StartAsync();
            }
        }
Пример #19
0
        private async Task WebSocket_OnDisconnect(SocketCloseEventArgs e)
        {
            if (this.IsConnected && e.CloseCode != 1001 && e.CloseCode != -1)
            {
                this.Discord.Logger.LogWarning(LavalinkEvents.LavalinkConnectionClosed, "Connection broken ({0}, '{1}'), reconnecting", e.CloseCode, e.CloseMessage);
                this.WebSocket                  = this.Discord.Configuration.WebSocketClientFactory(this.Discord.Configuration.Proxy);
                this.WebSocket.Connected       += this.WebSocket_OnConnect;
                this.WebSocket.Disconnected    += this.WebSocket_OnDisconnect;
                this.WebSocket.ExceptionThrown += this.WebSocket_OnException;
                this.WebSocket.MessageReceived += this.WebSocket_OnMessage;

                this.WebSocket.AddDefaultHeader("Authorization", this.Configuration.Password);
                this.WebSocket.AddDefaultHeader("Num-Shards", this.Discord.ShardCount.ToString(CultureInfo.InvariantCulture));
                this.WebSocket.AddDefaultHeader("User-Id", this.Discord.CurrentUser.Id.ToString(CultureInfo.InvariantCulture));
                if (this.Configuration.ResumeKey != null)
                {
                    this.WebSocket.AddDefaultHeader("Resume-Key", this.Configuration.ResumeKey);
                }

                await this.WebSocket.ConnectAsync(new Uri(this.Configuration.SocketEndpoint.ToWebSocketString()));
            }
            else if (e.CloseCode != 1001 && e.CloseCode != -1)
            {
                this.Discord.Logger.LogInformation(LavalinkEvents.LavalinkConnectionClosed, "Connection closed ({0}, '{1}')", e.CloseCode, e.CloseMessage);
                this.NodeDisconnected?.Invoke(this);
                await this._disconnected.InvokeAsync(new NodeDisconnectedEventArgs(this)).ConfigureAwait(false);
            }
            else
            {
                Volatile.Write(ref this._isDisposed, true);
                this.Discord.Logger.LogWarning(LavalinkEvents.LavalinkConnectionClosed, "Lavalink died");
                foreach (var kvp in this._connectedGuilds)
                {
                    await kvp.Value.SendVoiceUpdateAsync().ConfigureAwait(false);

                    _ = this._connectedGuilds.TryRemove(kvp.Key, out _);
                }
                this.NodeDisconnected?.Invoke(this);
                await this._disconnected.InvokeAsync(new NodeDisconnectedEventArgs(this)).ConfigureAwait(false);
            }
        }
 private Task WebSocket_OnDisconnect(SocketCloseEventArgs e)
 {
     if (this.IsConnected && e.CloseCode != 1001 && e.CloseCode != -1)
     {
         this.Discord.DebugLogger.LogMessage(LogLevel.Warning, "Lavalink", "Connection broken; re-establishing...", DateTime.Now);
         this.WebSocket               = this.Discord.Configuration.WebSocketClientFactory(this.Discord.Configuration.Proxy);
         this.WebSocket.OnConnect    += this.WebSocket_OnConnect;
         this.WebSocket.OnDisconnect += this.WebSocket_OnDisconnect;
         this.WebSocket.OnError      += this.WebSocket_OnError;
         this.WebSocket.OnMessage    += this.WebSocket_OnMessage;
         return(this.WebSocket.ConnectAsync(new Uri($"ws://{this.Configuration.SocketEndpoint}/"), new Dictionary <string, string>()
         {
             ["Authorization"] = this.Configuration.Password,
             ["Num-Shards"] = this.Discord.ShardCount.ToString(CultureInfo.InvariantCulture),
             ["User-Id"] = this.Discord.CurrentUser.Id.ToString(CultureInfo.InvariantCulture)
         }));
     }
     else if (e.CloseCode != 1001 && e.CloseCode != -1)
     {
         this.Discord.DebugLogger.LogMessage(LogLevel.Info, "Lavalink", "Connection closed", DateTime.Now);
         if (this.NodeDisconnected != null)
         {
             this.NodeDisconnected(this);
         }
         return(this._disconnected.InvokeAsync(new NodeDisconnectedEventArgs(this)));
     }
     else
     {
         this.Discord.DebugLogger.LogMessage(LogLevel.Warning, "Lavalink", "Lavalink died", DateTime.Now);
         foreach (var kvp in this.ConnectedGuilds)
         {
             kvp.Value.SendVoiceUpdate();
         }
         if (this.NodeDisconnected != null)
         {
             this.NodeDisconnected(this);
         }
         return(this._disconnected.InvokeAsync(new NodeDisconnectedEventArgs(this)));
     }
 }
Пример #21
0
        /// <summary>
        /// Disconnects the WebSocket connection.
        /// </summary>
        /// <param name="e">Disconect event arguments.</param>
        /// <returns></returns>
        public override async Task DisconnectAsync(SocketCloseEventArgs e)
        {
            try
            {
                this.TokenSource.Cancel();
                this.TokenSource.Dispose();
            }
            catch
            { }

            if (this._closeRequested)
            {
                return;
            }
            this._closeRequested = true;

            try
            {
                // Wait for all items to be processed post-cancellation
                await this.SocketQueueManager.ConfigureAwait(false);
            }
            catch
            { } // if anything throws here we have a stuck close cycle without this

            try
            {
                var code = e != null ? (WebSocketCloseStatus)e.CloseCode : WebSocketCloseStatus.NormalClosure;
                var msg  = e?.CloseMessage ?? "";

                await this.Socket.CloseAsync(code, msg, CancellationToken.None).ConfigureAwait(false);

                await this.WsListener.ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                await this.OnDisconnectedAsync(new SocketCloseEventArgs(null) { CloseCode = -1, CloseMessage = $"{ex.GetType()}: {ex.Message}" }).ConfigureAwait(false);
            }
        }
Пример #22
0
        private async Task WebSocket_OnDisconnect(IWebSocketClient client, SocketCloseEventArgs e)
        {
            if (this.IsConnected && e.CloseCode != 1001 && e.CloseCode != -1)
            {
                this.Discord.Logger.LogWarning(LavalinkEvents.LavalinkConnectionClosed, "Connection broken ({0}, '{1}'), reconnecting", e.CloseCode, e.CloseMessage);
                await this._disconnected.InvokeAsync(this, new NodeDisconnectedEventArgs(this, false)).ConfigureAwait(false);

                if (this.Configuration.SocketAutoReconnect)
                {
                    await this.StartAsync().ConfigureAwait(false);
                }
            }
            else if (e.CloseCode != 1001 && e.CloseCode != -1)
            {
                this.Discord.Logger.LogInformation(LavalinkEvents.LavalinkConnectionClosed, "Connection closed ({0}, '{1}')", e.CloseCode, e.CloseMessage);
                this.NodeDisconnected?.Invoke(this);
                await this._disconnected.InvokeAsync(this, new NodeDisconnectedEventArgs(this, true)).ConfigureAwait(false);
            }
            else
            {
                Volatile.Write(ref this._isDisposed, true);
                this.Discord.Logger.LogWarning(LavalinkEvents.LavalinkConnectionClosed, "Lavalink died");
                foreach (var kvp in this._connectedGuilds)
                {
                    await kvp.Value.SendVoiceUpdateAsync().ConfigureAwait(false);

                    _ = this._connectedGuilds.TryRemove(kvp.Key, out _);
                }
                this.NodeDisconnected?.Invoke(this);
                await this._disconnected.InvokeAsync(this, new NodeDisconnectedEventArgs(this, false)).ConfigureAwait(false);

                if (this.Configuration.SocketAutoReconnect)
                {
                    await this.StartAsync().ConfigureAwait(false);
                }
            }
        }
Пример #23
0
 private Task Client_SocketClosed(SocketCloseEventArgs e)
 => this._socketClosed.InvokeAsync(e);
Пример #24
0
 public override Task <BaseWebSocketClient> OnDisconnectAsync(SocketCloseEventArgs e)
 {
     return(Task.FromResult <BaseWebSocketClient>(this));
 }
Пример #25
0
        private Task OnClientDisconnected(DiscordClient sender, SocketCloseEventArgs e)
        {
            _logger.LogInformation($"Bot disconected {e.CloseMessage}");

            return(Task.CompletedTask);
        }
Пример #26
0
 private async Task HandleTCPClose_RT(SocketCloseEventArgs args)
 {
     await Task.FromResult(true);
 }
Пример #27
0
        internal async Task ListenAsync()
        {
            await Task.Yield();

            var buff    = new byte[BUFFER_SIZE];
            var buffseg = new ArraySegment <byte>(buff);

            byte[] resultbuff             = null;
            WebSocketReceiveResult result = null;
            SocketCloseEventArgs   close  = null;

            var token = Token;

            try
            {
                while (!token.IsCancellationRequested && Socket.State == WebSocketState.Open)
                {
                    using (var ms = new MemoryStream())
                    {
                        do
                        {
                            result = await Socket.ReceiveAsync(buffseg, token).ConfigureAwait(false);

                            if (result.MessageType == WebSocketMessageType.Close)
                            {
                                var cc = result.CloseStatus != null ? (int)result.CloseStatus.Value : -1;
                                close = new SocketCloseEventArgs(null)
                                {
                                    CloseCode = cc, CloseMessage = result.CloseStatusDescription
                                };
                            }
                            else
                            {
                                ms.Write(buff, 0, result.Count);
                            }
                        }while (!result.EndOfMessage);

                        resultbuff = ms.ToArray();
                    }

                    if (close != null)
                    {
                        break;
                    }

                    var resultstr = "";
                    if (result.MessageType == WebSocketMessageType.Binary)
                    {
                        if (resultbuff[0] == 0x78)
                        {
                            await CompressedStream.WriteAsync(resultbuff, 2, resultbuff.Length - 2).ConfigureAwait(false);
                        }
                        else
                        {
                            await CompressedStream.WriteAsync(resultbuff, 0, resultbuff.Length).ConfigureAwait(false);
                        }

                        await CompressedStream.FlushAsync().ConfigureAwait(false);

                        CompressedStream.Position = 0;

                        // partial credit to FiniteReality
                        // overall idea is their
                        // I tuned the finer details
                        // -Emzi
                        var sfix = BitConverter.ToUInt16(resultbuff, resultbuff.Length - 2);
                        if (sfix != ZLIB_STREAM_SUFFIX)
                        {
                            using (var zlib = new DeflateStream(CompressedStream, CompressionMode.Decompress, true))
                            {
                                await zlib.CopyToAsync(DecompressedStream).ConfigureAwait(false);
                            }
                        }
                        else
                        {
                            await StreamDecompressor.CopyToAsync(DecompressedStream).ConfigureAwait(false);
                        }

                        resultbuff = DecompressedStream.ToArray();
                        DecompressedStream.Position = 0;
                        DecompressedStream.SetLength(0);
                        CompressedStream.Position = 0;
                        CompressedStream.SetLength(0);
                    }

                    resultstr = UTF8.GetString(resultbuff, 0, resultbuff.Length);
                    await CallOnMessageAsync(resultstr).ConfigureAwait(false);
                }
            }
            catch (Exception e)
            {
                close = new SocketCloseEventArgs(null)
                {
                    CloseCode = -1, CloseMessage = e.Message
                };
            }

            await DisconnectAsync(close).ConfigureAwait(false);
        }
Пример #28
0
 /// <summary>
 /// Set the Action to call when the connection has been terminated.
 /// </summary>
 /// <returns></returns>
 protected override Task OnDisconnectedAsync(SocketCloseEventArgs e)
 {
     _ = _on_disconnect.InvokeAsync(e).ConfigureAwait(false);
     return(Task.Delay(0));
 }
Пример #29
0
 internal void ConnectionCloseHandler(object sender, SocketCloseEventArgs args)
 {
     if (this.OnClose != null)
         this.OnClose(this, args);
 }
Пример #30
0
 /// <summary>
 /// Set the Action to call when the connection has been terminated.
 /// </summary>
 /// <returns></returns>
 protected override Task OnDisconnectedAsync(SocketCloseEventArgs e)
 {
     throw new PlatformNotSupportedException("Microsoft WebSocket client is not supported on this platform. You need to target .NETFX, .NET Standard 1.3, or provide a WebSocket implementation for this platform.");
 }
Пример #31
0
 private Task OnSocketClosed(SocketCloseEventArgs e)
 {
     SocketState = WebSocketState.Closed;
     return(Task.CompletedTask);
 }