Ejemplo n.º 1
0
        /// <summary>
        /// 单个订单通知任务
        /// </summary>
        private void DoWork(int index)
        {
            //DoingWork(Level.Info, string.Format("订单ID:[{0}]", string.Join(",", _queueNotifies.Select(x => x.q_id))));
            while (NotifyCount > 0)
            {
                OrderNotifyQueueListModel notify;
                lock (_lock)
                {
                    notify = _queueNotifies.Dequeue();
                }
                if (notify == null)
                {
                    continue;
                }
                GlobalPara.Request();
                //DoingWork(Level.Info, string.Format("正在执行订单通知[{0}]的通知任务...", notify.q_id));
                DoingWork(Level.Info, string.Format("正在执行订单通知任务,线程[{0}],交易码[{1}]...", index, notify.trade_code));
                var success = SendNotify(notify);

                if (Success(success))
                {
                    GlobalPara.RequestSuccess();
                }

                AfterSendNotify(notify, success);
                DoingWork(Level.Info, string.Format("订单通知[{0}]的任务已执行完成,结果为:[{1}]", notify.q_id, success));
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 发送机器人任务
        /// </summary>
        /// <returns></returns>
        void SendRobotTask()
        {
            FmInfo.GetTaskInfo("机器人:一秒后发送机器人任务");
            Thread.Sleep(1000);
            sendTask : if (RoBotState)//读取机器人状态为自动运行
            {
                try
                {
                    //如果有新增的任务就一直循环取出来发送该条任务,直到该条任务做完,切换下一条任务
                    while (connectSuccess)  //发送机制:取出当前第一条未完成的任务,间隔一秒发送一次,直到这条任务完成,跳到下一条任务!
                    {
                        //获取机器人任务
                        while (!flag)
                        {
                            FmInfo.GetTaskInfo("机器人:处理完成信号中");
                        }
                        if (FirstSend)//如果是第一次发送
                        {
                            robotService.UpdateLastPacktaskNumCigstate();
                            FirstSend = false;
                        }
                        CreateTask : string taskInfo = robotService.GetRobotInfo(out string outStr);
                        bytes = Encoding.ASCII.GetBytes(taskInfo);
                        if (!RoBotState)//如果中途接收到机器人状态为 关闭状态 ,则停止发送任务
                        {
                            goto sendTask;
                        }
                        if (string.IsNullOrWhiteSpace(taskInfo))
                        {
                            // FmInfo.GetTaskInfo("机器人:任务发送完毕");
                            lblTask.Text = "机器人:任务发送完毕";
                            break;
                        }
                        try
                        {
                            if (isClientConnected(socketCore))
                            {
                                socketCore?.Send(bytes, 0, bytes.Length, SocketFlags.None);//发送数据
                                if (!GlobalPara.JugValueEqualsLastOne2(taskInfo))
                                {
                                    FmInfo.GetTaskInfo("机器人:发送数据,任务:" + taskInfo);
                                }                                               //
                                lblTask.Text = "机器人:发送任务:" + taskInfo;
                            }
                            else
                            {
                                connectSuccess = false;
                                FmInfo.GetTaskInfo("机器人:远程主机强制断开一个现有连接,发送任务失败!");
                                lblServerInfo.Text = "机器人:服务器连接失败!";
                                CheckAlive();//断开连接 间隔
                            }
                        }
                        catch (Exception ex)
                        {
                            FmInfo.GetTaskInfo("机器人:任务发送停止,未知错误:" + ex.Message + "\r\n" + outStr + "任务将在10秒后重新发送!");
                            Thread.Sleep(10000);//暂停10秒后 继续读取
                            goto CreateTask;
                        }
                        Thread.Sleep(120); // 0.12秒后再次发送
                    }
                }
                catch (Exception ex)
                {
                    FmInfo.GetTaskInfo("机器人:任务方法,未知错误:" + ex.Message);
                    goto sendTask;
                }
            }
            else
            {
                //FmInfo.GetTaskInfo("机器人自动运行状态为关闭,十秒之后再次检测机器人状态");
                lblTask.Text = "机器人:自动运行状态为关闭,一秒之后再次检测机器人状态";

                Thread.Sleep(1000);//十秒之后再次检测机器人状态
                goto sendTask;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 响应来自服务端的信息
        /// </summary>
        /// <param name="ar"></param>
        private void ReceiveCallBack(IAsyncResult ar)
        {
            try
            {
                int length = socketCore.EndReceive(ar);//结束挂起的异步读取
                //开始异步接受来自服务端的信息
                socketCore.BeginReceive(buffer, 0, 2048, SocketFlags.None, new AsyncCallback(ReceiveCallBack), socketCore);
                if (length == 0)
                {
                    return;
                }
                byte[] data = new byte[length];
                Array.Copy(buffer, 0, data, 0, length);
                Invoke(new Action(() =>
                {
                    string msg = string.Empty;
                    msg        = Encoding.ASCII.GetString(data); //对获取的数据进行编码转换  //传输的数据会有乱码
                    if (msg.Length <= 0)                         // \0\0\0\0\0\\0\0\0\0\0\0\0\0\0\0\0
                    {
                        return;
                    }
                    int start = msg.IndexOf("F");  //从F开始截取
                    int end   = msg.IndexOf("\0"); //从 \0后截取结束
                    if (start < 0)
                    {
                        return;
                    }
                    msg = msg.Substring(start, end);
                    string[] arrData = msg.Trim().Split(',');
                    string outStr    = "";                         //错误信息
                    if (arrData[0].ToLower() == "f")               //F头部 代表机器人完成
                    {
                        if (GlobalPara.JugValueEqualsLastOne(msg)) //如果数据与上一次的相等 则不做任何操作
                        {
                            return;
                        }

                        //S  所在的位置 单抓 3 双抓 5
                        if (msg.Contains("|"))               //如果包含双抓
                        {
                            if (arrData[4].ToLower() == "s") //s头部 代表机器人状态
                            {
                                if (!CheckRobotRunState(arrData[5].Replace('\0', ' ').Trim()))
                                {
                                    return;
                                }
                            }
                            else
                            {
                                FmInfo.GetTaskInfo("机器人:异常收到来自机器人的信息,位置为4的索引不为S," + msg);
                            }

                            string[] newArr = msg.Substring(2).Trim().Split('|');
                            if (newArr.Length == 2)
                            {
                                flag                    = false;
                                string[] arr1           = newArr[0].Trim().Split(',');
                                string[] arr2           = newArr[1].Trim().Split(',');
                                List <string[]> arrlist = new List <string[]>();
                                arrlist.Add(arr1);
                                arrlist.Add(arr2);
                                robotService.UpDateFinishTasks(arrlist, out outStr);
                                //robotService.UpDateFinishTask(arr1, out outStr);//y 修改为一起修改 20190709
                                //robotService.UpDateFinishTask(arr2, out outStr);
                                FmInfo.AutoRefreshUnShow(Convert.ToDecimal(arr2[0]), Convert.ToInt32(arr2[1]));
                                FmInfo.FuncAutoRefsh();//更新显示界面
                                flag = true;
                                //FmInfo.AutoRefreshUnShow(int.Parse(arr2[0]));
                                if (!string.IsNullOrWhiteSpace(outStr))
                                {
                                    FmInfo.GetTaskInfo("机器人: " + outStr);
                                }
                                else
                                {
                                    FmInfo.GetTaskInfo("机器人:任务号" + arr1[0] + ",条烟流水号:" + arr1[1] + ",数据库更新完成!");
                                    FmInfo.GetTaskInfo("机器人:任务号" + arr2[0] + ",条烟流水号:" + arr2[1] + ",数据库更新完成!");
                                    updateLabel("机器人:任务号" + arr2[0] + ",条烟流水号:" + arr2[1] + ",数据库更新完成!", lblFinshiTask);
                                }

                                if (!string.IsNullOrWhiteSpace(outStr))//
                                {
                                    FmInfo.GetTaskInfo(outStr);
                                }
                            }
                            else
                            {
                                FmInfo.GetTaskInfo("机器人:双抓任务完成信号有误,完成信号长度为" + newArr.Length);
                            }
                        }
                        else//单抓的情况下
                        {
                            if (arrData[3].ToLower() == "s")
                            {
                                if (!CheckRobotRunState(arrData[4].Replace('\0', ' ').Trim()))
                                {
                                    return;
                                }
                            }
                            else
                            {
                                FmInfo.GetTaskInfo("机器人:异常收到来自机器人的信息,位置为3的索引不为S," + msg);
                            }
                            updateLabel("机器人:收到单抓完成信号", lblFinshiTask);
                            string[] Arr = msg.Substring(2).Trim().Split(',');
                            if (Arr[1] == "0")
                            {
                                return;
                            }
                            flag = false;
                            robotService.UpDateFinishTask(Arr, out outStr);
                            flag = true;
                            FmInfo.AutoRefreshUnShow(Convert.ToDecimal(Arr[0]), Convert.ToInt32(Arr[1]));
                            FmInfo.FuncAutoRefsh();//更新显示界面
                            // FmInfo.AutoRefreshUnShow(int.Parse(Arr[0]));
                            if (!string.IsNullOrWhiteSpace(outStr))
                            {
                                FmInfo.GetTaskInfo("机器人: " + outStr);
                            }
                            else
                            {
                                FmInfo.GetTaskInfo("机器人:任务号" + Arr[0] + ",条烟流水号:" + Arr[1] + ",数据库更新完成!");
                                updateLabel("机器人:任务号" + Arr[0] + ",条烟流水号:" + Arr[1] + ",数据库更新完成!", lblFinshiTask);
                            }
                        }
                    }
                }));
            }
            catch (ObjectDisposedException)
            {
            }
            catch (Exception ex)
            {
                Invoke(new Action(() =>
                {
                    FmInfo.GetTaskInfo("机器人:服务器断开连接。" + ex.Message);
                    //ThreadHeartCheck();
                }));
            }
        }