예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        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));
        }
예제 #3
0
        /// <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);
            }
        }
예제 #4
0
        /// <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);
            }
        }
예제 #5
0
        /// <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));
        }
예제 #6
0
        /// <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毫秒获取一次
            }
        }