/// <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 (AutoCSer.Threading.RingPool<GetRemoteExpressionServerCall>.Default.Pop() ?? new GetRemoteExpressionServerCall()).Set(this, ref Server.ServerAttribute, ref inputParameter); return; } returnType = AutoCSer.Net.TcpServer.ReturnType.ServerDeSerializeError; } catch (Exception error) { returnType = AutoCSer.Net.TcpServer.ReturnType.ServerException; AddLog(error); } Push(returnType); }
internal void Set(ServerSocketSender sender, ref TcpServer.ServerAttributeCache attribute, ref RemoteExpression.ClientNode inputParameter) { this.Sender = sender; CommandIndex = sender.ServerSocket.CommandIndex; this.inputParameter = inputParameter; switch (attribute.RemoteExpressionTask) { case TcpServer.ServerTaskType.ThreadPool: if (!System.Threading.ThreadPool.QueueUserWorkItem(ThreadPoolCall)) { AutoCSer.Threading.TaskSwitchThreadArray.Default.CurrentThread.Add(this); } return; case TcpServer.ServerTaskType.Timeout: AutoCSer.Threading.TaskSwitchThreadArray.Default.CurrentThread.Add(this); return; case TcpServer.ServerTaskType.TcpTask: TcpServer.ServerCallThreadArray.Default.CurrentThread.Add(this); return; case TcpServer.ServerTaskType.TcpQueue: TcpServer.ServerCallQueue.Default.Add(this); return; case TcpServer.ServerTaskType.TcpQueueLink: TcpServer.ServerCallQueue.DefaultLink.Add(this); return; case TcpServer.ServerTaskType.Queue: if (attribute.RemoteExpressionCallQueueIndex == 0) { sender.Server.CallQueue.Add(this); } else { sender.Server.CallQueueArray[attribute.RemoteExpressionCallQueueIndex].Key.Add(this); } return; case TcpServer.ServerTaskType.QueueLink: if (attribute.RemoteExpressionCallQueueIndex == 0) { sender.Server.CallQueueLink.Add(this); } else { sender.Server.CallQueueArray[attribute.RemoteExpressionCallQueueIndex].Value.Add(this); } return; } }
/// <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); }
internal void Set(ServerSocketSender sender, TcpServer.ServerTaskType taskType, ref RemoteExpression.ClientNode inputParameter) { this.Sender = sender; CommandIndex = sender.ServerSocket.CommandIndex; this.inputParameter = inputParameter; switch (taskType) { case TcpServer.ServerTaskType.ThreadPool: if (!System.Threading.ThreadPool.QueueUserWorkItem(threadPoolCall)) { AutoCSer.Threading.LinkTask.Task.Add(this); } return; case TcpServer.ServerTaskType.Timeout: AutoCSer.Threading.LinkTask.Task.Add(this); return; case TcpServer.ServerTaskType.TcpTask: TcpServer.ServerCallTask.Task.Add(this); return; case TcpServer.ServerTaskType.TcpQueue: TcpServer.ServerCallQueue.Default.Add(this); return; case TcpServer.ServerTaskType.Queue: sender.Server.CallQueue.Add(this); return; } }
public TcpServer.ReturnValue <RemoteExpression.ReturnValue> GetRemoteExpression(RemoteExpression.ClientNode node) { if (remoteExpressionServerNodeIdChecker != null) { return(node.Checker != remoteExpressionServerNodeIdChecker?getRemoteExpression(ref node) : new TcpServer.ReturnValue <RemoteExpression.ReturnValue> { Type = TcpServer.ReturnType.RemoteExpressionCheckerError }); } return(new TcpServer.ReturnValue <RemoteExpression.ReturnValue> { Type = TcpServer.ReturnType.RemoteExpressionNotSupport }); }
/// <summary> /// 获取远程表达式数据 /// </summary> /// <param name="node">远程表达式节点</param> /// <returns>返回值类型</returns> private TcpServer.ReturnValue <RemoteExpression.ReturnValue> getRemoteExpression(ref RemoteExpression.ClientNode node) { RemoteExpression.ReturnValue.Output outputParameter = default(RemoteExpression.ReturnValue.Output); TcpServer.ReturnType returnType = Get(RemoteExpression.ClientNode.CommandInfo, ref node, ref outputParameter); return(new TcpServer.ReturnValue <RemoteExpression.ReturnValue> { Type = returnType, Value = outputParameter.Return }); }
/// <summary> /// 获取客户端远程表达式节点 /// </summary> /// <param name="node">远程表达式节点</param> /// <param name="clientNode">客户端远程表达式节点</param> /// <returns>返回值类型</returns> public TcpServer.ReturnType GetRemoteExpressionClientNode(RemoteExpression.Node node, out RemoteExpression.ClientNode clientNode) { RemoteExpressionServerNodeIdChecker checker = remoteExpressionServerNodeIdChecker; TcpServer.ReturnType returnType = checker.Check(node); clientNode = returnType == TcpServer.ReturnType.Success ? new RemoteExpression.ClientNode { Node = node, Checker = checker, ClientNodeId = node.ClientNodeId } : default(RemoteExpression.ClientNode); return(returnType); }
public TcpServer.AwaiterBox <RemoteExpression.ReturnValue> GetRemoteExpressionAwaiter(RemoteExpression.ClientNode node) { return(Sender.GetRemoteExpressionAwaiter(node)); }
public TcpServer.ReturnValue <RemoteExpression.ReturnValue> GetRemoteExpression(RemoteExpression.ClientNode node) { return(Sender.GetRemoteExpression(node)); }
public TcpServer.ReturnType GetRemoteExpressionClientNode(RemoteExpression.Node node, out RemoteExpression.ClientNode clientNode) { return(Sender.GetRemoteExpressionClientNode(node, out clientNode)); }