private RemotePlayContext SendInitControlMessages(Socket udpClient) { /******** Initial control message 1 ********/ byte[] controlMessage1Payload = HexUtil.Unhexlify("0064006400004823"); ushort initialControlMessage1PayloadSize = (ushort)(12 + controlMessage1Payload.Length); ControlMessage initialMessage1 = new ControlMessage(0, 0, 0, 0, 1, 0, initialControlMessage1PayloadSize, 0x4823, 0x19000); initialMessage1.UnParsedPayload = controlMessage1Payload; byte[] initialControlMessage1Data = GetByteArrayForControlMessage(initialMessage1); ControlResult initControlResult1 = SendControlDataAndWaitForAnswer(udpClient, initialControlMessage1Data, 1, "Send Init Control message 1"); if (!initControlResult1.WasSuccessful) { return(null); } ControlMessage initialAnswer1 = initControlResult1.ControlMessages[0]; /******** Initial control message 2 ********/ byte[] initialAnswer1Payload = initialAnswer1.UnParsedPayload; MemoryStream memoryBuffer = new MemoryStream(initialAnswer1Payload) { Position = 8 }; byte[] funcIncrBuffer = new byte[4]; memoryBuffer.Read(funcIncrBuffer, 0, funcIncrBuffer.Length); uint funcIncrValue = ByteUtil.ByteArrayToUInt(funcIncrBuffer); memoryBuffer.Position = 28; byte[] lastAnswerPart = new byte[memoryBuffer.Length - memoryBuffer.Position]; memoryBuffer.Read(lastAnswerPart, 0, lastAnswerPart.Length); byte[] funcIncr = ByteUtil.UIntToByteArray(initialAnswer1.FuncIncr); byte[] classValue = ByteUtil.UIntToByteArray(initialAnswer1.ClassValue); byte[] controlMessage2Payload = ByteUtil.ConcatenateArrays(funcIncr, classValue, funcIncr, lastAnswerPart); ushort initialControlMessage2PayloadSize = (ushort)(12 + controlMessage2Payload.Length); ControlMessage controlMessage2 = new ControlMessage(0, initialAnswer1.FuncIncr, 0, 0, 10, 0, initialControlMessage2PayloadSize, funcIncrValue, initialAnswer1.ReceiverId); controlMessage2.UnParsedPayload = controlMessage2Payload; byte[] initialControlMessage2Data = GetByteArrayForControlMessage(controlMessage2); ControlResult initControlResult2 = SendControlDataAndWaitForAnswer(udpClient, initialControlMessage2Data, 1, "Send Init Control message 2"); if (!initControlResult2.WasSuccessful) { return(null); } RemotePlayContext remotePlayContext = new RemotePlayContext() { ReceiverId = initialAnswer1.FuncIncr, FuncIncr = initialMessage1.FuncIncr }; return(remotePlayContext); }