public object deviceControl(Dictionary <string, object> dicParas) { string errMsg = string.Empty; string token = dicParas.ContainsKey("token") ? dicParas["token"].ToString() : string.Empty; string mcuid = dicParas.ContainsKey("mcuid") ? dicParas["mcuid"].ToString() : string.Empty; string icCardId = dicParas.ContainsKey("icCardId") ? dicParas["icCardId"].ToString() : string.Empty; string action = dicParas.ContainsKey("controlAction") ? dicParas["controlAction"].ToString() : string.Empty; string coins = dicParas.ContainsKey("coins") ? dicParas["coins"].ToString() : string.Empty; UDPClientItemBusiness.ClientItem item = XCCloudService.SocketService.UDP.ClientList.ClientListObj.Where <UDPClientItemBusiness.ClientItem>(p => p.gID.Equals(token)).FirstOrDefault <UDPClientItemBusiness.ClientItem>(); if (item == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "雷达token不存在")); } StoreBusiness storeBusiness = new StoreBusiness(); StoreCacheModel storeCacheModel = null; if (!storeBusiness.IsEffectiveStore(item.StoreID, ref storeCacheModel, out errMsg)) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "门店不存在")); } IMemberService memberService = BLLContainer.Resolve <IMemberService>(storeCacheModel.StoreDBName); var memberlist = memberService.GetModels(x => x.ICCardID.ToString() == icCardId).FirstOrDefault <t_member>(); if (memberlist == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "手机号码无效")); } //判断设备状态是否为启用状态 XCCloudService.BLL.IBLL.XCGame.IDeviceService ids = BLLContainer.Resolve <XCCloudService.BLL.IBLL.XCGame.IDeviceService>(storeCacheModel.StoreDBName); var menlist = ids.GetModels(p => p.MCUID.Equals(mcuid, StringComparison.OrdinalIgnoreCase)).FirstOrDefault <XCCloudService.Model.XCGame.t_device>(); if (menlist == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "设备不存在")); } if (menlist.state != "启用") { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "设备未启用")); } string sn = UDPSocketAnswerBusiness.GetSN(); string orderId = System.Guid.NewGuid().ToString("N"); DeviceControlRequestDataModel deviceControlModel = new DeviceControlRequestDataModel(item.StoreID, memberlist.Mobile, icCardId, item.Segment, mcuid, action, int.Parse(coins), sn, orderId, storeCacheModel.StorePassword, 0, ""); MPOrderBusiness.AddTCPAnswerOrder(orderId, memberlist.Mobile, int.Parse(coins), action, icCardId, item.StoreID); if (!DataFactory.SendDataToRadar(deviceControlModel, out errMsg)) { ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.F, "", Result_Code.T, errMsg); } var obj = new { orderId = orderId, sn = sn }; return(ResponseModelFactory.CreateAnonymousSuccessModel(isSignKeyReturn, obj)); }
public static void StoreQueryNotify(string requestDataJson, UDPClientItemBusiness.ClientItem item, int packId, int packNum) { object outModel = null; object requestModel = null; DataFactory.CreateResponseProtocolData(TransmiteEnum.远程门店账目应答通知指令, requestDataJson, ref requestModel, ref outModel, packId); StoreQueryResultNotifyRequestModel rnrModel = (StoreQueryResultNotifyRequestModel)(requestModel); StoreQueryNotifyOutParamsModel responseOutModel = (StoreQueryNotifyOutParamsModel)outModel; Send(((IPEndPoint)item.remotePoint).Address.ToString(), ((IPEndPoint)item.remotePoint).Port, ((StoreQueryNotifyOutParamsModel)outModel).ResponsePackages); StoreQueryResultNotifyResponseModel responseDataModel = (StoreQueryResultNotifyResponseModel)(responseOutModel.ResponseModel); UDPSocketStoreQueryAnswerModel answerModel = UDPSocketStoreQueryAnswerBusiness.GetAnswerModel(rnrModel.SN, 1); if (responseDataModel != null && responseDataModel.Result_Code == "1" && answerModel != null) { //如果应答结果正确,清除应答缓存 //if (packId == packNum) //{ answerModel.Status = 2; answerModel.Result = rnrModel.TDList; //} } SignalrServerToClient.BroadcastMessage(Convert.ToInt32(TransmiteEnum.远程门店账目应答通知指令), "远程门店账目应答通知指令", answerModel.RadarToken, requestDataJson); }
public static void LotteryOperateNotify(string requestDataJson, UDPClientItemBusiness.ClientItem item) { string routeDeivceToken = string.Empty; string password = string.Empty; string errMsg = string.Empty; //获取雷达通知请求数据模式 LotteryOperateResultNotifyRequestModel requestDataModel = JsonHelper.DataContractJsonDeserializer <LotteryOperateResultNotifyRequestModel>(requestDataJson); UDPSocketCommonQueryAnswerModel asnwerModel = UDPSocketCommonQueryAnswerBusiness.GetAnswerModel(requestDataModel.SN); if (requestDataModel.Result_Data == null) { requestDataModel.Result_Data = ""; } //验证MD5 if (!SignKeyHelper.CheckSignKey(requestDataModel, asnwerModel.StorePassword)) { errMsg = "签名不正确"; return; } asnwerModel.Status = 1; asnwerModel.Result = requestDataModel; SignalrServerToClient.BroadcastMessage(Convert.ToInt32(TransmiteEnum.远程门店彩票操作请求响应), "远程门店彩票操作请求响应", asnwerModel.RadarToken, requestDataJson); }
public static void RadarRegister(string requestDataJson, UDPClientItemBusiness.ClientItem item) { //通知服务器上线 object outModel = null; object requestModel = null; bool bRegister = false; DataFactory.CreateResponseProtocolData(TransmiteEnum.雷达注册授权, requestDataJson, ref requestModel, ref outModel); RadarRegisterOutParamsModel parmasModel = (RadarRegisterOutParamsModel)outModel; if (!string.IsNullOrEmpty(parmasModel.Token)) { bRegister = true; item.gID = parmasModel.Token; item.StoreID = parmasModel.StoreId; item.Segment = parmasModel.Segment; ClientList.UpdateClient(item); } Send(((IPEndPoint)item.remotePoint).Address.ToString(), ((IPEndPoint)item.remotePoint).Port, parmasModel.ResponsePackages); string logTxt = "[接收:" + requestDataJson + "]" + "[响应:" + Utils.SerializeObject(parmasModel) + "]" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); UDPLogHelper.SaveRadarRegisterLog(((IPEndPoint)item.remotePoint).Address.ToString(), ((IPEndPoint)item.remotePoint).Port, parmasModel.StoreId, parmasModel.Segment, parmasModel.Token, bRegister, requestDataJson, parmasModel.ResponseJson, logTxt); string message = "[接收:" + requestDataJson + "]" + "[响应:" + parmasModel.ResponseJson + "]"; SignalrServerToClient.BroadcastMessageByRadarRegister("雷达注册授权", item.StoreID, item.Segment, message, System.DateTime.Now); }
public object radarHeat(Dictionary <string, object> dicParas) { string errMsg = string.Empty; string token = dicParas.ContainsKey("token") ? dicParas["token"].ToString() : string.Empty; UDPClientItemBusiness.ClientItem item = XCCloudService.SocketService.UDP.ClientList.ClientListObj.Where <UDPClientItemBusiness.ClientItem>(p => p.gID.Equals(token)).FirstOrDefault <UDPClientItemBusiness.ClientItem>(); if (item == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "雷达token不存在")); } StoreBusiness storeBusiness = new StoreBusiness(); StoreCacheModel storeCacheModel = null; if (!storeBusiness.IsEffectiveStore(item.StoreID, ref storeCacheModel, out errMsg)) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "门店不存在")); } ClientService service = new ClientService(); service.Connection(); RadarHeartbeatRequestDataModel dataModel = new RadarHeartbeatRequestDataModel(token, ""); byte[] data = DataFactory.CreateRequesProtocolData(TransmiteEnum.雷达心跳, dataModel); service.Send(data); var obj = new { token = token }; return(ResponseModelFactory.CreateAnonymousSuccessModel(isSignKeyReturn, obj)); }
public static void DeviceControl(string requestDataJson, UDPClientItemBusiness.ClientItem item) { object outModel = null; object requestModel = null; DataFactory.CreateResponseProtocolData(TransmiteEnum.远程设备控制指令, requestDataJson, ref requestModel, ref outModel); DeviceControlAnswerRequestDataModel requestDataModel = (DeviceControlAnswerRequestDataModel)requestModel; DeviceControlOutParmasModel responseDataModel = (DeviceControlOutParmasModel)outModel; UDPSocketAnswerModel answerModel = null; string orderId = string.Empty; bool bSuccess = GetResponseModelResultCode(responseDataModel.ResponseModel); answerModel = UDPSocketAnswerBusiness.GetAnswerModel(requestDataModel.SN); if (requestDataModel.Result_Code == "1" && bSuccess && UDPSocketAnswerBusiness.ExistSN(requestDataModel.SN)) { //如果应答结果正确,清除应答缓存,添加对手机号的接口调用锁定 UDPSocketAnswerBusiness.Remove(requestDataModel.SN); } string logTxt = "[接收:" + requestDataJson + "]" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); string radarToken = string.Empty; if (answerModel != null && XCGameRadarDeviceTokenBusiness.GetRouteDeviceToken(requestDataModel.StoreId, answerModel.Segment, out radarToken)) { } UDPLogHelper.SaveUDPDeviceControlLog(requestDataModel.StoreId, requestDataModel.OrderId, ((IPEndPoint)item.remotePoint).Address.ToString(), ((IPEndPoint)item.remotePoint).Port, requestDataModel.SN, requestDataJson, responseDataModel.ResponseJson, bSuccess, logTxt); string message = "[接收:" + requestDataJson + "]" + "[响应:" + responseDataModel.ResponseJson + "]"; SignalrServerToClient.BroadcastMessage(Convert.ToInt32(TransmiteEnum.雷达心跳), "远程设备控制指令响应", radarToken, message, System.DateTime.Now); }
static void CommandProcess() { while (true) { if (queueRecv.Count > 0) { try { UDPClientItemBusiness.ClientItem item = queueRecv.Dequeue(); List <byte> decodeData = new List <byte>(item.data); ServiceObjectConvert.转定义解码(ref decodeData); int len = BitConverter.ToUInt16(decodeData.ToArray(), 1); switch ((TransmiteEnum)decodeData[0]) { case TransmiteEnum.雷达注册授权响应: //心跳接收 ConnectRecvTime = DateTime.Now; break; default: break; } } catch (Exception ex) { Console.WriteLine(ex); } } else { Thread.Sleep(50); } } }
static void CheckOnline(object obj) { while (true) { try { UDPClientItemBusiness.ClientItem item = (UDPClientItemBusiness.ClientItem)obj; //非雷达注册客户都清理了 var clients = clientList.Where(p => p.HeatTime < DateTime.Now.AddSeconds(0 - XCCloudService.Common.CommonConfig.RadarOffLineTimeLong * 2)); if (clients.Count() > 0) { foreach (UDPClientItemBusiness.ClientItem client in clients) { clientList.Remove(client); CallBackEvent.ClientDisconnect(client.gID); } } } catch (Exception ex) { Console.WriteLine(ex); } Thread.Sleep(5000); } }
public static void RadarHeat(string requestDataJson, UDPClientItemBusiness.ClientItem item) { object outModel = null; object requestModel = null; DataFactory.CreateResponseProtocolData(TransmiteEnum.雷达心跳, requestDataJson, ref requestModel, ref outModel); RadarHeartbeatOutParamsModel outDataModel = (RadarHeartbeatOutParamsModel)outModel; Send(((IPEndPoint)item.remotePoint).Address.ToString(), ((IPEndPoint)item.remotePoint).Port, ((RadarHeartbeatOutParamsModel)outModel).ResponsePackages); RadarHeartbeatRequestDataModel requestDataModel = (RadarHeartbeatRequestDataModel)requestModel; //记录心跳日志 bool bHeadSuccess = false; if (outDataModel.ResponseModel.GetType().Name.Equals("ComonErrorResponseModel")) { ComonErrorResponseModel model = (ComonErrorResponseModel)(outDataModel.ResponseModel); bHeadSuccess = model.Result_Code == "1" ? true : false; } else if (outDataModel.ResponseModel.GetType().Name.Equals("ComonSuccessResponseModel")) { ComonSuccessResponseModel model = (ComonSuccessResponseModel)(outDataModel.ResponseModel); bHeadSuccess = model.Result_Code == "1" ? true : false; } string logTxt = "[接收:" + requestDataJson + "]" + "[响应:" + Utils.SerializeObject(outModel) + "]" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); UDPLogHelper.SaveRadarHeatLog(((IPEndPoint)item.remotePoint).Address.ToString(), ((IPEndPoint)item.remotePoint).Port, requestDataModel.StoreId, requestDataModel.Segment, requestDataModel.Token, bHeadSuccess, requestDataJson, outDataModel.ResponseJson, logTxt); ClientList.UpdateClientHeatTime(requestDataModel.Token); string message = "[接收:" + requestDataJson + "]" + "[响应:" + outDataModel.ResponseJson + "]"; SignalrServerToClient.BroadcastMessage(Convert.ToInt32(TransmiteEnum.雷达心跳), "雷达心跳", requestDataModel.Token, message, System.DateTime.Now); }
public static void DeviceStateChange(string requestDataJson, UDPClientItemBusiness.ClientItem item) { object outModel = null; object requestModel = null; DataFactory.CreateResponseProtocolData(TransmiteEnum.设备状态变更通知, requestDataJson, ref requestModel, ref outModel); DeviceStateOutParamsModel responseOutModel = (DeviceStateOutParamsModel)outModel; Send(((IPEndPoint)item.remotePoint).Address.ToString(), ((IPEndPoint)item.remotePoint).Port, ((DeviceStateOutParamsModel)outModel).ResponsePackages); DeviceStateRequestDataModel requestDataModel = (DeviceStateRequestDataModel)requestModel; //记录心跳日志 bool bChangeSuccess = false; if (responseOutModel.ResponseModel.GetType().Name.Equals("ComonErrorResponseModel")) { ComonErrorResponseModel model = (ComonErrorResponseModel)(responseOutModel.ResponseModel); bChangeSuccess = model.Result_Code == "1" ? true : false; } else if (responseOutModel.ResponseModel.GetType().Name.Equals("ComonSuccessResponseModel")) { ComonSuccessResponseModel model = (ComonSuccessResponseModel)(responseOutModel.ResponseModel); bChangeSuccess = model.Result_Code == "1" ? true : false; } string logTxt = "[接收:" + requestDataJson + "]" + "[响应:" + Utils.SerializeObject(outModel) + "]" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); UDPLogHelper.SaveDeviceStateChangeLog(((IPEndPoint)item.remotePoint).Address.ToString(), ((IPEndPoint)item.remotePoint).Port, requestDataModel.StoreId, requestDataModel.Token, requestDataModel.MCUId, requestDataModel.Status, bChangeSuccess, requestDataJson, responseOutModel.ResponseJson, logTxt); string message = "[接收:" + requestDataJson + "]" + "[响应:" + responseOutModel.ResponseJson + "]"; SignalrServerToClient.BroadcastMessage(Convert.ToInt32(TransmiteEnum.设备状态变更通知), "设备状态变更通知", requestDataModel.Token, message, System.DateTime.Now); }
public static void ReceiveCallback(IAsyncResult ar) { allDone.Set(); StateObject so = (StateObject)ar.AsyncState; IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint tempRemoteEP = (EndPoint)sender; int readBytes = 0; try { readBytes = so.socket.EndReceiveFrom(ar, ref tempRemoteEP); } catch (ObjectDisposedException oe) { Console.WriteLine(oe); throw oe; } catch (SocketException se) { Console.WriteLine(se); LogHelper.SaveLog(TxtLogType.UPDService, TxtLogContentType.Exception, TxtLogFileType.Time, "ReceiveCallback:" + se.Message); throw se; } catch (Exception e) { Console.WriteLine(e); LogHelper.SaveLog(TxtLogType.UPDService, TxtLogContentType.Exception, TxtLogFileType.Time, "ReceiveCallback:" + e.Message); // 获得接收失败信息 throw e; } if (readBytes > 0) { //接受处理代码 byte[] mybytes = new byte[readBytes]; Array.Copy(so.buffer, mybytes, readBytes); if (DataFactory.IsProtocolData(mybytes)) { UDPClientItemBusiness.ClientItem item = new UDPClientItemBusiness.ClientItem() { data = mybytes, remotePoint = tempRemoteEP }; lock (queueRecv) { queueRecv.Enqueue(item); } } //收到数据处理 so.socket.BeginReceiveFrom(so.buffer, 0, StateObject.BUF_SIZE, SocketFlags.None, ref tempRemoteEP, new AsyncCallback(ReceiveCallback), so); } else { LogHelper.SaveLog(TxtLogType.UPDService, TxtLogContentType.Exception, TxtLogFileType.Time, "readBytes = 0:" + tempRemoteEP.Serialize()); } }
public static void UpdateClientHeatTime(string radarToken) { UDPClientItemBusiness.ClientItem curClient = new UDPClientItemBusiness.ClientItem(); var clients = clientList.Where(p => p.gID.Equals(radarToken)); if (clients.Count() > 0) { var client = clients.First(); client.HeatTime = DateTime.Now; } }
public static void CloseClient(UDPClientItemBusiness.ClientItem item) { UDPClientItemBusiness.ClientItem curClient = new UDPClientItemBusiness.ClientItem(); var clients = clientList.Where(p => p.gID == item.gID); if (clients.Count() > 0) { curClient = clients.First(); clientList.Remove(curClient); } }
/// <summary> /// 获取客户端 /// </summary> /// <param name="radarToken"></param> /// <returns></returns> public static UDPClientItemBusiness.ClientItem GetClientItem(string radarToken) { UDPClientItemBusiness.ClientItem clientItem = ClientList.ClientListObj.Where <UDPClientItemBusiness.ClientItem>(p => p.gID.Equals(radarToken)).FirstOrDefault <UDPClientItemBusiness.ClientItem>(); if (clientItem == null) { return(null); } else { return(clientItem); } }
public object radarRegister(Dictionary <string, object> dicParas) { string errMsg = string.Empty; string storeId = dicParas.ContainsKey("storeId") ? dicParas["storeId"].ToString() : string.Empty; string segment = dicParas.ContainsKey("segment") ? dicParas["segment"].ToString() : string.Empty; XCGameManaAdminUserTokenModel tokenModel = (XCGameManaAdminUserTokenModel)(dicParas[Constant.XCGameManamAdminUserToken]); if (tokenModel == null) { errMsg = "用户没有授权"; return(false); } StoreBusiness storeBusiness = new StoreBusiness(); StoreCacheModel storeCacheModel = null; if (!storeBusiness.IsEffectiveStore(storeId, ref storeCacheModel, out errMsg)) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "门店不存在")); } ClientService service = new ClientService(); service.Connection(); RadarRegisterRequestDataModel dataModel = new RadarRegisterRequestDataModel(storeId, segment); SignKeyHelper.SetSignKey(dataModel, storeCacheModel.StorePassword); byte[] data = DataFactory.CreateRequesProtocolData(TransmiteEnum.雷达注册授权, dataModel); service.Send(data); System.Threading.Thread.Sleep(5000); int count = 0; UDPClientItemBusiness.ClientItem item = XCCloudService.SocketService.UDP.ClientList.ClientListObj.Where <UDPClientItemBusiness.ClientItem>(p => p.StoreID.Equals(storeId) && p.Segment.Equals(segment)).FirstOrDefault <UDPClientItemBusiness.ClientItem>(); while (item == null && count < 10) { item = XCCloudService.SocketService.UDP.ClientList.ClientListObj.Where <UDPClientItemBusiness.ClientItem>(p => p.StoreID.Equals(storeId) && p.Segment.Equals(segment)).FirstOrDefault <UDPClientItemBusiness.ClientItem>(); System.Threading.Thread.Sleep(1000); count++; } if (item == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "注册失败")); } var obj = new { token = item.gID }; return(ResponseModelFactory.CreateAnonymousSuccessModel(isSignKeyReturn, obj)); }
public static void SendCommand(string gID, TransmiteEnum cType, object data) { UDPClientItemBusiness.ClientItem curClient = new UDPClientItemBusiness.ClientItem(); var clients = clientList.Where(p => p.gID == gID); if (clients.Count() > 0) { curClient = clients.First(); byte[] dat = ServiceObjectConvert.SerializeObject(data); byte[] sendData = ServiceObjectConvert.协议编码((byte)cType, dat); Server.Send(((IPEndPoint)curClient.remotePoint).Address.ToString(), ((IPEndPoint)curClient.remotePoint).Port, sendData); } }
public static void CattleMemberCardQueryNotify(string requestDataJson, UDPClientItemBusiness.ClientItem item) { string errMsg = string.Empty; //获取雷达通知请求数据模式 CattleMemberCardQueryResultNotifyRequestModel requestDataModel = JsonHelper.DataContractJsonDeserializer <CattleMemberCardQueryResultNotifyRequestModel>(requestDataJson); UDPSocketCommonQueryAnswerModel asnwerModel = UDPSocketCommonQueryAnswerBusiness.GetAnswerModel(requestDataModel.SN); //验证MD5 if (!SignKeyHelper.CheckSignKey(requestDataModel, asnwerModel.StorePassword)) { errMsg = "签名不正确"; return; } asnwerModel.Status = 1; asnwerModel.Result = requestDataModel; SignalrServerToClient.BroadcastMessage(Convert.ToInt32(TransmiteEnum.黄牛卡信息查询请求响应), "黄牛卡信息查询请求响应", asnwerModel.RadarToken, requestDataJson); }
public static void StoreQuery(string requestDataJson, UDPClientItemBusiness.ClientItem item) { object outModel = null; object requestModel = null; DataFactory.CreateResponseProtocolData(TransmiteEnum.远程门店账目查询指令, requestDataJson, ref requestModel, ref outModel); StoreQueryResponseModel requestDataModel = (StoreQueryResponseModel)requestModel; StoreQueryOutParamsModel responseOutModel = (StoreQueryOutParamsModel)outModel; //验证相应模式 bool bSuccess = false; if (responseOutModel.ResponseModel.GetType().Name.Equals("ComonErrorResponseModel")) { ComonErrorResponseModel model = (ComonErrorResponseModel)(responseOutModel.ResponseModel); bSuccess = model.Result_Code == "1" ? true : false; } else if (responseOutModel.ResponseModel.GetType().Name.Equals("ComonSuccessResponseModel")) { ComonSuccessResponseModel model = (ComonSuccessResponseModel)(responseOutModel.ResponseModel); bSuccess = model.Result_Code == "1" ? true : false; } else { StoreQueryResponseModel responseDataModel = (StoreQueryResponseModel)(responseOutModel.ResponseModel); bSuccess = responseDataModel.Result_Code == "1" ? true : false; } UDPSocketStoreQueryAnswerModel answerModel = UDPSocketStoreQueryAnswerBusiness.GetAnswerModel(requestDataModel.SN); if (bSuccess && answerModel != null) { //如果应答结果正确,修改状态 answerModel.Status = 1; } string message = "[接收:" + requestDataJson + "]" + "[响应:" + responseOutModel.ResponseJson + "]"; SignalrServerToClient.BroadcastMessage(Convert.ToInt32(TransmiteEnum.远程门店账目查询指令), "远程门店账目查询指令响应", answerModel.RadarToken, message); }
public static void UpdateClient(UDPClientItemBusiness.ClientItem item) { if (tCheck == null) { tCheck = new Thread(new ParameterizedThreadStart(CheckOnline)) { IsBackground = true, Name = "在线检查线程" }; tCheck.Start(item); } UDPClientItemBusiness.ClientItem curClient = new UDPClientItemBusiness.ClientItem(); var clients = clientList.Where(p => p.Segment == item.Segment && p.StoreID == item.StoreID); if (clients.Count() > 0) { curClient = clients.First(); curClient.data = item.data; curClient.gID = item.gID; curClient.remotePoint = item.remotePoint; curClient.curTime = DateTime.Now; curClient.HeatTime = DateTime.Now; curClient.StoreID = item.StoreID; curClient.Segment = item.Segment; } else { curClient.data = item.data; curClient.gID = item.gID; curClient.remotePoint = item.remotePoint; curClient.curTime = DateTime.Now; curClient.HeatTime = DateTime.Now; curClient.StoreID = item.StoreID; curClient.Segment = item.Segment; clientList.Add(curClient); } }
static void CommandProcess() { StringBuilder sb = new StringBuilder(); while (true) { if (queueRecv.Count > 0) { try { sb = new StringBuilder(); UDPClientItemBusiness.ClientItem item = null; lock (queueRecv) { item = queueRecv.Dequeue(); if (item == null) { sb.Append("queueRecv出列为空" + Environment.NewLine); } } if (item != null) { int requestTransmiteEnumValue = 0; string data = string.Empty; string clientId = string.Empty; object outModel = null; int packId = 0; int packNum = 0; DataFactory.GetProtocolData(item.data, out requestTransmiteEnumValue, out data, out packId, out packNum); //Console.WriteLine("接收数据 [" + ((TransmiteEnum)requestTransmiteEnumValue).ToString() + "]:" + data); switch ((TransmiteEnum)requestTransmiteEnumValue) { case TransmiteEnum.雷达注册授权: CommandHandler.RadarRegister(data, item); break; case TransmiteEnum.设备状态变更通知: CommandHandler.DeviceStateChange(data, item); break; case TransmiteEnum.雷达心跳: CommandHandler.RadarHeat(data, item); break; case TransmiteEnum.远程设备控制指令响应: CommandHandler.DeviceControl(data, item); break; case TransmiteEnum.雷达通知指令: CommandHandler.RadarNotify(data, item); break; case TransmiteEnum.远程门店账目查询指令响应: CommandHandler.StoreQuery(data, item); break; case TransmiteEnum.远程门店账目应答通知指令: CommandHandler.StoreQueryNotify(data, item, packId, packNum); break; case TransmiteEnum.远程门店会员卡数据请求响应: CommandHandler.MemberQueryNotify(data, item); break; case TransmiteEnum.远程门店门票数据请求响应: CommandHandler.TicketQueryNotify(data, item); break; case TransmiteEnum.远程门店门票操作请求响应: CommandHandler.TicketOperateNotify(data, item); break; case TransmiteEnum.远程门店彩票数据请求响应: CommandHandler.LotteryQueryNotify(data, item); break; case TransmiteEnum.远程门店彩票操作请求响应: CommandHandler.LotteryOperateNotify(data, item); break; case TransmiteEnum.远程门店出票条码数据请求响应: CommandHandler.OutTicketQueryNotify(data, item); break; case TransmiteEnum.远程门店出票条码操作请求响应: CommandHandler.OutTicketOperateNotify(data, item); break; case TransmiteEnum.黄牛卡信息查询请求响应: CommandHandler.CattleMemberCardQueryNotify(data, item); break; case TransmiteEnum.远程门店会员转账操作请求响应: CommandHandler.MemberTransOperateNotify(data, item); break; case TransmiteEnum.远程门店运行参数数据请求响应: CommandHandler.ParamQueryNotify(data, item); break; case TransmiteEnum.远程门店员工手机号校验请求响应: CommandHandler.UserPhoneQueryNotify(data, item); break; default: break; } } } catch (Exception ex) { Console.WriteLine(ex); string exMsg = string.Format("{0}{1}{2}{3}", "CommandProcess:", Utils.GetException(ex), "sb参数值:", sb.ToString()); LogHelper.SaveLog(TxtLogType.UPDService, TxtLogContentType.Exception, TxtLogFileType.Time, exMsg); } } else { Thread.Sleep(50); } } }
public static void RadarNotify(string requestDataJson, UDPClientItemBusiness.ClientItem item) { object outModel = null; object requestModel = null; DataFactory.CreateResponseProtocolData(TransmiteEnum.雷达通知指令, requestDataJson, ref requestModel, ref outModel); RadarNotifyRequestModel rnrModel = Utils.DataContractJsonDeserializer <RadarNotifyRequestModel>(requestDataJson); RadarNotifyOutParamsModel responseOutModel = (RadarNotifyOutParamsModel)outModel; XCGameRadarDeviceTokenModel radarTokenModel = XCGameRadarDeviceTokenBusiness.GetRadarDeviceTokenModel(rnrModel.Token); Send(((IPEndPoint)item.remotePoint).Address.ToString(), ((IPEndPoint)item.remotePoint).Port, ((RadarNotifyOutParamsModel)outModel).ResponsePackages); RadarNotifyRequestModel requestDataModel = (RadarNotifyRequestModel)requestModel; //验证相应模式 bool bCoinSuccess = false; if (responseOutModel.ResponseModel.GetType().Name.Equals("ComonErrorResponseModel")) { ComonErrorResponseModel model = (ComonErrorResponseModel)(responseOutModel.ResponseModel); bCoinSuccess = model.Result_Code == "1" ? true : false; } else if (responseOutModel.ResponseModel.GetType().Name.Equals("ComonSuccessResponseModel")) { ComonSuccessResponseModel model = (ComonSuccessResponseModel)(responseOutModel.ResponseModel); bCoinSuccess = model.Result_Code == "1" ? true : false; } //记录日志 string logTxt = "[接收:" + requestDataJson + "]" + "[响应:" + responseOutModel.ResponseJson + "]" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); UDPLogHelper.SaveUDPRadarNotifyLog(requestDataModel.StoreId, requestDataModel.OrderId, requestDataModel.Token, requestDataModel.SN, int.Parse(requestDataModel.Coins), int.Parse(requestDataModel.Action), requestDataModel.Result, ((IPEndPoint)item.remotePoint).Address.ToString(), ((IPEndPoint)item.remotePoint).Port, requestDataJson, responseOutModel.ResponseJson, bCoinSuccess, logTxt); string message = "[接收:" + requestDataJson + "]" + "[响应:" + responseOutModel.ResponseJson + "]"; SignalrServerToClient.BroadcastMessage(Convert.ToInt32(TransmiteEnum.雷达通知指令), "雷达通知指令", requestDataModel.Token, message, System.DateTime.Now); if (rnrModel.Result == "成功" && bCoinSuccess) { //出币后向客户端发送成功信息 try { TCPAnswerOrderModel taoModel = null; //如果订单缓存信息存在 if (MPOrderBusiness.ExistTCPAnswerOrder(rnrModel.OrderId, ref taoModel)) { string coinType = CoinBusiess.GetCoinOpetionName(taoModel.Action); string notifyMsg = string.Empty; string answerMsgType = string.Empty; string errMsg = string.Empty; SAppPushMessageCacheModel msgModel = null; if (taoModel.Action == "1") { notifyMsg = "成功出币" + taoModel.Coins.ToString() + "个"; answerMsgType = ((int)(TCPAnswerMessageType.出币)).ToString(); if (SAppPushMessageBusiness.GetModel(rnrModel.OrderId, ref msgModel)) { if (msgModel.SAppMessageType == SAppMessageType.MemberCoinsOperationNotify) { MemberCoinsOperationNotifyDataModel dataModel = (MemberCoinsOperationNotifyDataModel)(msgModel.DataObj); SAppMessageMana.PushMemberCoinsMsg(msgModel.OpenId, msgModel.SAppAccessToken, "提币", dataModel.StoreName, dataModel.Mobile, dataModel.ICCardId, int.Parse(requestDataModel.Coins), dataModel.LastBalance, msgModel.FormId, "", out errMsg); } else if (msgModel.SAppMessageType == SAppMessageType.MemberFoodSaleNotify) { MemberFoodSaleNotifyDataModel dataModel = (MemberFoodSaleNotifyDataModel)(msgModel.DataObj); SAppMessageMana.PushMemberFoodSaleMsg(msgModel.OpenId, msgModel.SAppAccessToken, "购币", dataModel.StoreName, msgModel.Mobile, msgModel.OrderId, dataModel.FoodName, dataModel.FoodNum, dataModel.ICCardId, dataModel.Money, dataModel.Coins, msgModel.FormId, out errMsg); } } } else if (taoModel.Action == "2") { notifyMsg = "成功存币" + requestDataModel.Coins.ToString() + "个"; answerMsgType = ((int)(TCPAnswerMessageType.存币)).ToString(); IconOutLockBusiness.RemoveByNoTimeList(taoModel.Mobile); if (int.Parse(requestDataModel.Coins) > 0) { try { int lastBalance = 0; string storeName = string.Empty; string mobile = string.Empty; if (MemberPreservationBusiness.PreservationBusiness(int.Parse(taoModel.ICCardId), int.Parse(taoModel.StoreId), int.Parse(requestDataModel.Coins), out lastBalance, out storeName, out mobile)) { if (SAppPushMessageBusiness.GetModel(rnrModel.OrderId, ref msgModel)) { MemberCoinsOperationNotifyDataModel dataModel = (MemberCoinsOperationNotifyDataModel)(msgModel.DataObj); SAppMessageMana.PushMemberCoinsMsg(msgModel.OpenId, msgModel.SAppAccessToken, "存币", dataModel.StoreName, dataModel.Mobile, dataModel.ICCardId, int.Parse(requestDataModel.Coins), dataModel.LastBalance, msgModel.FormId, "", out errMsg); } } } catch (Exception e) { LogHelper.SaveLog(TxtLogType.Api, TxtLogContentType.Debug, TxtLogFileType.Day, "MemberPreservationBusiness.PreservationBusiness:" + e.Message); } } } else if (taoModel.Action == "6")//投币 { MemberCoinsOperationNotifyDataModel dataModel = (MemberCoinsOperationNotifyDataModel)(msgModel.DataObj); SAppMessageMana.PushMemberCoinsMsg(msgModel.OpenId, msgModel.SAppAccessToken, "投币", dataModel.StoreName, dataModel.Mobile, dataModel.ICCardId, int.Parse(requestDataModel.Coins), dataModel.LastBalance, msgModel.FormId, "", out errMsg); } else if (taoModel.Action == "7")//退币 { MemberCoinsOperationNotifyDataModel dataModel = (MemberCoinsOperationNotifyDataModel)(msgModel.DataObj); SAppMessageMana.PushMemberCoinsMsg(msgModel.OpenId, msgModel.SAppAccessToken, "退币", dataModel.StoreName, dataModel.Mobile, dataModel.ICCardId, int.Parse(requestDataModel.Coins), dataModel.LastBalance, msgModel.FormId, "", out errMsg); } var dataObj = new { result_code = "1", answerMsg = notifyMsg, answerMsgType = answerMsgType }; MPOrderBusiness.RemoveTCPAnswerOrder(rnrModel.OrderId); TCPServiceBusiness.Send(taoModel.Mobile, dataObj); } } catch (Exception ex) { LogHelper.SaveLog(TxtLogType.UPDService, TxtLogContentType.Exception, TxtLogFileType.Day, "Exception:" + rnrModel.OrderId + Utils.GetException(ex) + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); } } }
static void RecvCallBack(IAsyncResult ar) { allDone.Set(); StateObject so = (StateObject)ar.AsyncState; IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint tempRemoteEP = (EndPoint)sender; int readBytes = 0; try { readBytes = so.socket.EndReceiveFrom(ar, ref tempRemoteEP); } catch (ObjectDisposedException oe) { Console.WriteLine(oe); throw oe; } catch (SocketException se) { Console.WriteLine(se); throw se; } catch (Exception e) { Console.WriteLine(e); // 获得接收失败信息 throw e; } if (readBytes > 0) { byte[] mybytes = new byte[readBytes]; Array.Copy(so.buffer, mybytes, readBytes); for (int i = 0; i < readBytes; i++) { if (mybytes[i] == 0x7e) { if (!isPacket) { isPacket = true; } else { isPacket = false; UDPClientItemBusiness.ClientItem item = new UDPClientItemBusiness.ClientItem() { data = recvBUF.ToArray(), remotePoint = tempRemoteEP }; queueRecv.Enqueue(item); recvBUF.Clear();//清除缓存 } } else { recvBUF.Add(mybytes[i]); } } //收到数据处理 so.socket.BeginReceiveFrom(so.buffer, 0, StateObject.BUF_SIZE, SocketFlags.None, ref tempRemoteEP, new AsyncCallback(RecvCallBack), so); } }