Ejemplo n.º 1
0
 private void Socket_OnMessageSend(object sender, SocketMessageEventArgs e)
 {
     //Console.ForegroundColor = ConsoleColor.Yellow;
     //Console.Write($"[{DateTime.Now}]");
     //Console.ForegroundColor = ConsoleColor.Cyan;
     //Console.WriteLine(e.Content);
 }
Ejemplo n.º 2
0
        private void OnMessageReceived(object sender, SocketMessageEventArgs socketMessageEventArgs)
        {
            var socketClient = (SocketClient)sender;

            socketClient.MessageReceived -= OnMessageReceived;  // TODO: validate the protocol confirmation
            Add(socketClient);
        }
Ejemplo n.º 3
0
        private async Task VoiceWS_SocketMessage(IWebSocketClient client, SocketMessageEventArgs e)
        {
            if (!(e is SocketTextMessageEventArgs et))
            {
                this.Discord.Logger.LogCritical(VoiceNextEvents.VoiceGatewayError, "Discord Voice Gateway sent binary data - unable to process");
                return;
            }

            if (this.Discord.Configuration.MinimumLogLevel == LogLevel.Trace)
            {
                var cs = new MemoryStream();

                await et.Message.CopyToAsync(cs).ConfigureAwait(false);

                cs.Seek(0, SeekOrigin.Begin);
                et.Message.Seek(0, SeekOrigin.Begin);

                using var sr = new StreamReader(cs, Utilities.UTF8);

                this.Discord.Logger.LogTrace(VoiceNextEvents.VoiceWsRx, await sr.ReadToEndAsync().ConfigureAwait(false));
            }

            var j = await DiscordJson.LoadJObjectAsync(et.Message).ConfigureAwait(false);

            await this.HandleDispatch(j).ConfigureAwait(false);
        }
Ejemplo n.º 4
0
 private void ServerDataReceivedHandler(object sender, SocketMessageEventArgs e)
 {
     this.Invoke(new Action(() =>
     {
         var msg = System.Text.Encoding.ASCII.GetString(e.Buffer, 0, e.Size);
         var rm  = new ReceivedMessageEntry(msg, e.EndPoint.ToString());
         RecordMessage(rm);
     }));
 }
Ejemplo n.º 5
0
        private void OnMessageReceived(object sender, SocketMessageEventArgs e)
        {
            if (txtContent.InvokeRequired)
            {
                txtContent.Invoke(new EventHandler <SocketMessageEventArgs>(OnMessageReceived), sender, e);
                return;
            }

            txtMsgReceived.Text = e.Content;
        }
Ejemplo n.º 6
0
        private Task VoiceWS_SocketMessage(SocketMessageEventArgs e)
        {
            if (!(e is SocketTextMessageEventArgs et))
            {
                this.Discord.DebugLogger.LogMessage(LogLevel.Critical, "VoiceNext", "Discord Voice Gateway spewed out binary gibberish!", DateTime.Now);
                return(Task.CompletedTask);
            }

            return(this.HandleDispatch(JObject.Parse(et.Message)));
        }
