Пример #1
0
        /// <summary>
        /// 读取客户端请求流的下一帧数据
        /// </summary>
        /// <returns></returns>
        public async Task <bool> MoveNext()
        {
            try
            {
                _val = RpcKit.ParseBytes <object>(await RpcServerKit.ReadFrame(_invoker.Context.Request.BodyReader));
                return(true);
            }
            catch { }

            return(false);
        }
Пример #2
0
        /// <summary>
        /// 读取从服务器返回的下一帧数据
        /// </summary>
        /// <returns></returns>
        public async Task <bool> MoveNext()
        {
            try
            {
                // _responseStream.ReadAsync 使用 CancellationToken 也只有第一次取消时有效,所以未使用!
                // 此处只在服务端取消连接时抛出异常!
                var data = await RpcClientKit.ReadFrame(_responseStream);

                _val = RpcKit.ParseBytes <object>(data);
                return(true);
            }
            catch
            {
                Dispose();
            }
            return(false);
        }
Пример #3
0
        /// <summary>
        /// 序列化RPC调用,按需压缩
        /// </summary>
        /// <param name="p_methodName">方法名</param>
        /// <param name="p_params">参数</param>
        /// <returns></returns>
        byte[] GetRpcData(string p_methodName, ICollection <object> p_params)
        {
            byte[] data = RpcKit.GetCallBytes(p_methodName, p_params);

#if !SERVER
            // 输出监视信息
            Kit.Trace(TraceOutType.RpcCall, p_methodName, Encoding.UTF8.GetString(data), _svcName);
#endif

            // 超过长度限制时执行压缩
            if (data.Length > RpcKit.MinCompressLength)
            {
                _isCompressed = true;
                var ms = new MemoryStream();
                using (GZipStream zs = new GZipStream(ms, CompressionMode.Compress))
                {
                    zs.Write(data, 0, data.Length);
                }
                data = ms.ToArray();
            }
            return(data);
        }
Пример #4
0
 /// <summary>
 /// 获取当前帧的指定类型值
 /// </summary>
 /// <typeparam name="T">对象类型</typeparam>
 /// <returns></returns>
 public T Val <T>()
 {
     return(RpcKit.GetVal <T>(_val));
 }
Пример #5
0
        /// <summary>
        /// 将对象打包成一帧写入管道
        /// </summary>
        /// <param name="p_writer"></param>
        /// <param name="p_message"></param>
        /// <returns></returns>
        public static Task WriteFrame(PipeWriter p_writer, object p_message)
        {
            bool compress = RpcKit.SerializeObj(p_message, out var content);

            return(WriteFrame(p_writer, content, compress));
        }
Пример #6
0
        /// <summary>
        /// 将对象打包成一帧写入流
        /// </summary>
        /// <param name="p_stream"></param>
        /// <param name="p_message"></param>
        /// <returns></returns>
        public static Task WriteFrame(Stream p_stream, object p_message)
        {
            bool compress = RpcKit.SerializeObj(p_message, out var content);

            return(WriteFrame(p_stream, content, compress));
        }