public override async Task ReceiveAsync(WebSocket socket, WebSocketReceiveResult result, byte[] buffer)
        {
            var socketId = WebSocketConnectionManager.GetId(socket);
            var message  = await ParseBuffer <object>(result, buffer);

            switch (message.MessageType)
            {
            case MessageType.Invocation:
                var jsonStr          = JsonConvert.SerializeObject(message.Payload);
                var invocationObject = JsonConvert.DeserializeObject <Invocation>(jsonStr);
                var invocation       = _wsClients.Where(v => v.Id == socketId).FirstOrDefault()
                                       .Invocations.Where(v => v.Id == invocationObject.Id).FirstOrDefault();
                invocation.IsInvoked = invocationObject.IsInvoked;
                lock (invocation)
                {
                    Monitor.Pulse(invocation);
                }
                break;
            }
        }
        public override async Task OnConnected(WebSocket socket)
        {
            await base.OnConnected(socket);

            var socketId = WebSocketConnectionManager.GetId(socket);

            _wsClients.Add(new WsClient
            {
                Id = socketId
            });
            await SendMessageAsync(socketId, new Message <object>
            {
                MessageType = MessageType.ConnectionEvent,
                Payload     = new
                {
                    Id        = socketId,
                    Connected = true
                }
            });
        }