public static Stream Serialize(this Message message) { Stream serialized = new MemoryStream(); // serialized.SetLength(0); serialized.WriteUint(message.Address.UnicodeLength()); serialized.WriteUnicode(message.Address); var t = message.TimeStamp; var time = t.UniversalTime.ToString("yyyy-MM-dd HH:mm:ss.ffff"); var zone = t.TimeZone.Id; serialized.WriteUint(time.UnicodeLength()); serialized.WriteUnicode(time); serialized.WriteUint(zone.UnicodeLength()); serialized.WriteUnicode(zone); serialized.WriteUint((uint)message.Attributes.Count()); foreach (var key in message.Attributes) { serialized.WriteUint(key.UnicodeLength()); serialized.WriteUnicode(key); var binData = message[key].Serialize(); binData.Position = 0; // serialized.WriteUint((uint)binData.Length); binData.CopyTo(serialized); } return serialized; }
public static Stream Serialize(this Bin bin) { Stream serialized = new MemoryStream(); serialized.WriteUint((uint)bin.Count); var alias = TypeIdentity.Instance.FindAlias(bin.GetInnerType()); serialized.WriteUint(alias.UnicodeLength()); serialized.WriteUnicode(alias); for (int i = 0; i < bin.Count; i++) { if (bin.GetInnerType() == typeof(bool)) { serialized.WriteBool((bool)bin[i]); } if (bin.GetInnerType() == typeof(int)) { serialized.WriteInt((int)bin[i]); } if (bin.GetInnerType() == typeof(float)) { serialized.WriteFloat((float)bin[i]); } if (bin.GetInnerType() == typeof(double)) { serialized.WriteDouble((double)bin[i]); } if (bin.GetInnerType() == typeof(string)) { var l = ((string)bin[i]).UnicodeLength(); serialized.WriteUint(l); if (l>0) serialized.WriteUnicode((string)bin[i]); } if (bin.GetInnerType() == typeof(RGBAColor)) { serialized.WriteDouble(((RGBAColor)bin[i]).R); serialized.WriteDouble(((RGBAColor)bin[i]).G); serialized.WriteDouble(((RGBAColor)bin[i]).B); serialized.WriteDouble(((RGBAColor)bin[i]).A); } if (bin.GetInnerType() == typeof(Vector2D)) { serialized.WriteDouble(((Vector2D)bin[i]).x); serialized.WriteDouble(((Vector2D)bin[i]).y); } if (bin.GetInnerType() == typeof(Vector3D)) { serialized.WriteDouble(((Vector3D)bin[i]).x); serialized.WriteDouble(((Vector3D)bin[i]).y); serialized.WriteDouble(((Vector3D)bin[i]).z); } if (bin.GetInnerType() == typeof(Vector4D)) { serialized.WriteDouble(((Vector4D)bin[i]).x); serialized.WriteDouble(((Vector4D)bin[i]).y); serialized.WriteDouble(((Vector4D)bin[i]).z); serialized.WriteDouble(((Vector4D)bin[i]).w); } if (bin.GetInnerType() == typeof(Matrix4x4)) { for (int j = 0; j < 16; j++) { serialized.WriteDouble(((Matrix4x4)bin[i]).Values[j]); } } if (bin.GetInnerType() == typeof(Stream)) { var l = ((Stream)bin[i]).Length; serialized.WriteUint((uint)l); if (l > 0) { ((Stream) bin[i]).Position = 0; ((Stream) bin[i]).CopyTo(serialized, (int) l); } } if (bin.GetInnerType() == typeof(Time.Time)) { var t = (Time.Time) bin[i]; var time = t.UniversalTime.ToString("yyyy-MM-dd HH:mm:ss.ffff"); var zone = t.TimeZone.Id; serialized.WriteUint(time.UnicodeLength()); serialized.WriteUnicode(time); serialized.WriteUint(zone.UnicodeLength()); serialized.WriteUnicode(zone); } } serialized.Position = 0; return serialized; }