Ejemplo n.º 7
0
        private async void StartListen()
        {
            try
            {
                while (_ws != null && _ws.State == WebSocketState.Open)
                {
                    byte[] Sharedbuffer = new byte[ReceiveChunkSize];


                    using (var ms = new MemoryStream()) // auto release memory
                    {
                        WebSocketReceiveResult res;
                        do
                        {
                            res = await _ws.ReceiveAsync(Sharedbuffer, CancellationToken.None);

                            if (res.MessageType == WebSocketMessageType.Close)
                            {
                                CallOnDisconnected(null);
                                return;
                            }
                            ms.Write(Sharedbuffer, 0, res.Count);
                            // ms.Write(segment.Array, segment.Offset, res.Count);
                        }while (!res.EndOfMessage);

                        ms.Seek(0, SeekOrigin.Begin);

                        // Return data
                        byte[] returnBuffer = new byte[ms.Length];
                        Buffer.BlockCopy(ms.ToArray(), 0, returnBuffer, 0, (int)ms.Length);

                        string msg = Encoding.UTF8.GetString(returnBuffer);

                        // Fires the return packet in a new thread
                        ThreadPool.QueueUserWorkItem(state =>
                        {
                            SocketMessageEventArgs args = new SocketMessageEventArgs
                            {
                                Message = msg
                            };
                            MessageReceived?.Invoke(this, args);
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
                CallOnDisconnected(ex.Message);
            }
            finally
            {
                _ws.Dispose();
            }
        }
Ejemplo n.º 8
0
        private Task VoiceWS_SocketMessage(IWebSocketClient client, SocketMessageEventArgs e)
        {
            if (!(e is SocketTextMessageEventArgs et))
            {
                this.Discord.Logger.LogCritical(VoiceNextEvents.VoiceGatewayError, "Discord Voice Gateway sent binary data - unable to process");
                return(Task.CompletedTask);
            }

            this.Discord.Logger.LogTrace(VoiceNextEvents.VoiceWsRx, et.Message);
            return(this.HandleDispatch(JObject.Parse(et.Message)));
        }
Ejemplo n.º 9
0
        private async Task InternalSocketMessageReceived(GatewayConnection conn, SocketMessageEventArgs e)
        {
            if (e.Payload.Opcode == 10)
            {
                _heartbeatInterval = JObject.FromObject(e.Payload.Data).Value <int>("heartbeat_interval");
                _logger.LogTrace(LogEvent.InternalMessageReceived, "heartbeat_interval = {}", _heartbeatInterval);

                new Thread(new ThreadStart(HeartbeatLoop)).Start();
            }

            if (e.Payload.Opcode == 1)
            {
                _lastSeqNum = (int)e.Payload.Data;
                await SendHeartbeat();
            }
        }
Ejemplo n.º 10
0
 private void ListenForMessage()
 {
     using (var listener = CreateListener())
     {
         while (true)
         {
             var handler = listener.Accept();
             FetchMessage(handler, message =>
             {
                 var args = new SocketMessageEventArgs(message);
                 OnMessageReceived(args);
                 PushMessage(handler, args.RespondedMessage);
                 handler.Close();
             });
         }
     }
 }
Ejemplo n.º 11
0
        private void OnListenerAccepted(IAsyncResult ar)
        {
            _resetEvent.Set();
            var listener = ar.AsyncState as Socket;

            if (listener == null)
            {
                return;
            }

            var handler = listener.EndAccept(ar);

            BeginFetchMessage(handler, message =>
            {
                var args = new SocketMessageEventArgs(message);
                OnMessageReceived(args);
                BeginPushMessage(handler, args.RespondedMessage);
                handler.Close();
            });
        }
Ejemplo n.º 12
0
        private void ServerDataReceivedHandler(object sender, SocketMessageEventArgs e)
        {
            var msg = MyHelper.BinaryDeserializeObject <MessageConvention>(e.Buffer);

            if (msg.MsgType == MessageType.OccupySeat)
            {
                _viewSeat.UserSitdownAction(msg.Seat.SeatNumber, msg.Seat.UserName);
            }
            else if (msg.MsgType == MessageType.QueryOccupiedSeats)
            {
                var os = msg.OccupiedSeats;
                foreach (var item in os)
                {
                    _viewSeat.UserSitdownAction(item.SeatNumber, item.UserName);
                }
            }
            else if (msg.MsgType == MessageType.UserLeave)
            {
                _viewSeat.UserStandupAction(msg.Seat.SeatNumber, msg.Seat.UserName);
            }
        }
Ejemplo n.º 13
0
        public async Task HandleClientCommand(object sender, SocketMessageEventArgs model)
        {
            var response = new ClientResponse();

            try
            {
                switch (model.Message.ActionType)
                {
                case ClientMessageType.Ping:
                    response.Type = ClientResponseType.Pong;
                    break;

                case ClientMessageType.GetLSCState:
                    response = new ClientResponse <LightStripStatus>()
                    {
                        Success = true,
                        Message = string.Empty,
                        Type    = ClientResponseType.LSCData,
                        Data    = new LightStripStatus()
                        {
                            Frame             = _lighter.Frame,
                            BoundIp           = _lighter.BoundIp,
                            BoundPort         = _lighter.BoundPort,
                            NetworkInterfaces = NetworkAddresses.GetNetworkAddresses()
                        }
                    };
                    await SendResponse <LightStripStatus>(model.ClientId, response);

                    break;
                }
            }
            catch (Exception ex)
            {
                _ = Task.Run(() => { _logger?.WriteLog(ex.ToString()); });
                response.Success = false;
                response.Message = "Exception";
                response.Type    = ClientResponseType.None;
                await SendResponse(model.ClientId, response);
            }
        }
Ejemplo n.º 14
0
        internal void OnMessage(object sender, SocketMessageEventArgs e)
        {
            _logger.LogTrace($"Received: {e.Data}");

            var response = JsonConvert.DeserializeObject <Message>(e.Data, SerializationSettings.Default);

            // We may get multiple responses for register_0 - we can safely ignore this one!
            if (response.Id == "register_0" && response.Payload.Value <string>("pairingType") == "PROMPT")
            {
                return;
            }

            if (_completionSources.TryRemove(response.Id, out var taskCompletion))
            {
                if (response.Type == "error")
                {
                    taskCompletion.TrySetException(new CommandException(response.Error));
                }
                else
                {
                    taskCompletion.TrySetResult(response);
                }
            }
        }
Ejemplo n.º 15
0
        private void Server_MessageReceived(SocketClient socket, SocketMessageEventArgs args)
        {
            int socketindex = clients.IndexOf(socket);

            foreach (var msg in args.Messages)
            {
                if (msg.MsgType == MessageType.Data)
                {
                    switch ((lib.DataType)msg.DataMessage.Data[0])
                    {
                    case DataType.SetName:
                        byte   tindex = msg.DataMessage.Data[1];
                        string name   = Encoding.UTF8.GetString(msg.DataMessage.Data, 2, (int)msg.DataMessage.Length - 2);
                        map.SnakeNames[tindex] = name;
                        server.SendToAllAsync(msg.DataMessage.Data);
                        Dispatcher.BeginInvoke(new Action(() =>
                        {
                        }));
                        break;

                    case DataType.UseInventory:
                        byte    toplayer      = msg.DataMessage.Data[2];
                        MapType inventoryType = (MapType)msg.DataMessage.Data[1];

                        if (map.Snakes[socketindex].Inventory.ContainsKey(inventoryType))
                        {
                            map.Snakes[socketindex].Inventory[inventoryType]--;
                            socket.SendAsync(new byte[] { (byte)DataType.AddInventory, (byte)inventoryType, map.Snakes[socketindex].Inventory[inventoryType] }).Wait();
                            if (map.Snakes[socketindex].Inventory[inventoryType] == 0)
                            {
                                map.Snakes[socketindex].Inventory.Remove(inventoryType);
                            }

                            clients[toplayer].SendAsync(new byte[] { (byte)DataType.UseInventory, (byte)inventoryType, 1 }).Wait();

                            if (socketindex == toplayer)
                            {
                                server.SendToAllAsync(new ServerNotification()
                                {
                                    Index         = toplayer,
                                    PlayerMessage = string.Format("你对自己使用了 {0}", fruitString[inventoryType]),
                                    ElseMessage   = string.Format("{0} 对 他自己 使用了 {1}", map.SnakeNames[toplayer], fruitString[inventoryType])
                                }, 1);
                            }
                            else
                            {
                                server.SendToAllAsync(new ServerNotification()
                                {
                                    Index         = toplayer,
                                    PlayerMessage = string.Format("{0} 对 你 使用了 {1}", map.SnakeNames[socketindex], fruitString[inventoryType]),
                                    ElseMessage   = string.Format("{0} 对 {1} 使用了 {2}", map.SnakeNames[socketindex], map.SnakeNames[toplayer], fruitString[inventoryType])
                                }, 1);
                            }

                            switch (inventoryType)
                            {
                            case MapType.BlindFruit:
                                break;

                            case MapType.RushFruit:
                                map.ChangeSnakeSpeed(toplayer, 1);
                                break;

                            case MapType.SlowFruit:
                                map.ChangeSnakeSpeed(toplayer, -1);
                                break;

                            case MapType.HardFruit:
                                map.SetSnakeHard(toplayer);
                                break;
                            }
                        }
                        break;

                    case lib.DataType.PingTest:
                        socket.SendAsync(msg.DataMessage.Data).Wait();
                        break;

                    case lib.DataType.SnakeData:
                        break;

                    case lib.DataType.ChangeDirection:
                        short x = (short)(msg.DataMessage.Data[1] - 1);
                        short y = (short)(msg.DataMessage.Data[2] - 1);
                        map.Snakes[socketindex].Direction = new Coord(x, y);
                        break;

                    case lib.DataType.Prepared:
                        playerStatus[socketindex] = PlayerStatus.Prepared;
                        this.Dispatcher.BeginInvoke(new Action <int>((num) =>
                        {
                            (grid_Connection.Children[num * 3 + 1] as TextBlock).Text = "准备";
                        }), System.Windows.Threading.DispatcherPriority.Normal, socketindex).Wait();

                        byte[] buf = new byte[2] {
                            (byte)lib.DataType.PlayerStatus, (byte)map.SnakeCount
                        }
                        .Concat(from elem in playerStatus
                                select(byte) elem)
                        .ToArray();
                        server.SendToAllAsync(buf).Wait();

                        bool prepared = isGameStarted == false;
                        for (int i = 0; i < map.SnakeCount; i++)
                        {
                            prepared = prepared && playerStatus[i] == PlayerStatus.Prepared;
                        }
                        if (prepared == true)
                        {
                            this.Dispatcher.BeginInvoke(new Action(() =>
                            {
                                GameStart();
                            })).Wait();
                        }
                        break;
                    }
                }
            }
        }
        private async Task WebSocket_OnMessage(SocketMessageEventArgs e)
        {
            //this.Discord.DebugLogger.LogMessage(LogLevel.Debug, "Lavalink", e.Message, DateTime.Now);

            var   json     = e.Message;
            var   jsonData = JObject.Parse(json);
            ulong guildId  = 0;

            switch (jsonData["op"].ToString())
            {
            case "playerUpdate":
                guildId = (ulong)jsonData["guildId"];
                var state = jsonData["state"].ToObject <LavalinkState>();
                if (this.ConnectedGuilds.TryGetValue(guildId, out var lvl))
                {
                    await lvl.InternalUpdatePlayerStateAsync(state).ConfigureAwait(false);
                }
                break;

            case "stats":
                var statsRaw = jsonData.ToObject <LavalinkStats>();
                this.Statistics.Update(statsRaw);
                break;

            case "event":
                var evtype = jsonData["type"].ToObject <EventType>();
                switch (evtype)
                {
                case EventType.TrackEndEvent:
                    guildId = (ulong)jsonData["guildId"];
                    TrackEndReason reason = TrackEndReason.Cleanup;
                    switch (jsonData["reason"].ToString())
                    {
                    case "FINISHED":
                        reason = TrackEndReason.Finished;
                        break;

                    case "LOAD_FAILED":
                        reason = TrackEndReason.LoadFailed;
                        break;

                    case "STOPPED":
                        reason = TrackEndReason.Stopped;
                        break;

                    case "REPLACED":
                        reason = TrackEndReason.Replaced;
                        break;

                    case "CLEANUP":
                        reason = TrackEndReason.Cleanup;
                        break;
                    }
                    if (this.ConnectedGuilds.TryGetValue(guildId, out var lvl_evtf))
                    {
                        await lvl_evtf.InternalPlaybackFinishedAsync(new TrackFinishData { Track = jsonData["track"].ToString(), Reason = reason }).ConfigureAwait(false);
                    }
                    break;

                case EventType.TrackStuckEvent:
                    if (this.ConnectedGuilds.TryGetValue(guildId, out var lvl_evts))
                    {
                        await lvl_evts.InternalTrackStuckAsync(new TrackStuckData { Track = jsonData["track"].ToString(), Threshold = (long)jsonData["thresholdMs"] }).ConfigureAwait(false);
                    }
                    break;

                case EventType.TrackExceptionEvent:
                    if (this.ConnectedGuilds.TryGetValue(guildId, out var lvl_evte))
                    {
                        await lvl_evte.InternalTrackExceptionAsync(new TrackExceptionData { Track = jsonData["track"].ToString(), Error = jsonData["error"].ToString() }).ConfigureAwait(false);
                    }
                    break;
                }
                break;
            }
        }
Ejemplo n.º 17
0
 private static void Sender_MessageReceived(object sender, SocketMessageEventArgs e)
 {
     Console.WriteLine($"Respond: {e.ReceivedMessage}");
 }
Ejemplo n.º 18
0
 private void Sender_MessageReceived(object sender, SocketMessageEventArgs e)
 {
     txtSub.Text = e.ReceivedMessage;
 }
Ejemplo n.º 19
0
 private static void Listener_MessageReceived(object sender, SocketMessageEventArgs e)
 {
     Console.WriteLine($"Message received: {e.ReceivedMessage}");
     e.RespondedMessage = "OK";
     AnnouceListening();
 }
Ejemplo n.º 20
0
 private Task VoiceWS_SocketMessage(SocketMessageEventArgs e)
 => this.HandleDispatch(JObject.Parse(e.Message));
Ejemplo n.º 21
0
 private void OnReceivedMessage(SocketMessageEventArgs eventArgs) => this.ReceivedMessage?.Invoke(this, eventArgs);
Ejemplo n.º 22
0
 private void Listener_MessageReceived(object sender, SocketMessageEventArgs e)
 {
     txtMain.Text       = e.ReceivedMessage;
     e.RespondedMessage = GetHash(e.ReceivedMessage);
 }
Ejemplo n.º 23
0
        public void OnSocketMessage(object source, SocketMessageEventArgs e)
        {
            using (Stream streamXml = new MemoryStream(e.raw))
            {
                XmlReader reader = XmlReader.Create(streamXml, settings);

                try
                {
                    reader.Read();
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        switch (reader.Name)
                        {
                        case "mem":
                            ReadMemXml(reader.ReadSubtree());
                            break;

                        case "map":
                            ReadMapXml(reader.ReadSubtree());
                            break;

                        case "player":
                            ReadPlayerXml(reader.ReadSubtree());
                            break;

                        case "proc":
                            ReadProcXml(reader.ReadSubtree());
                            break;

                        case "winner":
                            ReadWinnerXml(reader.ReadSubtree());
                            break;

                        case "aff":
                            ReadAffXml(reader.ReadSubtree());
                            break;

                        case "live":
                            ReadLiveXml(reader.ReadSubtree());
                            break;

                        case "cycle":
                            ReadCycleXml(reader.ReadSubtree());
                            break;

                        case "end":
                            ReadEndXml(reader.ReadSubtree());
                            break;

                        case "dead":
                            ReadDeadXml(reader.ReadSubtree());
                            break;

                        default:
                            Logger.Log.WriteLine("unknow element {0}", e.message);
                            break;
                        }
                    }
                }
                catch (XmlException xe)
                {
                    Logger.Log.WriteLine("{0}({1})", e.message, e.message.Substring(xe.LinePosition, e.message.Length - xe.LinePosition));
                    throw new Exception(xe.Message);
                }
                reader.Close();
            }
        }
Ejemplo n.º 24
0
        private async Task WebSocket_OnMessage(SocketMessageEventArgs e)
        {
            if (!(e is SocketTextMessageEventArgs et))
            {
                this.Discord.DebugLogger.LogMessage(LogLevel.Critical, "Lavalink", "Lavalink spewed out binary gibberish!", DateTime.Now);
                return;
            }

            var json     = et.Message;
            var jsonData = JObject.Parse(json);

            switch (jsonData["op"].ToString())
            {
            case "playerUpdate":
                var gid   = (ulong)jsonData["guildId"];
                var state = jsonData["state"].ToObject <LavalinkState>();
                if (this.ConnectedGuilds.TryGetValue(gid, out var lvl))
                {
                    await lvl.InternalUpdatePlayerStateAsync(state).ConfigureAwait(false);
                }
                break;

            case "stats":
                var statsRaw = jsonData.ToObject <LavalinkStats>();
                this.Statistics.Update(statsRaw);
                await this._statsReceived.InvokeAsync(new StatisticsReceivedEventArgs(this.Statistics)).ConfigureAwait(false);

                break;

            case "event":
                var evtype  = jsonData["type"].ToObject <EventType>();
                var guildId = (ulong)jsonData["guildId"];
                switch (evtype)
                {
                case EventType.TrackStartEvent:
                    if (this.ConnectedGuilds.TryGetValue(guildId, out var lvl_evtst))
                    {
                        await lvl_evtst.InternalPlaybackStartedAsync(jsonData["track"].ToString()).ConfigureAwait(false);
                    }
                    break;

                case EventType.TrackEndEvent:
                    TrackEndReason reason = TrackEndReason.Cleanup;
                    switch (jsonData["reason"].ToString())
                    {
                    case "FINISHED":
                        reason = TrackEndReason.Finished;
                        break;

                    case "LOAD_FAILED":
                        reason = TrackEndReason.LoadFailed;
                        break;

                    case "STOPPED":
                        reason = TrackEndReason.Stopped;
                        break;

                    case "REPLACED":
                        reason = TrackEndReason.Replaced;
                        break;

                    case "CLEANUP":
                        reason = TrackEndReason.Cleanup;
                        break;
                    }
                    if (this.ConnectedGuilds.TryGetValue(guildId, out var lvl_evtf))
                    {
                        await lvl_evtf.InternalPlaybackFinishedAsync(new TrackFinishData { Track = jsonData["track"].ToString(), Reason = reason }).ConfigureAwait(false);
                    }
                    break;

                case EventType.TrackStuckEvent:
                    if (this.ConnectedGuilds.TryGetValue(guildId, out var lvl_evts))
                    {
                        await lvl_evts.InternalTrackStuckAsync(new TrackStuckData { Track = jsonData["track"].ToString(), Threshold = (long)jsonData["thresholdMs"] }).ConfigureAwait(false);
                    }
                    break;

                case EventType.TrackExceptionEvent:
                    if (this.ConnectedGuilds.TryGetValue(guildId, out var lvl_evte))
                    {
                        await lvl_evte.InternalTrackExceptionAsync(new TrackExceptionData { Track = jsonData["track"].ToString(), Error = jsonData["error"].ToString() }).ConfigureAwait(false);
                    }
                    break;

                case EventType.WebSocketClosedEvent:
                    if (this.ConnectedGuilds.TryGetValue(guildId, out var lvl_ewsce))
                    {
                        var code = jsonData["code"].ToObject <int>();

                        if (code == 4006 || code == 4009 || code == 4014)
                        {
                            this.ConnectedGuilds.TryRemove(guildId, out _);
                        }

                        await lvl_ewsce.InternalWebSocketClosedAsync(new WebSocketCloseEventArgs(code, jsonData["reason"].ToString(), jsonData["byRemote"].ToObject <bool>())).ConfigureAwait(false);
                    }
                    break;
                }
                break;
            }
        }
Ejemplo n.º 25
0
        private async Task WebSocket_OnMessage(IWebSocketClient client, SocketMessageEventArgs e)
        {
            if (!(e is SocketTextMessageEventArgs et))
            {
                this.Discord.Logger.LogCritical(LavalinkEvents.LavalinkConnectionError, "Lavalink sent binary data - unable to process");
                return;
            }

            this.Discord.Logger.LogTrace(LavalinkEvents.LavalinkWsRx, et.Message);

            var json     = et.Message;
            var jsonData = JObject.Parse(json);

            switch (jsonData["op"].ToString())
            {
            case "playerUpdate":
                var gid   = (ulong)jsonData["guildId"];
                var state = jsonData["state"].ToObject <LavalinkState>();
                if (this._connectedGuilds.TryGetValue(gid, out var lvl))
                {
                    await lvl.InternalUpdatePlayerStateAsync(state).ConfigureAwait(false);
                }
                break;

            case "stats":
                var statsRaw = jsonData.ToObject <LavalinkStats>();
                this.Statistics.Update(statsRaw);
                await this._statsReceived.InvokeAsync(this, new StatisticsReceivedEventArgs(this.Statistics)).ConfigureAwait(false);

                break;

            case "event":
                var evtype  = jsonData["type"].ToObject <EventType>();
                var guildId = (ulong)jsonData["guildId"];
                switch (evtype)
                {
                case EventType.TrackStartEvent:
                    if (this._connectedGuilds.TryGetValue(guildId, out var lvl_evtst))
                    {
                        await lvl_evtst.InternalPlaybackStartedAsync(jsonData["track"].ToString()).ConfigureAwait(false);
                    }
                    break;

                case EventType.TrackEndEvent:
                    TrackEndReason reason = TrackEndReason.Cleanup;
                    switch (jsonData["reason"].ToString())
                    {
                    case "FINISHED":
                        reason = TrackEndReason.Finished;
                        break;

                    case "LOAD_FAILED":
                        reason = TrackEndReason.LoadFailed;
                        break;

                    case "STOPPED":
                        reason = TrackEndReason.Stopped;
                        break;

                    case "REPLACED":
                        reason = TrackEndReason.Replaced;
                        break;

                    case "CLEANUP":
                        reason = TrackEndReason.Cleanup;
                        break;
                    }
                    if (this._connectedGuilds.TryGetValue(guildId, out var lvl_evtf))
                    {
                        await lvl_evtf.InternalPlaybackFinishedAsync(new TrackFinishData { Track = jsonData["track"].ToString(), Reason = reason }).ConfigureAwait(false);
                    }
                    break;

                case EventType.TrackStuckEvent:
                    if (this._connectedGuilds.TryGetValue(guildId, out var lvl_evts))
                    {
                        await lvl_evts.InternalTrackStuckAsync(new TrackStuckData { Track = jsonData["track"].ToString(), Threshold = (long)jsonData["thresholdMs"] }).ConfigureAwait(false);
                    }
                    break;

                case EventType.TrackExceptionEvent:
                    if (this._connectedGuilds.TryGetValue(guildId, out var lvl_evte))
                    {
                        await lvl_evte.InternalTrackExceptionAsync(new TrackExceptionData { Track = jsonData["track"].ToString(), Error = jsonData["error"].ToString() }).ConfigureAwait(false);
                    }
                    break;

                case EventType.WebSocketClosedEvent:
                    if (this._connectedGuilds.TryGetValue(guildId, out var lvl_ewsce))
                    {
                        lvl_ewsce.VoiceWsDisconnectTcs.SetResult(true);
                        await lvl_ewsce.InternalWebSocketClosedAsync(new WebSocketCloseEventArgs(jsonData["code"].ToObject <int>(), jsonData["reason"].ToString(), jsonData["byRemote"].ToObject <bool>())).ConfigureAwait(false);
                    }
                    break;
                }
                break;
            }
        }
Ejemplo n.º 26
0
 private async Task VoiceWS_SocketMessage(SocketMessageEventArgs e)
 {
     await this.HandleDispatch(JObject.Parse(e.Message));
 }
Ejemplo n.º 27
0
 /// <summary>
 /// Method hooked to the SocketClients MessageReceived Event
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="eventArgs">SocketMessageEventArgs contains the received json message</param>
 private async void OnMessageReceived(object sender, SocketMessageEventArgs eventArgs)
 {
     await this.HandleGatewayPayload(eventArgs.Payload);
 }
Ejemplo n.º 28
0
        public async Task HandleClientCommand(object sender, SocketMessageEventArgs model)
        {
            var response = new ClientResponse();

            try
            {
                switch (model.Message.ActionType)
                {
                case ClientMessageType.Ping:
                    response.Type = ClientResponseType.Pong;
                    break;

                case ClientMessageType.StartReader:
                    await _core.StartScreenReading();

                    break;

                case ClientMessageType.StopReader:
                    await _core.StopScreenReading();

                    break;

                case ClientMessageType.GetSAState:
                    response = new ClientResponse <ScreenAmbienceStatus>()
                    {
                        Success = true,
                        Message = string.Empty,
                        Type    = ClientResponseType.SAData,
                        Data    = new ScreenAmbienceStatus()
                        {
                            IsStarted        = _screen.IsRunning,
                            Frame            = _screen.Frame,
                            AverageDeltaTime = _screen.AverageDt,
                            IsHueConnected   = _hueCore.IsConnectedToBridge,
                            UsingHue         = _config.Model.hueSettings.useHue,
                            UsingRgb         = _config.Model.rgbDeviceSettings.useKeyboards || _config.Model.rgbDeviceSettings.useMice || _config.Model.rgbDeviceSettings.useMotherboard,
                            UsingLightStrip  = _config.Model.lightStripSettings.useLightStrip,
                            ScreenInfo       = new ScreenInfo()
                            {
                                Id         = _screen.ScreenInfo.Source,
                                RealHeight = _screen.ScreenInfo.RealHeight,
                                RealWidth  = _screen.ScreenInfo.RealWidth,
                                Height     = _screen.ScreenInfo.Height,
                                Width      = _screen.ScreenInfo.Width,
                                Rate       = _screen.ScreenInfo.Rate
                            }
                        }
                    };
                    await SendResponse <ScreenAmbienceStatus>(model.ClientId, response);

                    break;
                }
            }
            catch (Exception ex)
            {
                _ = Task.Run(() => { _logger?.WriteLog(ex.ToString()); });
                response.Success = false;
                response.Message = "Exception";
                response.Type    = ClientResponseType.None;
                await SendResponse(model.ClientId, response);
            }
        }