コード例 #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;

                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;
                    }
                }
            }
        }
コード例 #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;
                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;
                    }
                }
            }
        }
コード例 #3
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);
                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);
                    }
                    break;

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

                    case CommandType.游戏机参数申请:
                    {
                        Recv游戏机参数申请 cmd = new Recv游戏机参数申请(f);
                        SendData(cmd.SendData);
                    }
                    break;
                        //case CommandType.IC卡模式会员余额查询:
                        //    {
                        //        RecvIC卡模式会员余额查询 cmd = new RecvIC卡模式会员余额查询(f, time);
                        //        if (cmd.IsSuccess)
                        //        {
                        //            object obj = null;
                        //            int res = CheckRepeat(f.Code, cmd.机头地址, cmd.IC卡号码, CommandType.IC卡模式投币数据, ref obj, cmd.流水号);
                        //            if (res == 0)
                        //            {
                        //                //未处理指令
                        //                //处理指令
                        //                cmd.Process();
                        //                //加入重复性检查队列
                        //                InsertRepeat(f.Code, cmd.机头地址, cmd.IC卡号码, CommandType.IC卡模式投币数据, CommandType.IC卡模式投币数据应答, cmd.应答数据, cmd.流水号, time);
                        //            }
                        //            else if (res == 1)
                        //            {
                        //                //已处理过指令
                        //                cmd.应答数据 = (AskIC卡模式会员余额查询)obj;
                        //                PubLib.当前IC卡查询重复指令数++;
                        //            }
                        //            else
                        //            {
                        //                //遇到错误退出
                        //                return;
                        //            }
                        //        }
                        //    }
                        //    break;
                    }
                }
            }
        }