private bool ProcessOne(byte[] bufFrame, out string strErrMsg) { bool bIfSucc = false; strErrMsg = ""; uint iCardNo; CardData objCardData = null; Package.ECommandType eResponseType = Package.GetResponseType(bufFrame, out strErrMsg); switch (eResponseType) { case Package.ECommandType.WriteCard_Response: bIfSucc = Package.ParseBag_WriteCard(bufFrame, out iCardNo, out strErrMsg); _OnWriteCardReponse?.Invoke(iCardNo, strErrMsg); bIfSucc = true; break; case Package.ECommandType.ReadCard_Response: bIfSucc = Package.ParseBag_ReadCard(bufFrame, ref objCardData, out strErrMsg); _OnReadCardReponse?.Invoke(objCardData, strErrMsg); bIfSucc = true; break; case Package.ECommandType.ChsSelResponse: bIfSucc = Package.ParseBag_ChsSel(bufFrame, ref objCardData, out strErrMsg); _OnChsSelReponse?.Invoke(objCardData, strErrMsg); bIfSucc = true; break; case Package.ECommandType.ChsCleanResponse: bIfSucc = Package.ParseBag_ChsClean(bufFrame, out iCardNo, out strErrMsg); this._OnChsCleanReponse?.Invoke(iCardNo, strErrMsg); bIfSucc = true; break; default: break; } return(bIfSucc); }
private bool ProcessOne(byte[] bufFrame, out string strErrMsg) { bool bIfSucc = false; strErrMsg = ""; Package.ECommandType eResponseType = Package.GetResponseType(bufFrame, out strErrMsg); switch (eResponseType) { case Package.ECommandType.SwipingCard: SwipingCardData objSwipingCardData = new SwipingCardData(); IList <string> listResponseData = new List <string>(); bIfSucc = Package.ParseBag_SwipingCard(bufFrame, ref objSwipingCardData, out strErrMsg); if (bIfSucc) { SwipingCardData objSent = (objSwipingCardData != null) ? (SwipingCardData)objSwipingCardData.Clone() : null; _OnReceiveSwipingCard?.Invoke(objSent, strErrMsg); DoNotice(string.Format("接收刷卡数据正确"), bufFrame); //保存记录 SaveSwipingCardData(objSent); //响应 byte[] bArrTargetAddress = new byte[5]; byte[] bArrOrigialAddress = new byte[5]; Array.Copy(bufFrame, 5, bArrTargetAddress, 0, bArrTargetAddress.Length); Array.Copy(bufFrame, 10, bArrOrigialAddress, 0, bArrOrigialAddress.Length); //55 AA 00 0B 20 01 00 00 00 00 06 12 34 00 01 1E 主机链路层ACK byte[] bArrBag = Package.BuildBag_MainDeviceACK(bArrTargetAddress, bArrOrigialAddress); bIfSucc = SendCommand(bArrBag, out strErrMsg); DoNotice(string.Format("{0}{1}", "发送主机链路层ACK指令", (bIfSucc ? "成功" : "失败")), bArrBag); /* * Thread.Sleep(50);//停顿数50毫秒 * * //55 FF 00 0C 21 06 12 34 00 01 01 00 00 00 00 00 xx 主机应答 * byte[] bArrBag2 = Package.BuildBag_MainDeviceResponse(bArrTargetAddress, bArrOrigialAddress); * bIfSucc = SendCommand(bArrBag2, out strErrMsg); * DoNotice(string.Format("{0}{1}", "发送主机应答指令", (bIfSucc ? "成功" : "失败")), bArrBag2); * if (!(bArrBag2 == null || bArrBag2.Length == 0)) * { * this._LastReSendTime = DateTime.Now; * this._RetryCommandList.Add(new Model.RetryCommand(ScaleConverter.ByteArr2HexStr(bArrBag2).Replace(" ", ""), 1)); * } * //55 AA 00 0B 21 06 12 34 00 01 01 00 00 00 00 XX 刷卡头链路层ACK */ bIfSucc = true; } break; case Package.ECommandType.CardHeadDeviceACK: try { if (!(this._RetryCommandList == null || this._RetryCommandList.Count == 0)) { string strBuffHexStr = ""; string strCommandHexStr = ""; for (int i = this._RetryCommandList.Count - 1; i >= 0; i--) { Model.RetryCommand objCommand = (Model.RetryCommand) this._RetryCommandList[i]; if (objCommand != null) { strCommandHexStr = objCommand.CommandHexStr.Substring(10, 20); strBuffHexStr = ScaleConverter.ByteArr2HexStr(bufFrame).Replace(" ", "").Substring(10, 20); if (string.Compare(strCommandHexStr, strBuffHexStr) == 0) { this._RetryCommandList.RemoveAt(i); } } } } } catch (Exception err) { strErrMsg = err.Message; } DoNotice(string.Format("接收刷卡头链路层ACK指令"), bufFrame); bIfSucc = true; break; case Package.ECommandType.PingResponse: DeviceAddress objDeviceAddress = new DeviceAddress(); bIfSucc = Package.ParseBag_PingResponse(bufFrame, ref objDeviceAddress, out strErrMsg); if (bIfSucc) { DeviceAddress objSent = (objDeviceAddress != null) ? (DeviceAddress)objDeviceAddress.Clone() : null; _OnPingResponse?.Invoke(objSent, strErrMsg); //响应 byte[] bArrTargetAddress = new byte[5]; byte[] bArrOrigialAddress = new byte[5]; Array.Copy(bufFrame, 5, bArrTargetAddress, 0, bArrTargetAddress.Length); Array.Copy(bufFrame, 10, bArrOrigialAddress, 0, bArrOrigialAddress.Length); //Thread.Sleep(50);//停顿数50毫秒 //55 FF 00 0D 93 01 00 00 00 00 06 12 34 00 00 41 98 FE 从机PING应答 //55 AA 00 0B 93 01 00 00 00 00 06 12 34 00 00 09 AA 主机链路层应答 byte[] bArrBag = Package.BuildBag_MainDeviceACK4Ping(bArrTargetAddress, bArrOrigialAddress); bIfSucc = SendCommand(bArrBag, out strErrMsg); //DoNotice(string.Format("{0}{1}", "发送主机链路层ACK指令", (bIfSucc ? "成功" : "失败")), bArrBag); //_OnPingNotice?.Invoke(string.Format("发送Ping指令{0}", (bIfSucc ? "成功" : "失败")), bArrBag); //if (_OnPingNotice != null) _OnPingNotice(string.Format("发送主机链路层ACK指令{0}", (bIfSucc ? "成功" : "失败")), bArrBag); } break; case Package.ECommandType.MainDeviceACK4PingResponse: DeviceAddress objDeviceAddress1 = new DeviceAddress(); bIfSucc = Package.ParseBag_MainDeviceACK4PingResponse(bufFrame, ref objDeviceAddress1, out strErrMsg); if (bIfSucc) { DeviceAddress objSent = (objDeviceAddress1 != null) ? (DeviceAddress)objDeviceAddress1.Clone() : null; _OnMainDeviceACK4PingResponse?.Invoke(objSent, strErrMsg); } break; default: strErrMsg = "无效数据"; bIfSucc = false; break; } return(bIfSucc); }