Ejemplo n.º 1
0
        /// <summary>
        /// 数据接收处理线程
        /// </summary>
        /// <param name="o"></param>
        void ProcessCommad(object o)
        {
            RecvObject recv = o as RecvObject;

            if (recv != null)
            {
                Console.WriteLine("收到:" + PubLib.Hex2String(recv.Data));
                DateTime time = DateTime.Now;
                if (PubLib.RecvDataLength >= 1000000000)
                {
                    //重置 防止溢出
                    PubLib.RecvDataLength = 0;
                }
                PubLib.RecvDataLength += recv.Data.Length;

                FrameData f = new FrameData(recv.Data);
                SetRouteInfo(recv.Code, f.routeAddress, recv.RemotePoint);
                f.Code = recv.Code;
                //DataAccess ac = new DataAccess();
                //DataTable dt = ac.ExecuteQueryReturnTable("select * from Base_DeviceInfo where DeviceType='0' and Status<>2 and Token='" + f.Code + "'");  //绑定所有空闲或正常的控制设备
                DataTable dt = XCCloudRS232BLL.ExecuterSqlToTable("select * from Base_DeviceInfo where DeviceType='0' and Status<>2 and Token='" + f.Code + "'");  //绑定所有空闲或正常的控制设备
                if (dt.Rows.Count > 0)
                {
                    PubLib.当前总指令数++;
                    //控制器合法
                    switch (f.commandType)
                    {
                    case CommandType.机头网络状态报告:
                    {
                        Recv机头网络状态报告 cmd = new Recv机头网络状态报告(f);

                        if (ListenRouterToken == f.Code && CommandTypeList.Exists((CommandType type) => type == CommandType.机头网络状态报告))
                        {
                            ShowMsg(cmd.GetRecvData(DateTime.Now));
                            ShowMsg(cmd.GetSendData());
                        }

                        SendData(cmd.SendData, recv.RemotePoint);
                        状态更新         handler = new 状态更新(ChangeState);
                        IAsyncResult result  = handler.BeginInvoke(cmd, null, null);
                        //ChangeState(cmd);
                    }
                    break;

                    case CommandType.机头地址动态分配:
                    {
                        Recv机头地址动态分配 cmd = new Recv机头地址动态分配(f);
                        if (ListenRouterToken == f.Code && ListenDeviceAddress == cmd.机头地址 && CommandTypeList.Exists((CommandType type) => type == CommandType.机头地址动态分配))
                        {
                            ShowMsg(cmd.GetRecvData(DateTime.Now));
                            ShowMsg(cmd.GetSendData());
                        }

                        SendData(cmd.SendData, recv.RemotePoint);
                    }
                    break;

                    case CommandType.游戏机参数申请:
                    {
                        Recv游戏机参数申请 cmd = new Recv游戏机参数申请(f);
                        if (ListenRouterToken == f.Code && ListenDeviceAddress == cmd.机头地址 && CommandTypeList.Exists((CommandType type) => type == CommandType.游戏机参数申请))
                        {
                            ShowMsg(cmd.GetRecvData(DateTime.Now));
                            ShowMsg(cmd.GetSendData());
                        }

                        SendData(cmd.SendData, recv.RemotePoint);
                    }
                    break;

                    case CommandType.远程投币上分指令应答:
                    {
                        //if (CommandTypeList.Exists((CommandType type) => type == CommandType.电子币模式投币数据))
                        //{
                        //    ShowMsg(cmd.GetRecvData(DateTime.Now));
                        //}

                        PubLib.当前币业务指令数++;
                        int SN = BitConverter.ToUInt16(f.recvData, 6);          //用于清除重发队列
                    }
                    break;

                    case CommandType.远程被动退分解锁指令应答:
                    {
                        PubLib.当前币业务指令数++;
                        //远程退分指令应答
                    }
                    break;

                    case CommandType.机头卡片报警指令:
                    {
                        Recv机头卡片报警指令 cmd = new Recv机头卡片报警指令(f, DateTime.Now);
                        if (ListenRouterToken == f.Code && ListenDeviceAddress == cmd.机头地址 && CommandTypeList.Exists((CommandType type) => type == CommandType.机头卡片报警指令))
                        {
                            ShowMsg(cmd.GetRecvData(DateTime.Now));
                            ShowMsg(cmd.GetSendData());
                        }
                        SendData(cmd.SendData, recv.RemotePoint);
                    }
                    break;

                    case CommandType.IC卡模式退币数据:
                    case CommandType.IC卡模式投币数据:
                    {
                        Recv卡头进出币数据 cmd = new Recv卡头进出币数据(f, DateTime.Now);
                        if (ListenRouterToken == f.Code && ListenDeviceAddress == cmd.机头地址 && CommandTypeList.Exists((CommandType type) => type == CommandType.IC卡模式投币数据))
                        {
                            ShowMsg(cmd.GetRecvData(DateTime.Now));
                            ShowMsg(cmd.GetSendData());
                        }

                        SendData(cmd.SendData, recv.RemotePoint);
                    }
                    break;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 数据接收处理线程
        /// </summary>
        /// <param name="o"></param>
        void ProcessCommad(object o)
        {
            RecvObject recv = o as RecvObject;

            if (recv != null)
            {
                Console.WriteLine("收到:" + PubLib.Hex2String(recv.Data));
                DateTime time = DateTime.Now;

                FrameData f = new FrameData(recv.Data);
                SetRouteInfo(recv.Code, f.routeAddress, recv.RemotePoint);
                f.Code = recv.Code;
                DataAccess ac = new DataAccess();
                DataTable  dt = ac.ExecuteQueryReturnTable("select * from Base_DeviceInfo where DeviceType='0' and Status<>2 and Token='" + f.Code + "'"); //绑定所有空闲或正常的控制设备
                if (dt.Rows.Count > 0)
                {
                    PubLib.当前总指令数++;
                    //控制器合法
                    switch (f.commandType)
                    {
                    case CommandType.机头网络状态报告:
                    {
                        Recv机头网络状态报告 cmd = new Recv机头网络状态报告(f);
                        SendData(cmd.SendData, recv.RemotePoint);
                    }
                    break;

                    case CommandType.机头地址动态分配:
                    {
                        Recv机头地址动态分配 cmd = new Recv机头地址动态分配(f);
                        SendData(cmd.SendData, recv.RemotePoint);
                    }
                    break;

                    case CommandType.游戏机参数申请:
                    {
                        Recv游戏机参数申请 cmd = new Recv游戏机参数申请(f);
                        SendData(cmd.SendData, recv.RemotePoint);
                    }
                    break;

                    case CommandType.远程投币上分指令应答:
                    {
                        int SN = BitConverter.ToUInt16(f.recvData, 6);          //用于清除重发队列
                    }
                    break;

                    case CommandType.远程被动退分解锁指令应答:
                    {
                        //远程退分指令应答
                    }
                    break;

                    case CommandType.机头卡片报警指令:
                    {
                        Recv机头卡片报警指令 cmd = new Recv机头卡片报警指令(f, DateTime.Now);
                        SendData(cmd.SendData, recv.RemotePoint);
                    }
                    break;

                    case CommandType.IC卡模式退币数据:
                    case CommandType.IC卡模式投币数据:
                    {
                        Recv卡头进出币数据 cmd = new Recv卡头进出币数据(f, DateTime.Now);
                        SendData(cmd.SendData, recv.RemotePoint);
                    }
                    break;
                    }
                }
            }
        }