async Task ReceiveGameBroadcastAsync(UdpClient udpClient) { // only proceed if there is available data in network buffer, or otherwise Receive() will block // average time for UdpClient.Available : 10 us UdpReceiveResult udpReceiveResult = await udpClient.ReceiveAsync(); using (PooledNetworkReader networkReader = NetworkReaderPool.GetReader(udpReceiveResult.Buffer)) { if (networkReader.ReadLong() != secretHandshake) { return; } Response response = networkReader.Read <Response>(); ProcessResponse(response, udpReceiveResult.RemoteEndPoint); } }
async Task ReceiveRequestAsync(UdpClient udpClient) { // only proceed if there is available data in network buffer, or otherwise Receive() will block // average time for UdpClient.Available : 10 us UdpReceiveResult udpReceiveResult = await udpClient.ReceiveAsync(); using (PooledNetworkReader networkReader = NetworkReaderPool.GetReader(udpReceiveResult.Buffer)) { long handshake = networkReader.ReadLong(); if (handshake != secretHandshake) { // message is not for us throw new ProtocolViolationException("Invalid handshake"); } Request request = networkReader.Read <Request>(); ProcessClientRequest(request, udpReceiveResult.RemoteEndPoint); } }