/// <summary> /// Dispose socket /// </summary> public void Disconnect() { if (client != null) { client.Close(); } status = L4D2ServerAgentStatus.Offline; client = null; StopAllCoroutines(); }
// Update is called once per frame void Update() { if (client == null) { return; } client.AsyncProcessingMessage(); if (status == L4D2ServerAgentStatus.OK && lastRespondTime + notRespondingThreashold < Time.time) { status = L4D2ServerAgentStatus.NotResponding; } }
/// <summary> /// Create new socket /// </summary> public void Connect() { if (client != null) { client.Close(); StopAllCoroutines(); } status = L4D2ServerAgentStatus.WaitForChallengeNumber; lastRespondTime = Time.time; client = new ValveServerQueryClient(ip, port); client.MessageHandler += OnReceiveMessage; StartCoroutine(ChallengeNumberAcquireRoutine()); }
private void OnReceiveMessage(ByteBuffer buff) { status = L4D2ServerAgentStatus.OK; lastRespondTime = Time.time; ValveServerResponseData data = new ValveServerResponseData(buff); switch ((ValveServerResponseType)data.header) { case ValveServerResponseType.A2S_Info: serverInfo = data.serverInfoBody; break; case ValveServerResponseType.A2S_ChallengeNumber: challengeNumberInfo = data.challengeNumberBody; break; case ValveServerResponseType.A2S_Player: playersInfo = data.playersInfoBody; break; default: break; } }