コード例 #1
0
 internal RTVal(RTVector value)
 {
     long_val   = null;
     float_val  = null;
     double_val = null;
     data_val   = null;
     string_val = null;
     vec_val    = value;
 }
コード例 #2
0
 public static Vector2?GetVector2(this RTData data, uint index)
 {
     if (data.GetRTVector(index) != null)
     {
         RTVector vector = data.GetRTVector(index).Value;
         return(new Vector2(vector.x.Value, vector.y.Value));
     }
     return(null);
 }
コード例 #3
0
 public static Vector4?GetVector4(this RTData data, uint index)
 {
     if (data.GetRTVector(index) != null)
     {
         RTVector vector = data.GetRTVector(index).Value;
         if (!vector.w.HasValue)
         {
             return(null);
         }
         return(new Vector4(vector.x.Value, vector.y.Value, vector.z.Value, vector.w.Value));
     }
     return(null);
 }
コード例 #4
0
    private JsonObject CreateObjectData(RTData data)
    {
        if (data == null)
        {
            return(null);
        }

        int        numItems = GetNumItemsData(data);
        JsonObject o        = new JsonObject();

        if (numItems > 0)
        {
            JsonArray a = new JsonArray(numItems);

            for (uint i = 0; i < numItems; i++)
            {
                JsonObject o2 = new JsonObject();

                if (data.GetLong(i) != null)
                {
                    o2.Add("long_val", data.GetLong(i).Value);
                }
                else
                {
                    o2.Add("long_val", null);
                }
                if (data.GetFloat(i) != null)
                {
                    o2.Add("float_val", data.GetFloat(i).Value);
                }
                else
                {
                    o2.Add("float_val", null);
                }
                if (data.GetDouble(i) != null)
                {
                    o2.Add("double_val", data.GetDouble(i).Value);
                }
                else
                {
                    o2.Add("double_val", null);
                }
                if (data.GetRTVector(i) != null)
                {
                    RTVector   vec = data.GetRTVector(i).Value;
                    JsonObject o3  = new JsonObject();

                    o3.Add("x", vec.x.Value);
                    o3.Add("y", vec.y.Value);
                    if (vec.z != null)
                    {
                        o3.Add("z", vec.z.Value);

                        if (vec.w != null)
                        {
                            o3.Add("w", vec.w.Value);
                        }
                    }

                    o2.Add("vec_val", o3);
                }
                else
                {
                    o2.Add("vec_val", null);
                }
                if (data.GetString(i) != null)
                {
                    o2.Add("string_val", data.GetString(i));
                }
                else
                {
                    o2.Add("string_val", null);
                }
                if (data.GetData(i) != null)
                {
                    o2.Add("data_val", CreateObjectData(data.GetData(i)));
                }
                else
                {
                    o2.Add("data_val", null);
                }

                if (o2.Count == 0)
                {
                    a.Add(null);
                }
                else
                {
                    a.Add(o2);
                }
            }

            o.Add("data", a);
        }
        else
        {
            o.Add("data", null);
        }

        return(o);
    }
