/// <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);
 }
Example #3
0
 /// <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);
 }