public void SendHostUpdate(GameHost host) { var d = GameHostEntry.SerializeHost(host); if (d != null && udp.Client != null) { udp.Send(d, d.Length, multicastEndpoint); } }
public static GameHostEntry FromBytes(IPEndPoint address, byte[] data, int index) { var ms = new MemoryStream(data, index, data.Length - index); var r = new BinaryReader(ms); var gh = new GameHostEntry(); gh.Address = address; gh.HostId = r.ReadInt64(); gh.PlayerCount = r.ReadInt32(); gh.MaxPlayers = r.ReadByte(); gh.State = (GameState)r.ReadByte(); gh.GameTitle = r.ReadString(); r.Close(); ms.Close(); return(gh); }
void listenerThread() { while (udp.Client != null) { IPEndPoint targetAddress = null; var data = udp.Receive(ref targetAddress); switch ((InteractionMessage)data[0]) { case InteractionMessage.PingRequest: SendHostUpdate(); break; case InteractionMessage.PingAnswer: if (EntryReceived != null) { var gh = GameHostEntry.FromBytes(targetAddress, data, 1); EntryReceived(gh); } break; } } }