public static void Switch(QRServer server, EndPoint endPoint, byte[] recv) { try { switch (recv[0]) { case QRClient.Avaliable: AvailableCheckHandler.BackendAvaliabilityResponse(server, endPoint, recv); break; // Note: BattleSpy make use of this despite not being used in both OpenSpy and the SDK. // Perhaps it was present on an older version of GameSpy SDK case QRGameServer.Challenge: ChallengeHandler.ServerChallengeResponse(server, endPoint, recv); break; case QRClient.Heartbeat: // HEARTBEAT HeartBeatHandler.HeartbeatResponse(server, endPoint, recv); break; case QRClient.KeepAlive: KeepAliveHandler.KeepAliveResponse(server, endPoint, recv); break; default: server.UnknownDataRecived(recv); break; } } catch (Exception e) { LogWriter.Log.WriteException(e); server.ReceiveAsync(); } }
/// <summary> /// Callback method for when the UDP Query Report socket recieves a connection /// </summary> protected override void ProcessAccept(UDPPacket packet) { IPEndPoint remote = (IPEndPoint)packet.AsyncEventArgs.RemoteEndPoint; // Need at least 5 bytes if (packet.BytesRecieved.Length < 5) { Release(packet.AsyncEventArgs); return; } // If we dont reply, we must manually release the EventArgs back to the pool Replied = false; try { switch (packet.BytesRecieved[0]) { case QRClient.Avaliable: AvaliableCheckHandler.BackendAvaliabilityResponse(this, packet); break; // Note: BattleSpy make use of this despite not being used in both OpenSpy and the SDK. // Perhaps it was present on an older version of GameSpy SDK case QRGameServer.Challenge: ChallengeHandler.ServerChallengeResponse(this, packet); break; case QRClient.Heartbeat: // HEARTBEAT HeartBeatHandler.HeartbeatResponse(this, packet); break; case QRClient.KeepAlive: KeepAliveHandler.KeepAliveResponse(this, packet); break; default: LogWriter.Log.Write("[QR] [Recv] unknown data: ", LogLevel.Error); break; } } catch (Exception e) { LogWriter.Log.WriteException(e); } finally { //if we replied QR data we release packet so that the EventArgs can be used on another connection if (Replied == true) { Release(packet.AsyncEventArgs); } } }