private void ParseMessage(UdpReceiveResult result, SpideyTcpServer tcpServer, IProgress <ConnectedPlayerInformation> onLocationUpdate, IProgress <ConnectedPlayerUdpEndPoint> onReceiveUdpInfo)
        {
            if (result.Buffer.Length < SpideyUdpMessage.MESSAGE_HEADER_SIZE)
            {
                return;
            }

            var  message     = result.Buffer;
            var  messageType = message[0];
            byte playerNumber;

            switch (messageType)
            {
            case SpideyUdpMessage.SPIN_A_WEB:
                if (!SpideyUdpMessage.ParseSpinAWebMessage(message, out playerNumber))
                {
                    break;
                }

                var added = tcpServer.AddUdpClientInformation(playerNumber, result.RemoteEndPoint);
                if (added)
                {
                    ++_playerCount;
                    onReceiveUdpInfo.Report(new ConnectedPlayerUdpEndPoint(playerNumber, new IPEndPoint(result.RemoteEndPoint.Address, result.RemoteEndPoint.Port)));
                }
                break;

            case SpideyUdpMessage.SPIDERMAN:
                if (!SpideyUdpMessage.ParseSpidermanMessage(message, out playerNumber, out byte[] spideyData, out byte levelData))
        private void ParseMessage(UdpReceiveResult result, IProgress <ConnectedPlayerInformation> onLocationUpdate)
        {
            if (result.Buffer.Length < SpideyUdpMessage.MESSAGE_HEADER_SIZE)
            {
                return;
            }

            var  message     = result.Buffer;
            var  messageType = message[0];
            byte playerNumber;

            switch (messageType)
            {
            case SpideyUdpMessage.SPIN_A_WEB:
                // Not supported
                break;

            case SpideyUdpMessage.SPIDERMAN:
                if (!SpideyUdpMessage.ParseSpidermanMessage(message, out playerNumber, out byte[] spideyData, out byte levelData))