Beispiel #1
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();
                }));
            }
        }