コード例 #1
0
ファイル: ZmqQuestionPump.cs プロジェクト: pingbc/EntityModel
        /// <summary>
        /// 执行工作
        /// </summary>
        /// <param name="socket"></param>
        /// <returns>返回状态,其中-1会导致重连</returns>
        protected sealed override int DoWork(RequestSocket socket)
        {
            CommandArgument callArg = Pop();

            if (callArg == null)
            {
                return(0);
            }
            RpcEnvironment.CacheCommand(callArg);
            try
            {
                callArg.cmdState = RpcEnvironment.NET_COMMAND_STATE_SENDED;
                //序列化
                var writer = new CommandWriter(callArg);
                writer.WriteCommandToBuffer();
                //发送命令请求
                bool state = socket.TrySendFrame(timeOut, writer.Buffer, writer.DataLen);
                if (!state)
                {
                    TryRequest(callArg, RpcEnvironment.NET_COMMAND_STATE_NETERROR);
                    return(-1); //出错了
                }
                //log_debug4(DEBUG_CALL, 3, "%s:命令%d(%s)发送成功(%d)", address, call_arg.cmd_id, call_arg.cmd_identity, zmq_result);
                //接收处理反馈
                byte[] result;
                state = socket.TryReceiveFrameBytes(timeOut, out result);
                if (!state)
                {
                    TryRequest(callArg, RpcEnvironment.NET_COMMAND_STATE_UNKNOW);
                    return(-1); //出错了
                }
                if (result[0] == '0')
                {
                    TryRequest(callArg, RpcEnvironment.NET_COMMAND_STATE_UNKNOW);
                }
                else
                {
                    callArg.cmdState = RpcEnvironment.NET_COMMAND_STATE_WAITING;
                    callArg.OnRequestStateChanged(callArg);
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex, GetType().Name + "DoWork");
                callArg.cmdState = RpcEnvironment.NET_COMMAND_STATE_CLIENT_UNKNOW;
                return(-1);
            }
            return(1);
        }
コード例 #2
0
ファイル: ZmqApiCallPump.cs プロジェクト: cuiopen/ZeroNet
        /// <summary>
        /// 执行工作
        /// </summary>
        /// <param name="socket"></param>
        /// <returns>返回状态,其中-1会导致重连</returns>
        protected sealed override int DoWork(RequestSocket socket)
        {
            CommandArgument callArg = Pop();

            if (callArg == null)
            {
                return(0);
            }
            RpcEnvironment.CacheCommand(callArg);
            try
            {
                bool state;
                //发送命令请求
                state = socket.TrySendFrame(timeOut, callArg.commandName);
                if (!state)
                {
                    return(-1);
                }
                //接收处理反馈
                bool more;
                do
                {
                    string result;
                    state = socket.TryReceiveFrameString(timeOut, out result, out more);
                    if (!state)
                    {
                        return(-1);
                    }
                    if (!string.IsNullOrWhiteSpace(result))
                    {
                        Console.WriteLine(result);
                    }
                } while (more);
            }
            catch (Exception ex)
            {
                OnException(socket, ex);
                callArg.cmdState = RpcEnvironment.NET_COMMAND_STATE_CLIENT_UNKNOW;
                return(-1);
            }
            return(1);
        }