internal RTVal(RTVector value) { long_val = null; float_val = null; double_val = null; data_val = null; string_val = null; vec_val = value; }
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); }
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); }
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); }
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); }
/// <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); } }