protected override void Dispose(bool disposing)
 {
     if (!_isDisposed)
     {
         _isDisposed = true;
         _deflate.Dispose();
         _inner.Dispose();
     }
     base.Dispose(disposing);
 }
Exemplo n.º 2
0
        private static async void HandleClient(object arg)
        {
            WebSocket client = (WebSocket)arg;

            while (true)
            {
                WebSocketMessageReadStream message = await client.ReadMessageAsync(CancellationToken.None);

                if (!client.IsConnected || message == null)
                {
                    Log.Print(LogType.Lobby, "A client disconnected");
                    client.Dispose();
                    return;
                }
                Log.Print(LogType.Debug, $"RECV {message.MessageType} {(message.MessageType == WebSocketMessageType.Text ? message.ReadText() : message.ReadBinary())}");
                message.Dispose();
            }
        }
Exemplo n.º 3
0
        public async void HandleConnection()
        {
            Log.Print(LogType.Debug, "Handling Connection");
            BindingFlags bindingFlags = BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static;

            while (true)
            {
                WebSocketMessageReadStream message = await Socket.ReadMessageAsync(CancellationToken.None);

                if (message == null)
                {
                    Log.Print(LogType.Debug, "Message is null");
                    Disconnect();
                    return;
                }

                if (message.MessageType == WebSocketMessageType.Text)
                {
                    var msgContent = string.Empty;
                    using (var sr = new StreamReader(message, Encoding.UTF8))
                        msgContent = await sr.ReadToEndAsync();
                    Log.Print(LogType.Debug, msgContent);
                }
                else if (message.MessageType == WebSocketMessageType.Binary)
                {
                    using (var ms = new MemoryStream())
                    {
                        await message.CopyToAsync(ms);

                        await ms.FlushAsync();

                        ms.Seek(0, SeekOrigin.Begin);
                        object requestData;

                        try
                        {
                            requestData = EvosSerializer.Instance.Deserialize(ms);
                        }
                        catch (Exception e)
                        {
                            Log.Print(LogType.Error, Convert.ToBase64String(ms.ToArray()));
                            Log.Print(LogType.Error, e.ToString());
                            continue;
                        }

                        Type requestType = requestData.GetType();
#if DEBUG
                        //Log data or hide it?
                        String packetDataToLog = (bool)requestType.GetField("LogData", bindingFlags).GetValue(null) ? JsonConvert.SerializeObject(requestData) :"{...}";

                        Log.Print(LogType.Network, $"Received {requestType.Name} : {packetDataToLog}");
#endif
                        // Handle Response
                        Type responseHandlerType = Type.GetType($"EvoS.LobbyServer.NetworkMessageHandlers.{requestType.Name}Handler");
                        if (responseHandlerType == null)
                        {
#if DEBUG
                            Log.Print(LogType.Warning, $"No Handler for {requestType.Name}");
#endif
                            continue;
                        }

                        object responseHandler = responseHandlerType.GetConstructor(Type.EmptyTypes).Invoke(new object[] { });
                        var    task            = (Task)responseHandlerType.GetMethod("OnMessage").Invoke(responseHandler, new[] { this, requestData });
                        await task.ConfigureAwait(false);

                        await task;
                    }
                }
                //Console.WriteLine($"RECV {message.MessageType} {(message.MessageType == WebSocketMessageType.Text ? message.ReadText() : message.ReadBinary())}");
                message.Dispose();
            }
        }