public static extern void WriteTo(this IBinaryMessage message, BinaryWriter writer) { using (var buffer = new Uno.IO.MemoryStream()) using (var bufferWriter = new BinaryWriter(buffer)) { message.WriteDataTo(bufferWriter); var length = (int)buffer.Position; writer.Write(message.Type); writer.Write(length); writer.Write(buffer.GetBuffer().SubArray(0, length)); } }
public static Optional <T> TryParse <T>(this IBinaryMessage message, string type, Func <BinaryReader, T> action) { if (type != message.Type) { return(Optional.None <T>()); } using (var buffer = new Uno.IO.MemoryStream()) using (var bufferWriter = new BinaryWriter(buffer)) using (var bufferReader = new BinaryReader(buffer)) { message.WriteDataTo(bufferWriter); buffer.Seek(0, Uno.IO.SeekOrigin.Begin); return(action(bufferReader)); } throw new Exception("It has happened."); }