/// <summary> /// 获取远程表达式数据 /// </summary> /// <param name="data"></param> internal void GetRemoteExpression(ref SubArray <byte> data) { AutoCSer.Net.TcpServer.ReturnType returnType = AutoCSer.Net.TcpServer.ReturnType.Unknown; try { RemoteExpression.ClientNode inputParameter = default(RemoteExpression.ClientNode); if (DeSerialize(ref data, ref inputParameter, false)) { if (Server.ServerAttribute.RemoteExpressionTask == TcpServer.ServerTaskType.Synchronous) { TcpServer.ReturnValue <RemoteExpression.ReturnValue.Output> outputParameter = new RemoteExpression.ReturnValue.Output { Return = inputParameter.GetReturnValue() }; Push <RemoteExpression.ReturnValue.Output>(ServerSocket.CommandIndex, IsBuildOutputThread ? RemoteExpression.ReturnValue.Output.OutputThreadInfo : RemoteExpression.ReturnValue.Output.OutputInfo, ref outputParameter); } else { (GetRemoteExpressionServerCall.Pop() ?? new GetRemoteExpressionServerCall()).Set(this, Server.ServerAttribute.RemoteExpressionTask, ref inputParameter); } return; } returnType = AutoCSer.Net.TcpServer.ReturnType.ServerDeSerializeError; } catch (Exception error) { returnType = AutoCSer.Net.TcpServer.ReturnType.ServerException; AddLog(error); } Push(returnType); }
/// <summary> /// 调用处理 /// </summary> public override void Call() { if (Sender.IsSocket) { AutoCSer.Net.TcpServer.ReturnValue <RemoteExpression.ReturnValue.Output> value = new AutoCSer.Net.TcpServer.ReturnValue <RemoteExpression.ReturnValue.Output>(); try { value.Value.Return = inputParameter.GetReturnValue(); value.Type = AutoCSer.Net.TcpServer.ReturnType.Success; } catch (Exception error) { value.Type = AutoCSer.Net.TcpServer.ReturnType.ServerException; Sender.AddLog(error); } Sender.Push(CommandIndex, Sender.IsServerBuildOutputThread ? RemoteExpression.ReturnValue.Output.OutputThreadInfo : RemoteExpression.ReturnValue.Output.OutputInfo, ref value); } Sender = null; inputParameter.SetNull(); AutoCSer.Threading.RingPool <GetRemoteExpressionServerCall> .Default.PushNotNull(this); }
/// <summary> /// 获取远程表达式数据 /// </summary> /// <param name="data"></param> /// <returns></returns> private bool getRemoteExpression(ref SubArray<byte> data) { AutoCSer.Net.TcpServer.ReturnType returnType = AutoCSer.Net.TcpServer.ReturnType.Unknown; try { RemoteExpression.ClientNode inputParameter = default(RemoteExpression.ClientNode); if (DeSerialize(ref data, ref inputParameter, false)) { RemoteExpression.ReturnValue.Output outputParameter = new RemoteExpression.ReturnValue.Output { Return = inputParameter.GetReturnValue() }; return Send(TcpSimpleServer.OutputInfo.RemoteExpression, ref outputParameter); } returnType = AutoCSer.Net.TcpServer.ReturnType.ServerDeSerializeError; } catch (Exception error) { returnType = AutoCSer.Net.TcpServer.ReturnType.ServerException; Log(error); } return SendOutput(returnType); }