예제 #1
0
        public static void WriteStream <T>(PipeStream stream, RpcPipeContext context, T data)
        {
            byte[] contextBuffer = ProtoBufSerializer.ToByteArray <RpcPipeContext>(context);
            byte[] bodyBuffer    = null;
            if (typeof(T) != typeof(RpcNull))
            {
                bodyBuffer = ProtoBufSerializer.ToByteArray <T>(data);
            }
            else
            {
                bodyBuffer = EmptyBuffer;
            }

            RpcPipeHeader header;

            header.Mark        = RpcPipeHeader.MagicMark;
            header.ContextSize = contextBuffer.Length;
            header.BodySize    = bodyBuffer.Length;

            byte[] headerBuffer = RpcPipeHeader.ToByteArray(header);
            stream.Write(headerBuffer, 0, headerBuffer.Length);
            stream.Write(contextBuffer, 0, contextBuffer.Length);

            if (header.BodySize > 0)
            {
                stream.Write(bodyBuffer, 0, bodyBuffer.Length);
            }

            stream.Flush();
        }
예제 #2
0
        public static void WriteStreamEx(PipeStream stream, RpcPipeContext context, Exception ex)
        {
            byte[] contextBuffer = ProtoBufSerializer.ToByteArray <RpcPipeContext>(context);
            byte[] bodyBuffer    = null;
            if (ex != null)
            {
                bodyBuffer = BinarySerializer.ToByteArray(ex);
            }
            else
            {
                bodyBuffer = EmptyBuffer;
            }

            RpcPipeHeader header;

            header.Mark        = RpcPipeHeader.MagicMark;
            header.ContextSize = contextBuffer.Length;
            header.BodySize    = bodyBuffer.Length;

            byte[] headerBuffer = RpcPipeHeader.ToByteArray(header);
            stream.Write(headerBuffer, 0, headerBuffer.Length);
            stream.Write(contextBuffer, 0, contextBuffer.Length);

            if (header.BodySize > 0)
            {
                stream.Write(bodyBuffer, 0, bodyBuffer.Length);
            }

            stream.Flush();
        }
예제 #3
0
        public static void WriteStream(PipeStream stream, RpcPipeContext context, byte[] bodyBuf)
        {
            byte[] contextBuffer = ProtoBufSerializer.ToByteArray <RpcPipeContext>(context);

            RpcPipeHeader header;

            header.Mark        = RpcPipeHeader.MagicMark;
            header.ContextSize = contextBuffer.Length;
            header.BodySize    = bodyBuf == null ? 0 : bodyBuf.Length;

            byte[] headerBuffer = RpcPipeHeader.ToByteArray(header);
            stream.Write(headerBuffer, 0, headerBuffer.Length);
            stream.Write(contextBuffer, 0, contextBuffer.Length);

            if (header.BodySize > 0)
            {
                stream.Write(bodyBuf, 0, bodyBuf.Length);
            }

            stream.Flush();
        }