Beispiel #1
0
        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;
        }