/// <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; } } } }
/// <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; } } } }
/// <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; } } } }