GameServerQuery.SourceMasterQuery.ParseResponse C# (CSharp) 메소드

ParseResponse() 개인적인 메소드

private ParseResponse ( ICollection servers, byte reply, int limit ) : string
servers ICollection
reply byte
limit int
리턴 string
        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;
        }
    }