Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
                }
            }
        }
Exemplo n.º 8
0
        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);
            }
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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());
            }
        }
Exemplo n.º 12
0
        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;
            }
        }
Exemplo n.º 13
0
        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);
            }
        }
Exemplo n.º 14
0
 /// <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);
     }
 }
Exemplo n.º 15
0
        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));
        }
Exemplo n.º 16
0
        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);
            }
        }
Exemplo n.º 17
0
        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);
        }
Exemplo n.º 18
0
        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);
        }
Exemplo n.º 19
0
        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);
            }
        }
Exemplo n.º 20
0
        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);
                }
            }
        }
Exemplo n.º 21
0
        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"));
                }
            }
        }
Exemplo n.º 22
0
        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);
            }
        }