/// <summary> /// 连接中心服务器 /// </summary> /// <returns></returns> private bool ConnectCenterServer() { try { PublicData.RequestSocket = new RequestSocket(); PublicData.RequestSocket.Connect(MQConfig.ResponseServer); MQActionResult <string> result = PublicData.RequestSocket.RequestSendReceive <MQActionResult <string> >( IdKeyData.Create("", "Session/Connect", new ValueTypeParam <ClientTypeEnum>(ClientTypeEnum.Bet) { Platform = BetPlatformEnum.QXDFV168 })); if (null != result && result.IsOK) { PublicData.SessionId = result.Data; Log("连接中心服务器成功。"); return(true); } else { MessageBoxEx.Alert("中心服务器连接失败,信息:" + result.ErrorMsg); Log("中心服务器连接失败。"); return(false); } } catch (Exception ex) { MessageBoxEx.Alert(ex.Message); return(false); } }
public static MQActionResult <string> Login(string sessionId, SysMemberLoginParam param) { //if (PublicData.ServerParameter.IsEmpty()) //{ // return MQActionResult<string>.Error(CommonErrors.CenterServerNotStart); //} var user = SysMemberService.Instance.FindByUserName(param.UserName); if (user == null) { return(MQActionResult <string> .Error($"没找到用户'{param.UserName}'")); } if (!CryptoUtil.MD5(param.Password).Equals(user.Pwd)) { return(MQActionResult <string> .Error("用户名或密码不正确!")); } // 检查不允许重复登陆 if (SessionPool.GetDeskClientSessionIdByUserName(param.UserName) != null) { return(MQActionResult <string> .Error($"用户'{param.UserName}'正在别处登陆,请先关闭之前的登陆账户")); } // 为新的Session分配新的BetServer //string betServerId = AccountMapping.RandomlyAssignedABetServerId(); //if (string.IsNullOrEmpty(betServerId)) //{ // return MQActionResult<string>.Error("投注服务资源不足,无法登陆,请联系客服!"); //} //Session betServerSession = SessionPool.GetByClientId(betServerId, ClientTypeEnum.Bet); //if (betServerSession == null) //{ // return MQActionVoidResult.Error("未找到匹配的投注端"); //} // 创建Session sessionId = Guid.NewGuid().ToString(); Session newession = new Session(sessionId, ClientTypeEnum.Client) { SysmemberId = user.Id, SysmemberUsername = user.Account, BetServerId = "" //betServerId }; SessionPool.SetNew(sessionId, newession); // 为BetServerSession设置ClientDeskId //betServerSession.ClientDeskId = sessionId; SysMemberService.Instance.UpdateLoginTime(user.Id); return(MQActionResult <string> .Ok(newession.ClientId)); }
/// <summary> /// 添加下注信息到出货池 /// </summary> /// <param name="sessionId">客户端ID</param> /// <param name="bet">下注</param> /// <returns></returns> public static MQActionResult <string> AddBetInPool(string sessionId, BetPoolItem bet) { MQActionResult <string> result = new MQActionResult <string>(); if (BetPool.AddBetInPool(bet)) { result.Data = "添加成功"; result.ErrorMsg = ""; result.IsOK = true; return(result); } else { result.Data = "添加失败,请重试!"; result.ErrorMsg = "添加失败,请重试!"; result.IsOK = false; return(result); } }
/// <summary> /// 获取下注信息 /// </summary> /// <param name="sessionId"></param> /// <returns></returns> public static MQActionResult <BetPoolItem> GetBetInPool(string sessionId) { MQActionResult <BetPoolItem> result = new MQActionResult <BetPoolItem>(); var bet = BetPool.GetBetContent(); if (bet != null) { result.Data = bet; result.ErrorMsg = ""; result.IsOK = true; return(result); } else { result.Data = null; result.ErrorMsg = "未找到下注信息"; result.IsOK = false; return(result); } }
/// <summary> /// 某个端建立连接, 并由中心服务器返回分配的SessionId /// </summary> /// <param name="sessionId">空字符串</param> /// <param name="param"></param> /// <returns></returns> public static MQActionResult <string> Connect(string sessionId, ValueTypeParam <ClientTypeEnum> param) { if (param.Value == ClientTypeEnum.Client) { return(MQActionResult <string> .Error("控盘端只能在登陆成功逻辑中创建Session.")); } sessionId = Guid.NewGuid().ToString(); Session session = new Session(sessionId, param.Value); session.platform = param.Platform; SessionPool.SetNew(sessionId, session); // 投注端建立链接,初始化可投注缓存数据 if (param.Value == ClientTypeEnum.Bet) { AccountMapping.AddAvailableBetServer(sessionId); } return(MQActionResult <string> .Ok(sessionId)); }
/// <summary> /// 获取出货信息 /// </summary> private void ThreadBetInformation() { while (!PublicData.CancellationToken.IsCancellationRequested) { try { MQActionResult <BetPoolItem> result = PublicData.RequestSocket.RequestSendReceive <MQActionResult <BetPoolItem> >( IdKeyData.Create(PublicData.SessionId, "BetPool/GetBetInPool", PublicData.SessionId)); if (result.IsOK) { BetPoolItem betResult = result.Data; //添加到处理池 Task.Run(() => { BetProcess bet = new BetProcess(); bet.Id = betResult.Id; bet.Locked = false; bet.Money = betResult.Money; bet.Number = betResult.Number; bet.OperateID = betResult.OperateID; bet.Order = betResult.Order; bet.BuyerSessionID = PublicData.SessionId; bet.ClientSessionID = betResult.ClientSessionID; BetProcessPool.AddBetInPool(bet); }); } else { LogError(Environment.NewLine + "获取下注信息失败:" + result.ErrorMsg); } } catch (Exception ex) { LogError(Environment.NewLine + "获取下注信息异常:" + Environment.NewLine + ex.StackTrace); } Thread.Sleep(200); //200毫秒获取一次 } }