/// <summary> /// 代理登录 /// </summary> /// <param name="requestMsg">请求参数</param> /// <param name="head">报文头</param> /// <param name="client">当前连接客户端对象</param> /// <returns></returns> public string Login(string requestMsg, HeadMessage head, ClientOP client) { //ComunicationMsg sendMsg = new ComunicationMsg(); //ErrorMessage error = new ErrorMessage(); //HeadMessage sendHead = new HeadMessage(); try { sendHead.Method = head.Method; sendHead.Token = Guid.NewGuid().ToString().Replace("-", ""); AgentSearchModel aSearch = JSON.ToObject <AgentSearchModel>(requestMsg); string responseMsg = ""; if (aSearch == null) { error.ErrMsg = "没有接收到登录账号或密码"; error.ErrNo = "0003"; } else { responseMsg = loginDal.Login(aSearch, head, out error); if (error.ErrNo == "0000") { foreach (KeyValuePair <string, ClientOP> kv in WsSocket.dic_Clients) { if (!string.IsNullOrEmpty(aSearch.A_UserID) && kv.Value.LogName == aSearch.A_UserID) { ErrorMessage outErr = new ErrorMessage(); outErr.ErrNo = "0000"; outErr.ErrMsg = "此账号已在别处登录"; HeadMessage outHead = new HeadMessage(); outHead.Method = "GoOut"; ComunicationMsg outSend = new ComunicationMsg(); outSend.Head = JSON.ToJSON(outHead); outSend.Error = JSON.ToJSON(outErr); WsSocket ws = new WsSocket(); ws.Send(JSON.ToJSON(outSend), kv.Value.cSocket, true); } } client.LogName = aSearch.A_UserID; client.Token = sendHead.Token; client.ConTime = DateTime.Now; //将成功登录的客户端添加到字典中 WsSocket.dic_Clients.AddOrUpdate(client.ConID, client, (key, oldv) => client); } } sendMsg.Head = JSON.ToJSON(sendHead); sendMsg.Error = JSON.ToJSON(error); sendMsg.Reponse = JSON.ToJSON(new { LoginAgent = string.IsNullOrEmpty(responseMsg) ? "{}" : responseMsg }); return(JSON.ToJSON(sendMsg)); } catch (Exception ex) { Common.LogHelper.WriteLog(typeof(LoginBLL), ex); error.ErrNo = "0004"; error.ErrMsg = ex.Message.Replace("\r", "").Replace("\n", ""); sendMsg.Head = JSON.ToJSON(head); sendMsg.Reponse = "{}"; sendMsg.Error = JSON.ToJSON(error); return(JSON.ToJSON(sendMsg)); } }
/// <summary> /// 初步处理接收到的报文 /// </summary> /// <param name="msg"></param> /// <param name="isZ">标记应答报文是否需要Gzip压缩</param> /// <returns></returns> public string StartAnalyze(string msg, ClientOP client, out bool isZ) { ComunicationMsg cmMsg = JSON.ToObject <ComunicationMsg>(msg); ComunicationMsg cMsg = new ComunicationMsg(); HeadMessage hMsg = new HeadMessage(); ErrorMessage error = new ErrorMessage(); RequestMsg reqMsg = new RequestMsg(); bool isGoupRetMsg = true; //是否需要组装应答报文 string methodReturn = ""; bool hasRequestParameters = false; //是否包含请求参数 bool isLoginAuth = false; //是否通过了登录验证 string retMsg = ""; string response = "{}"; isZ = true; HeadMessage head; if (cmMsg != null) { try { reqMsg = cmMsg.Request != null?JSON.ToObject <RequestMsg>(cmMsg.Request) : reqMsg; //判断应答报文是否需要压缩 if (reqMsg != null && !string.IsNullOrEmpty(reqMsg.IsZ) && reqMsg.IsZ == "N") { isZ = false; } //判断是否包含请求参数 if (reqMsg != null && !string.IsNullOrEmpty(reqMsg.RequestParams)) { hasRequestParameters = true; } else { error.ErrNo = "0003"; error.ErrMsg = "请求参数不完整。"; } //解码报文头 head = JSON.ToObject <HeadMessage>(cmMsg.Head); if (head != null) { if (string.IsNullOrEmpty(head.Account) || string.IsNullOrEmpty(head.Token) || string.IsNullOrEmpty(head.LoginID)) { isLoginAuth = false; error.ErrMsg += " 没有通过登录验证,所以无权获取数据。"; error.ErrNo = "0004"; } else { foreach (KeyValuePair <string, ClientOP> kv in WsSocket.dic_Clients) { if (head.Account == kv.Value.LogName && head.Token == kv.Value.Token) { isLoginAuth = true; break; } } if (!isLoginAuth) { error.ErrMsg += " 没有通过登录验证,所以无权获取数据。"; error.ErrNo = "0004"; } } string method = head.Method ?? ""; head.Ip = client.IP; hMsg.Method = method; switch (method) { case "HeartBeat": //心跳 error.ErrNo = "0000"; error.ErrMsg = "连接正常"; break; case "SignOut": //登出 if (hasRequestParameters) { isGoupRetMsg = false; methodReturn = loginBll.SignOut(reqMsg.RequestParams, head); } break; #region 登录部分 case "Login": //登录 if (hasRequestParameters) { isGoupRetMsg = false; methodReturn = loginBll.LoginLogic(reqMsg.RequestParams, head, client); } break; case "GetSelfCenterInfo": //获取指定代理今日下单统计 case "CenterPlayList": //获取指定代理会员在线情况 case "GetLoginACount": //获取指定时段内指定代理统计数据 case "AgentClientCount": //获取指定时段内指定代理下会员统计数据 case "GetAorCAgentData": //获取指定代理或指定会员所属代理统计数据 case "GetAListByID": //根据代理ID获取指定代理数据 if (hasRequestParameters && isLoginAuth) { isGoupRetMsg = false; methodReturn = loginBll.LoginLogic(reqMsg.RequestParams, head, client); } break; case "GetPubInfo": //获取公告 if (isLoginAuth) { isGoupRetMsg = false; methodReturn = loginBll.GetPubInfo(head); } break; #endregion #region 代理列表部分 case "GetAllAgents": //获取指定代理及它的直属代理列表数据 case "GetDeletedA": //获取指定代理下逻辑删除的代理列表数据 case "AgentMatchP": //获取指定代理相关权限 if (hasRequestParameters && isLoginAuth) { isGoupRetMsg = false; methodReturn = aListBll.GetALists(reqMsg.RequestParams, head); } break; case "InsertAgent": //新增代理 case "UpdateAgent": //修改代理 case "AgentModifyPwd": //修改下级代理密码 case "AgentSelfModifyPwd": //修改登录代理密码 case "AgentPoint": //代理上下分 case "AgentClear": //代理清零 case "SettleOdds4Agent": //结算代理抽水 case "SettleWashF4Agent": //结算代理洗码费 case "DeleteAgent": //删除代理 if (hasRequestParameters && isLoginAuth) { isGoupRetMsg = false; methodReturn = aListBll.InsertAgent(reqMsg.RequestParams, head); } break; case "GetAgentLogName": //获取代理登录名称 case "GetClientLogName": //获取会员登录名称 case "GetSubLogName": //获取子账号登录名称 if (isLoginAuth) { isGoupRetMsg = false; methodReturn = aListBll.GetALoginID(head); } break; #endregion #region 会员列表部分 case "GetClntList_Invite": //获取会员列表数据 case "GetDeletedC": //获取逻辑删除的会员 if (hasRequestParameters && isLoginAuth) { isGoupRetMsg = false; methodReturn = clntListBll.GetClntList(reqMsg.RequestParams, head); } break; case "GetClntOdds": //获取会员标准赔率 if (isLoginAuth) { isGoupRetMsg = false; methodReturn = clntListBll.GetClntOdds(head); } break; case "InsertClient": //新增会员 case "AllClientZero": //直属会员清零 case "ClientZero": //会员清零 case "ClearCard4Clnt": //会员清卡 case "UpdateClient": //修改会员 case "ClientModifyPwd": //修改会员密码 case "ClientPoint": //会员上下分 case "SettleWashF4Clnt": //结算会员洗码费 if (hasRequestParameters && isLoginAuth) { isGoupRetMsg = false; methodReturn = clntListBll.ClntOperates(reqMsg.RequestParams, head); } break; #endregion #region 子账号部分 case "GetAgentSubs": //获取指定代理下子账号列表数据 aSubBll.GetAgentSubs(reqMsg.RequestParams, head); break; case "InsertAgentSub": //新增子账号 case "UpdateAgentSub": //修改子账号 case "UpdateSubState": //修改子账号状态 case "DeleteAgentSub": //删除子账号 aSubBll.ASubOperates(reqMsg.RequestParams, head); break; #endregion #region 获取报表数据部分 case "GetAStatistics": //获取代理统计数据 case "GetADayStatistics": //获取代理每日统计数据 case "GetClntStatistics": //获取会员统计 case "GetClntDayStatistics": //获取会员每日统计数据 case "GetClntBetBills": //获取会员下注明细 case "GetPointDetail": //获取上下分明细 case "GetTableResult": //获取游戏结果数据 case "PromotionA_Clnt4A": //获取指定代理下的会员推广统计数据 增量 case "PromotionA_AllClnt4A": //获取指定代理下的会员推广统计数据 存量 case "H5ClntPointDetail": //H5会员第三方上分明细 case "H5ClntPointSum_A": //获取指定代理下所有H5会员第三方上分明细 case "RedEnvelopeSum": //查询指定代理自己及直属代理及直属会员下红包发放合计 case "RedEnvelopeDetail": //查询指定会员下红包发送明细 case "GetSettleAccounts": //获取结算记录 case "GetWashF4Clnt": //获取会员的洗码费统计 case "GetOddsWashF4Agent": //获取代理抽水及洗码费统计 if (hasRequestParameters && isLoginAuth) { methodReturn = sBll.GetStatisticsData(reqMsg.RequestParams, head); } break; #endregion #region 获取日志记录 case "GetTransactions": //获取交易记录 case "GetLoginLog": //获取登录日志 case "GetOperationLog": //获取操作日志 if (hasRequestParameters && isLoginAuth) { isGoupRetMsg = false; methodReturn = sBll.GetLog(reqMsg.RequestParams, head); } break; #endregion default: error.ErrNo = "0005"; error.ErrMsg = "没有对应的接口:" + method; break; } } else { error.ErrNo = "0003"; error.ErrMsg = "报文格式错误,没有收到正确的报文头"; } } catch (Exception ex) { Common.LogHelper.WriteLog(typeof(AnalyzeData), ex); error.ErrNo = "0001"; error.ErrMsg = "系统内部错误:" + ex.Message.Replace("\r", "").Replace("\n", ""); } } cMsg.Head = JSON.ToJSON(hMsg); cMsg.Reponse = response; cMsg.Request = "{}"; cMsg.Error = JSON.ToJSON(error); retMsg = isGoupRetMsg ? JSON.ToJSON(cMsg) : methodReturn; return(retMsg); }
public string LoginLogic(string requestMsg, HeadMessage head, ClientOP client) { sendHead.Method = head.Method ?? ""; error.ErrNo = "0004"; try { AgentSearchModel aSearch = JSON.ToObject <AgentSearchModel>(requestMsg); string responseMsg = ""; string pId; if (CommonDAL.IsSubAgent(head.LoginID, out pId)) { head.LoginID = pId;//如果当前登录代理是子账号则,将此子账号的所属代理ID赋值为当前登录代理ID } if (aSearch == null) { error.ErrMsg = "没有接收到登录账号或密码"; error.ErrNo = "0003"; } else { switch (sendHead.Method) { case "Login": sendHead.Token = Guid.NewGuid().ToString().Replace("-", ""); responseMsg = loginDal.Login(aSearch, head, out error); if (error.ErrNo == "0000") { foreach (KeyValuePair <string, ClientOP> kv in WsSocket.dic_Clients) { if (!string.IsNullOrEmpty(aSearch.A_UserID) && kv.Value.LogName == aSearch.A_UserID) { ErrorMessage outErr = new ErrorMessage(); outErr.ErrNo = "0000"; outErr.ErrMsg = "此账号已在别处登录"; HeadMessage outHead = new HeadMessage(); outHead.Method = "GoOut"; ComunicationMsg outSend = new ComunicationMsg(); outSend.Head = JSON.ToJSON(outHead); outSend.Error = JSON.ToJSON(outErr); WsSocket ws = new WsSocket(); ws.Send(JSON.ToJSON(outSend), kv.Value.cSocket, true); ws.closeConnect(kv.Value.cSocket); //断开之前的连接 ClientOP op; WsSocket.dic_Clients.TryRemove(kv.Key, out op); //将连接移除字典 break; } } client.LogName = aSearch.A_UserID; client.Token = sendHead.Token; //将成功登录的客户端添加到字典中 WsSocket.dic_Clients.AddOrUpdate(client.ConID, client, (key, oldv) => client); } break; case "GetSelfCenterInfo": responseMsg = loginDal.GetATodayBillCount(aSearch, head, out error); break; case "CenterPlayList": responseMsg = loginDal.GetOnlineClntList(aSearch, head, out error); break; case "GetLoginACount": responseMsg = loginDal.GetACountByDate(aSearch, head, out error); break; case "AgentClientCount": responseMsg = loginDal.GetAClntCount(aSearch, head, out error); break; case "GetAorCAgentData": responseMsg = loginDal.GetAorCAgentData(aSearch, head, out error); break; case "GetAListByID": responseMsg = loginDal.GetAListByID(aSearch, head, out error); break; default: responseMsg = ""; break; } } sendMsg.Head = JSON.ToJSON(sendHead); sendMsg.Error = JSON.ToJSON(error); sendMsg.Reponse = JSON.ToJSON(new { JsonData = (string.IsNullOrEmpty(responseMsg)) ? "{}" : responseMsg }); return(JSON.ToJSON(sendMsg)); } catch (Exception ex) { Common.LogHelper.WriteLog(typeof(LoginBLL), ex); error.ErrMsg = ex.Message.Replace("\r", "").Replace("\n", ""); sendMsg.Head = JSON.ToJSON(sendHead); sendMsg.Reponse = "{}"; sendMsg.Error = JSON.ToJSON(error); return(JSON.ToJSON(sendMsg)); } }