public override async Task <string> HandleMessage(WebSocketConnection connection, BinaryReader reader)
        {
            if (!connection.pingRateLimiter.TryTakePoints(1))
            {
                connection.SendMessage(new ErrorMessageSender(ErrorMessageSender.PING_RATE_LIMIT));
                return(string.Empty);
            }

            await base.HandleMessage(connection, reader);

            int dataSize = reader.ReadInt32();

            //Remove overhead of 1 short for the ping count for batching.
            if (!connection.pingByteRateLimiter.TryTakePoints(dataSize - sizeof(short)))
            {
                connection.SendMessage(new ErrorMessageSender(ErrorMessageSender.PING_BYTE_RATE_LIMIT));
                return(string.Empty);
            }

            byte[] data = new byte[dataSize];
            reader.Read(data);

            PingMessageSender sender = new PingMessageSender(data, connection.playerID);

            PubSubManager.SendMessage(connection.playerID, sender);

            return(string.Empty);
        }
        public override async Task <string> HandleMessage(WebSocketConnection connection, BinaryReader reader)
        {
            ChannelAvatarUpdateMessageSender sender = new ChannelAvatarUpdateMessageSender(connection.playerID);

            PubSubManager.SendMessage(connection.playerID, sender);

            return(string.Empty);
        }