public override object GetTargetParameterValue(ParameterInfo parameter, ExecuteContext executeContext) { ProtobufExecuteContext context = executeContext as ProtobufExecuteContext; if (parameter.ParameterType.IsAssignableFrom(context.SubMessage.GetType())) { return(context.SubMessage); } if (parameter.HasDefaultValue) { return(parameter.DefaultValue); } else if (parameter.ParameterType.IsValueType) { return(parameter.RawDefaultValue); } return(null); }
/// <summary> /// 请求的数据处理 /// </summary> /// <param name="userToken">用户连接对象</param> /// <param name="data">请求数据及响应数据</param> /// <param name="actionExecuter"></param> /// <returns>是否有数据响应 true代表有相应数据并由data传出 false代表没有相应</returns> public bool DataHandle(AsyncUserToken userToken, ref byte[] data, IActionExecuter actionExecuter) { Request request = Request.Parser.ParseFrom(data); ProtobufExecuteContext executeContext = new ProtobufExecuteContext(); executeContext.ControllerName = request.Controller; executeContext.ActionName = request.Action; executeContext.UserToken = userToken; #region 子参数解析 if (request.SubRequest != null) { Assembly assembly = Assembly.GetExecutingAssembly(); var type = assembly.GetType(Any.GetTypeName(request.SubRequest.TypeUrl)); if (type != null /*&& request.SubRequest.Is((type as IMessage).Descriptor)*/) { var uppackMethod = request.SubRequest.GetType().GetMethod(nameof(request.SubRequest.Unpack)).MakeGenericMethod(type); IMessage subMessagae = uppackMethod.Invoke(request.SubRequest, null) as IMessage; executeContext.SubMessage = subMessagae; } } #endregion var has = actionExecuter.TryExecuteAction(executeContext, out object obj); if (has) { if (obj == null) { return(false); } } else { //没有找到action obj = "无效的请求"; } var respone = MakeRespone(request, obj); data = respone.ToByteArray(); return(true); }