Beispiel #1
0
    public static WpcItemList Parse(ref ReadOnlySpanBuffer <byte> buf)
    {
        WpcItemList ret = new WpcItemList();

        while (true)
        {
            if (WpcItem.Parse(ref buf, out string name, out ReadOnlyMemory <byte> data) == false)
            {
                break;
            }

            ret.Add(name, data);
        }

        return(ret);
    }
Beispiel #2
0
    public static bool Parse(ref ReadOnlySpanBuffer <byte> buf, out string name, out ReadOnlyMemory <byte> data)
    {
        name = "";
        data = default;

        var nameBuf = buf.Read(4, allowPartial: true);

        if (nameBuf.Length != 4)
        {
            return(false);
        }
        name = nameBuf._GetString_Ascii().ToUpperInvariant();

        int i = name.IndexOf(' ');

        if (i != -1)
        {
            name = name.Substring(0, i);
        }

        var sizeStrBuf = buf.Read(10, allowPartial: true);

        if (sizeStrBuf.Length != 10)
        {
            return(false);
        }

        int size = sizeStrBuf._GetString_Ascii()._ToInt();

        size = Math.Max(size, 0);
        if (size > Pack.MaxPackSize)
        {
            throw new CoresException($"size ({size}) > Pack.MaxPackSize ({Pack.MaxPackSize})");
        }

        var dataBuf = buf.Read(size, allowPartial: true);

        if (dataBuf.Length != size)
        {
            return(false);
        }
        string dataStr = dataBuf._GetString_Ascii();

        data = Str.Base64Decode(Str.Safe64ToBase64(dataStr));

        return(true);
    }
Beispiel #3
0
    public static WpcItemList Parse(string str)
    {
        ReadOnlySpanBuffer <byte> buf = str._GetBytes_Ascii();

        return(Parse(ref buf));
    }