/// <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); }
/// <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); }
/// <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); }
/// <summary> /// 获取当前帧的指定类型值 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <returns></returns> public T Val <T>() { return(RpcKit.GetVal <T>(_val)); }
/// <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)); }
/// <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)); }