string ParseResponse(ICollection<IPEndPoint> servers, byte[] reply, int limit) {
var seed = string.Empty;
var pos = 0;
byte[] header = {0xFF, 0xFF, 0xFF, 0xFF, 0x66, 0x0A};
if (!header.All(t => reply[pos++] == t))
return null;
var page = new List<IPEndPoint>();
while (pos < reply.Length) {
var ip = $"{reply[pos++]}.{reply[pos++]}.{reply[pos++]}.{reply[pos++]}";
byte[] b = {reply[pos + 1], reply[pos]};
var port = BitConverter.ToUInt16(b, 0);
pos += 2;
seed = ip + ":" + port;
if (seed.Equals("0.0.0.0:0"))
break;
var ep = seed.ToIPEndPoint();
if (servers.Contains(ep))
continue;
servers.Add(ep);
page.Add(ep);
if ((limit <= 0) || (servers.Count < limit))
continue;
Raise(new ServerPageArgs(page));
return "0.0.0.0:0";
}
Raise(new ServerPageArgs(page));
return seed;
}
}