using System.Collections.Generic; using NeonTea.Quakeball.TeaNet.Packets; namespace NeonTea.Quakeball.Networking.Packets { public class PingPckt : Packet { public byte Identifier; public bool ServerReceived = false; public bool ClientReceived = false; public PingPckt() { } public PingPckt(byte identifier) { Identifier = identifier; } public override void Read(ByteBuffer buffer) { Identifier = buffer.Read(); byte result = buffer.Read(); ServerReceived = (result & 1) == 1; ClientReceived = (result & 2) == 1; } public override void Write(ByteBuffer buffer) { buffer.Write(Identifier); byte serverFlag = ServerReceived ? (byte)1 : (byte)0; byte clientFlag = ClientReceived ? (byte)2 : (byte)0; byte total = (byte)(serverFlag | clientFlag); buffer.Write(total); } } public class PingListPckt : Packet { public List Pings = new List(); public PingListPckt() { } public PingListPckt(List players) { foreach (NetPlayer p in players) { Pings.Add(new PingInfo(p.Id, p.Ping)); } } public override void Read(ByteBuffer buffer) { Pings.Clear(); int count = buffer.ReadInt(); for (int i = 0; i < count; i++) { PingInfo info = new PingInfo(0, 0); info.Read(buffer); Pings.Add(info); } } public override void Write(ByteBuffer buffer) { buffer.Write(Pings.Count); foreach (PingInfo info in Pings) { info.Write(buffer); } } } public class PingInfo : Serializable { public ulong PlayerId; public float Ping; public PingInfo(ulong playerid, float ping) { PlayerId = playerid; Ping = ping; } public void Read(ByteBuffer buffer) { PlayerId = buffer.ReadULong(); Ping = buffer.ReadFloat(); } public void Write(ByteBuffer buffer) { buffer.Write(PlayerId); buffer.Write(Ping); } } }