コード例 #5
0
        internal static RTVal ReadRTVal(Stream stream, BinaryReader br)
        {
            RTVal instance = new RTVal();

            long limit = global::GameSparks.RT.Proto.ProtocolParser.ReadUInt32(stream);

            limit += stream.Position;
            while (true)
            {
                if (stream.Position >= limit)
                {
                    if (stream.Position == limit)
                    {
                        break;
                    }
                    else
                    {
                        throw new global::GameSparks.RT.Proto.ProtocolBufferException("Read past max limit");
                    }
                }
                int keyByte = stream.ReadByte();
                if (keyByte == -1)
                {
                    throw new System.IO.EndOfStreamException();
                }
                // Optimized reading of known fields with field ID < 16
                switch (keyByte)
                {
                // Field 1 LengthDelimited
                case 10:
                    instance.string_val = global::GameSparks.RT.Proto.ProtocolParser.ReadString(stream);
                    continue;

                // Field 2 LengthDelimited
                case 18:
                    // repeated packed
                    long end2 = global::GameSparks.RT.Proto.ProtocolParser.ReadUInt32(stream);
                    end2 += stream.Position;
                    RTVector v = new RTVector();
                    int      i = 0;
                    while (stream.Position < end2)
                    {
                        float read = br.ReadSingle();
                        switch (i)
                        {
                        case 0:
                            v.x = read;
                            break;

                        case 1:
                            v.y = read;
                            break;

                        case 2:
                            v.z = read;
                            break;

                        case 3:
                            v.w = read;
                            break;

                        default:
                            break;
                        }
                        i++;
                    }
                    instance.vec_val = v;

                    if (stream.Position != end2)
                    {
                        throw new global::GameSparks.RT.Proto.ProtocolBufferException("Read too many bytes in packed data");
                    }
                    continue;

                // Field 14 LengthDelimited
                case 114:
                    if (instance.data_val == null)
                    {
                        instance.data_val = RTDataSerializer.cache.Pop();
                    }
                    RTData.ReadRTData(stream, br, instance.data_val);
                    continue;
                }

                var key = global::GameSparks.RT.Proto.ProtocolParser.ReadKey((byte)keyByte, stream);

                // Reading field ID > 16 and unknown field ID/wire type combinations
                switch (key.Field)
                {
                case 0:
                    throw new global::GameSparks.RT.Proto.ProtocolBufferException("Invalid field id: 0, something went wrong in the stream");

                default:
                    global::GameSparks.RT.Proto.ProtocolParser.SkipKey(stream, key);
                    break;
                }
            }

            return(instance);
        }
コード例 #6
0
        /// <summary>Helper: Serialize with a varint length prefix</summary>
        internal static void WriteRTVal(Stream stream, RTVal val)
        {
            BinaryWriteMemoryStream ms = (BinaryWriteMemoryStream)PooledObjects.MemoryStreamPool.Pop();

            try
            {
                if (val.string_val != null)
                {
                    // Key for field: 1, LengthDelimited
                    ms.WriteByte(10);
                    global::GameSparks.RT.Proto.ProtocolParser.WriteBytes(ms, System.Text.Encoding.UTF8.GetBytes(val.string_val));
                }
                else if (val.data_val != null)
                {
                    ms.WriteByte(114);
                    RTData.WriteRTData(ms, val.data_val);
                }
                else if (val.vec_val != null)
                {
                    RTVector vec_value = val.vec_val.Value;
                    // Key for field: 2, LengthDelimited
                    ms.WriteByte(18);
                    int numberOfFloatsSet = vec_value.w != null ? 4 : (vec_value.z != null ? 3 : (vec_value.y != null ? 2 : (vec_value.x != null ? 1 : 0)));
                    global::GameSparks.RT.Proto.ProtocolParser.WriteUInt32(ms, 4u * (uint)numberOfFloatsSet);

                    for (int i = 0; i < numberOfFloatsSet; i++)
                    {
                        switch (i)
                        {
                        case 0:
                            ms.BinaryWriter.Write(vec_value.x.Value);
                            break;

                        case 1:
                            ms.BinaryWriter.Write(vec_value.y.Value);
                            break;

                        case 2:
                            ms.BinaryWriter.Write(vec_value.z.Value);
                            break;

                        case 3:
                            ms.BinaryWriter.Write(vec_value.w.Value);
                            break;

                        default:
                            break;
                        }
                    }
                }

#if __WINDOWS__
                var data = ms.ToArray();
#else
                var data = ms.GetBuffer();
#endif
                global::GameSparks.RT.Proto.ProtocolParser.WriteUInt32(stream, (uint)ms.Position);
                stream.Write(data, 0, (int)ms.Position);
            }
            finally
            {
                PooledObjects.MemoryStreamPool.Push(ms);
            }
        }