/// <summary> /// Keep receiving incoming packets. /// </summary> void Update() { Buffer buffer; IPEndPoint ip; bool changed = false; long time = System.DateTime.UtcNow.Ticks / 10000; // Receive and process UDP packets one at a time while (mUdp != null && mUdp.ReceivePacket(out buffer, out ip)) { if (buffer.size > 0) { try { BinaryReader reader = buffer.BeginReading(); Packet response = (Packet)reader.ReadByte(); if (response == Packet.ResponseServerList) { isActive = true; mNextSend = time + 3000; knownServers.ReadFrom(reader, time); knownServers.Cleanup(time); changed = true; } else if (response == Packet.Error) { errorString = reader.ReadString(); Debug.LogWarning(errorString); changed = true; } } catch (System.Exception) { } } buffer.Recycle(); } // Clean up old servers if (knownServers.Cleanup(time)) { changed = true; } // Trigger the listener callback if (changed && onChange != null) { onChange(); } else if (mNextSend < time && mUdp != null) { // Send out the update request mNextSend = time + 3000; mUdp.Send(mRequest, mRemoteAddress); } }