internal static void WriteJsonBinary <T>(MessageBuffer messageBuffer, T obj, MemoryStream binary) { messageBuffer.Clear(); messageBuffer.IsBinary = true; //Write magic. int magic = 0x58454E4F; messageBuffer.RawData.Write(MemoryMarshal.Cast <int, byte>(MemoryMarshal.CreateSpan(ref magic, 1))); messageBuffer.RawData.SetLength(8); messageBuffer.RawData.Position = 8; //Write json. JsonSerializer.Serialize(messageBuffer.JsonWriter, obj, JsonOptions.Options); //Write json length. var jsonLength = (int)messageBuffer.RawData.Length - 8; var buffer = messageBuffer.RawData.GetBuffer(); MemoryMarshal.Cast <int, byte>(MemoryMarshal.CreateReadOnlySpan(ref jsonLength, 1)) .CopyTo(buffer.AsSpan().Slice(4, 4)); //Note that this does not move the stream pointer. //Write binary. binary.CopyTo(messageBuffer.RawData); }
/// <summary> /// Disconnects this client from the server. /// </summary> public virtual void Disconnect() { AssertNotDisposed(); _source.Cancel(); _buffer.Clear(); _stream.Dispose(); _stream = null; }