Exemplo n.º 1
0
        /// <summary>
        /// 倒置
        /// </summary>
        public void Reverse()
        {
            PublicInfo  TempPublic  = AllRole.MyPublicInfo;
            PrivateInfo TempPrivate = AllRole.MyPrivateInfo;

            AllRole.MyPublicInfo    = AllRole.YourPublicInfo;
            AllRole.MyPrivateInfo   = AllRole.YourPrivateInfo;
            AllRole.YourPublicInfo  = TempPublic;
            AllRole.YourPrivateInfo = TempPrivate;
            //关于方向的设置,还有战场位置
            AllRole.MyPublicInfo.Hero.战场位置.本方对方标识   = true;
            AllRole.YourPublicInfo.Hero.战场位置.本方对方标识 = false;
            foreach (var minion in AllRole.MyPublicInfo.BattleField.BattleMinions)
            {
                if (minion != null)
                {
                    minion.战场位置.本方对方标识 = true;
                }
            }
            foreach (var minion in AllRole.YourPublicInfo.BattleField.BattleMinions)
            {
                if (minion != null)
                {
                    minion.战场位置.本方对方标识 = false;
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 新的回合
        /// </summary>
        public void TurnStart(bool IsMyTurn)
        {
            PublicInfo PlayInfo = IsMyTurn ? actionStatus.AllRole.MyPublicInfo : actionStatus.AllRole.YourPublicInfo;

            if (IsMyTurn)
            {
                actionStatus.AllRole.MyPrivateInfo.handCards.Add(CardUtility.GetCardInfoBySN(ClientRequest.DrawCard(GameId.ToString(GameServer.GameIdFormat), IsHost, 1)[0]));
            }
            //过载的清算
            if (PlayInfo.OverloadPoint != 0)
            {
                PlayInfo.crystal.ReduceCurrentPoint(PlayInfo.OverloadPoint);
                PlayInfo.OverloadPoint = 0;
            }
            //连击的重置
            PlayInfo.连击状态 = false;
            //魔法水晶的增加
            PlayInfo.crystal.NewTurn();
            PlayInfo.Hero.RemainAttackTimes = 1;
            PlayInfo.Hero.IsUsedHeroAbility = false;
            PlayInfo.BattleField.FreezeStatus();
            //重置攻击次数,必须放在状态变化之后!
            //原因是剩余攻击回数和状态有关!
            foreach (var minion in PlayInfo.BattleField.BattleMinions)
            {
                if (minion != null)
                {
                    minion.重置剩余攻击次数();
                }
            }
        }
Exemplo n.º 3
0
 private void ResponseFollowAddRemove(RequestMsg_FollowAddRemove msg, int hostId, int connectionId)
 {
     if (msg.Unfollow)
     {
         if (msg.IsEmail)
         {
             mongo.DeleteFollowerShip(msg.Token, msg.UsernameDiscriminatorOrEmail);
         }
         else
         {
             string[] data = msg.UsernameDiscriminatorOrEmail.Split(new char[] { '#' }, System.StringSplitOptions.RemoveEmptyEntries);
             mongo.DeleteFollowerShip(msg.Token, data[0], data[1]);
         }
     }
     else
     {
         PublicInfo info = null;
         if (msg.IsEmail)
         {
             info = mongo.InsertFollowership(msg.Token, msg.UsernameDiscriminatorOrEmail);
         }
         else
         {
             string[] data = msg.UsernameDiscriminatorOrEmail.Split(new char[] { '#' }, System.StringSplitOptions.RemoveEmptyEntries);
             info = mongo.InsertFollowership(msg.Token, data[0], data[1]);
         }
         SendToClient(hostId, connectionId, new ResponseMsg_FollowAddRemove(MessageEnums.Status.OK, info));
     }
 }
Exemplo n.º 4
0
 private void UpdateFollowers(PublicInfo updatedInfo)
 {
     foreach (var followersAccount in mongo.SelectAllAccountForTarget(updatedInfo.Email))
     {
         SendToClient(followersAccount.HostId, followersAccount.ConnectionId, new ResponseMsg_FollowUpdate(updatedInfo));
     }
 }
Exemplo n.º 5
0
        public async Task FindOneRandomUser()
        {
            var interest = new Interest
            {
                Name = StringGenerator.GenerateRandomString(10)
            };

            await _interestRepository.AddAsync(interest);

            interest.Id.Should().NotBeEmpty();

            var publicInfo1 = new PublicInfo
            {
                NickName   = StringGenerator.GenerateNameWithTimeStamp("user"),
                PictureUrl = StringGenerator.GenerateRandomString(50)
            };

            var user1 = new User
            {
                Email      = StringGenerator.GenerateEmailWithTimeStamp("rnd_user", "mail.com"),
                Gender     = Gender.Female,
                LookingFor = Gender.Male,
                PublicInfo = publicInfo1
            };

            await _userRepository.AddAsync(user1);

            user1.Id.Should().NotBeEmpty();

            var publicInfo2 = new PublicInfo
            {
                NickName   = StringGenerator.GenerateNameWithTimeStamp("user"),
                PictureUrl = StringGenerator.GenerateRandomString(50)
            };

            var user2 = new User
            {
                Email      = StringGenerator.GenerateEmailWithTimeStamp("rnd_user", "mail.com"),
                Gender     = Gender.Male,
                LookingFor = Gender.Female,
                PublicInfo = publicInfo2
            };

            await _userRepository.AddAsync(user2);

            user2.Id.Should().NotBeEmpty();

            var  userService1 = new UserService(new ReturnsZeroRandomGeneratorMock());
            User rndUser1     = await userService1.GetOneRandomUser(x => x.Gender == Gender.Female);

            Assert.NotNull(rndUser1);

            var  userService2 = new UserService(new ReturnsOneRandomGeneratorMock());
            User rndUser2     = await userService2.GetOneRandomUser(x => x.Gender == Gender.Female);

            Assert.NotNull(rndUser2);

            Assert.NotEqual(rndUser1.Id, rndUser2.Id);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 获得一个动作
        /// </summary>
        /// <param name="gameStatus"></param>
        /// <returns></returns>
        public static void GetAction(ActionStatus gameStatus)
        {
            String        Action       = String.Empty;
            PublicInfo    PlayInfo     = gameStatus.AllRole.MyPublicInfo;
            PrivateInfo   PlaySelfInfo = gameStatus.AllRole.MyPrivateInfo;
            List <String> Result       = new List <string>();

            //优先使用技能
            if (PlayInfo.IsHeroSkillEnable(true))
            {
                //召唤
                if (PlayInfo.Hero.HeroSkill.FirstAbilityDefine.MainAbilityDefine.TrueAtomicEffect.AtomicEffectType ==
                    Effect.AtomicEffectDefine.AtomicEffectEnum.召唤 &&
                    PlayInfo.BattleField.MinionCount != SystemManager.MaxMinionCount)
                {
                    gameStatus.Interrupt.ActionCard = new MinimizeBattleInfo.HandCardInfo();
                    gameStatus.Interrupt.ActionCard.Init(PlayInfo.Hero.HeroSkill);
                    gameStatus.ActionName                = "USEHEROSKILL";
                    gameStatus.Interrupt.Step            = 1;
                    gameStatus.Interrupt.ActionName      = "SPELL";
                    PlayInfo.crystal.CurrentRemainPoint -= PlayInfo.Hero.HeroSkill.使用成本;
                    PlayInfo.Hero.IsUsedHeroAbility      = true;
                    RunAction.StartActionCS(gameStatus, PlayInfo.Hero.HeroSkill.序列号, new string[] { });
                    gameStatus.Interrupt.ActionName = "SPELL";
                    return;
                }
            }
            //能上场的随从都上场
            int HandCardIndex = HasBattleMinion(gameStatus);

            if (HandCardIndex != -1)
            {
                int newPos = PlayInfo.BattleField.MinionCount + 1;
                var card   = PlaySelfInfo.handCards[HandCardIndex];
                RunAction.StartActionCS(gameStatus, card.序列号, new string[] { newPos.ToString() });
                PlayInfo.crystal.CurrentRemainPoint -= card.使用成本;
                PlaySelfInfo.RemoveUsedCard(card.序列号);
                PlayInfo.HandCardCount          = PlaySelfInfo.handCards.Count;
                gameStatus.Interrupt.ActionCard = new MinimizeBattleInfo.HandCardInfo();
                gameStatus.Interrupt.ActionCard.Init(card);
                gameStatus.Interrupt.ActionName = "MINION";
                return;
            }
            //能攻击的随从都攻击,优先攻击英雄
            int AttackPos = HasAttackMinion(gameStatus);

            if (AttackPos != -1)
            {
                int BeAttackedPos = GetAttackTarget(gameStatus);
                RunAction.Fight(gameStatus, AttackPos, BeAttackedPos, true);
                gameStatus.Interrupt.ActionName   = "FIGHT";
                gameStatus.Interrupt.ExternalInfo = AttackPos.ToString() + BeAttackedPos.ToString();
                return;
            }
            gameStatus.Interrupt.ActionName = ActionCode.strEndTurn;
        }
Exemplo n.º 7
0
 private void OnLogInResponse(ResponseMsg_Login msg, int connectionId)
 {
     if (msg.Status == MessageEnums.Status.OK)
     {
         Info       = new PublicInfo(msg, connectionId);
         Info.Email = msg.Email;
         Token      = msg.Token;
         SceneManager.LoadSceneAsync("Hub");
     }
     LogInResponseReceived?.Invoke(msg);
 }
Exemplo n.º 8
0
    private void OnDisconnected(int recHostId, int connectionId)
    {
        // log out
        PublicInfo disconnectedAccountPublicInfo = mongo.ClearAccount(connectionId);

        // if connected but didn't login
        if (disconnectedAccountPublicInfo != null)
        {
            // update the followers
            UpdateFollowers(disconnectedAccountPublicInfo);
        }
    }
Exemplo n.º 9
0
        /// <summary>
        /// 获得打击目标
        /// </summary>
        /// <returns></returns>
        private static int GetAttackTarget(ActionStatus gameStatus)
        {
            PublicInfo PlayInfo = gameStatus.AllRole.YourPublicInfo;

            for (int i = 0; i < PlayInfo.BattleField.MinionCount; i++)
            {
                if (PlayInfo.BattleField.BattleMinions[i].嘲讽特性)
                {
                    return(i + 1);
                }
            }
            return(PlayInfo.BattleField.MinionCount);
        }
Exemplo n.º 10
0
        /// <summary>
        /// 是否拥有可以攻击的随从
        /// </summary>
        /// <returns></returns>
        private static int HasAttackMinion(ActionStatus gameStatus)
        {
            PublicInfo PlayInfo = gameStatus.AllRole.MyPublicInfo;

            //能攻击的随从都攻击,优先攻击英雄
            for (int i = 0; i < PlayInfo.BattleField.MinionCount; i++)
            {
                if (PlayInfo.BattleField.BattleMinions[i].能否攻击)
                {
                    return(i + 1);
                }
            }
            return(-1);
        }
Exemplo n.º 11
0
        /// <summary>
        /// 开始一个动作
        /// </summary>
        /// <param name="actionStatus">
        /// 在调用这个过程之前,actionStatus里面的本方和对方都应该已经设定好了
        /// 在这里不进行任何的方向判断,默认这个方法是由MyInfo发起的
        /// </param>
        /// <param name="CardSn"></param>
        /// <returns></returns>
        public static List <string> StartAction(ActionStatus actionStatus, string CardSn)
        {
            //清除事件池,注意,事件将在动作结束后整体结算
            actionStatus.battleEvenetHandler.事件池.Clear();
            CardBasicInfo card          = CardUtility.GetCardInfoBySN(CardSn);
            List <string> ActionCodeLst = new List <string>();

            //未知的异常,卡牌资料缺失
            if (card == null)
            {
                return(ActionCodeLst);
            }
            PublicInfo PlayInfo = actionStatus.AllRole.MyPublicInfo;

            switch (card.卡牌种类)
            {
            case CardBasicInfo.资源类型枚举.法术:
                actionStatus.ActionName = "USESPELLCARD";
                UseSpellAction.RunBS(actionStatus, CardSn);
                break;

            case CardBasicInfo.资源类型枚举.随从:
                actionStatus.ActionName = "USEMINIONCARD";
                UseMinionAction.RunBS(actionStatus, CardSn);
                break;

            case CardBasicInfo.资源类型枚举.武器:
                ActionCodeLst.Add(ActionCode.strWeapon + CardUtility.strSplitMark + CardSn);
                PlayInfo.Hero.Weapon = (WeaponCard)card;
                break;

            case CardBasicInfo.资源类型枚举.奥秘:
                ActionCodeLst.Add(ActionCode.strSecret + CardUtility.strSplitMark + CardSn);
                actionStatus.AllRole.MyPrivateInfo.奥秘列表.Add((SecretCard)card);
                PlayInfo.Hero.SecretCount = actionStatus.AllRole.MyPrivateInfo.奥秘列表.Count;
                break;

            default:
                break;
            }
            //随从卡牌的连击效果启动
            Combo(actionStatus, card, ActionCodeLst, PlayInfo);
            if (ActionCodeLst.Count != 0)
            {
                PlayInfo.连击状态 = true;
                ActionCodeLst.AddRange(actionStatus.battleEvenetHandler.事件处理(actionStatus));
            }
            return(ActionCodeLst);
        }
Exemplo n.º 12
0
        /// <summary>
        /// 能上场的随从
        /// </summary>
        /// <returns></returns>
        private static int HasBattleMinion(ActionStatus gameStatus)
        {
            PrivateInfo PlaySelfInfo = gameStatus.AllRole.MyPrivateInfo;
            PublicInfo  PlayInfo     = gameStatus.AllRole.MyPublicInfo;

            if (PlayInfo.BattleField.MinionCount == SystemManager.MaxMinionCount)
            {
                return(-1);
            }
            for (int i = 0; i < PlaySelfInfo.handCards.Count; i++)
            {
                var card = PlaySelfInfo.handCards[i];
                if (card.卡牌种类 == Card.CardBasicInfo.资源类型枚举.随从)
                {
                    if (card.使用成本 <= PlayInfo.crystal.CurrentRemainPoint)
                    {
                        return(i);
                    }
                }
            }
            return(-1);
        }
Exemplo n.º 13
0
 private void AddToFollowList(PublicInfo follow)
 {
     if (follow != null)
     {
         GameObject go = Instantiate(FollowerPrefab, followListContent);
         //the name
         go.GetComponentInChildren <TextMeshProUGUI>().SetText(string.Format("{0}#{1}", follow.Username, follow.Discriminator));
         //the online status
         go.GetComponentInChildren <Image>().color = follow.Status == MessageEnums.AccountStatus.Online ? Color.green : Color.grey;
         //the delete button
         go.GetComponentInChildren <Button>().onClick.AddListener(delegate {
             Debug.Log("Unfollow: " + follow.Username + "#" + follow.Discriminator);
             Client.Self.RequestAddRemoveFollow(true, follow.Username + "#" + follow.Discriminator, Utilities.StringTpye.UsernameAndDiscriminator);
             //TODO: run and check it's working fine
             print(follow.ToString());
             followInfoDic.Remove(follow.Email);
             Destroy(go);
         });
         followInfoDic[follow.Email] = new Follow {
             info = follow, goRef = go
         };
     }
 }
Exemplo n.º 14
0
        /// <summary>
        /// 对手回合结束的清场
        /// </summary>
        public List <string> TurnEnd(bool IsMyTurn)
        {
            PublicInfo    PlayInfo  = IsMyTurn ? actionStatus.AllRole.MyPublicInfo : actionStatus.AllRole.YourPublicInfo;
            List <string> ActionLst = new List <string>();
            //对手回合加成属性的去除
            int ExistMinionCount = PlayInfo.BattleField.MinionCount;

            for (int i = 0; i < ExistMinionCount; i++)
            {
                if (PlayInfo.BattleField.BattleMinions[i] != null)
                {
                    PlayInfo.BattleField.BattleMinions[i].本回合生命力加成 = 0;
                    PlayInfo.BattleField.BattleMinions[i].本回合攻击力加成 = 0;
                    if (PlayInfo.BattleField.BattleMinions[i].特殊效果 == MinionCard.特殊效果枚举.回合结束死亡)
                    {
                        PlayInfo.BattleField.BattleMinions[i] = null;
                    }
                }
            }
            PlayInfo.BattleField.ClearDead(事件处理组件, false);
            ActionLst.AddRange(ActionStatus.Settle(actionStatus));
            ActionLst.AddRange(事件处理组件.事件处理(actionStatus));
            return(ActionLst);
        }
Exemplo n.º 15
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            string tmpstr = "";

            if (m_ArrayContents != null)
            {
                if (richTextBox1.Lines.Length >= m_MaxLines)
                {
                    //考虑到效率问题,先把内容复制到另外一个RichEdit中
                    richTextBox2.AppendText(richTextBox1.Text);

                    richTextBox1.Clear();
                }

                //此处有可能导致配置返回处理慢,需要考虑处理优化
                if (m_ArrayContents.Count != 0)
                {
                    tmpstr = m_ArrayContents[0] as string;
                    richTextBox1.AppendText(tmpstr);
                    richTextBox1.SelectionStart = richTextBox1.Text.Length;
                    richTextBox1.ScrollToCaret();
                    lock (m_ArrayContents)
                    {
                        m_ArrayContents.RemoveAt(0);
                    }
                }
            }

            if (m_ServerInfoList != null)
            {
                BaseManage tmpManage = null;
                int        index     = 0;
                string     tmpstatus = "未连接";

                foreach (int id in m_ServerInfoList.Keys)
                {
                    tmpManage = m_ServerInfoList[id] as BaseManage;

                    if (listBox_Online.Items.Count >= (index + 1))
                    {
                        switch (tmpManage.IdleFlag)
                        {
                        case -2:
                            tmpstatus = "正在连接";
                            break;

                        case -1:
                            tmpstatus = "未连接";
                            break;

                        case 0:
                            tmpstatus = "空闲";
                            break;

                        case 1:
                            tmpstatus = "忙碌";
                            break;

                        case 2:
                            tmpstatus = "帐号密码错误";
                            break;

                        case 3:
                            tmpstatus = "工作号密码错误";
                            break;

                        case 4:
                            tmpstatus = "异常错误";
                            break;
                        }

                        int tmpsecondtime = PublicInfo.DateDiff(DateTime.Now, tmpManage.SetBusyTime);

                        //检查配置,如果超过10秒钟仍为忙碌状态,则重新进行配置认证
                        if ((tmpManage.IdleFlag == 1) && (tmpsecondtime > 10))
                        {
                            //设置为异常状态,等待重新进行配置认证
                            Log.Record("server.log", "配置:" + tmpManage.OriginalConfigManage.Original_ConfigName + "(" + tmpManage.OriginalConfigManage.Original_OfficeNumber + ")" + tmpManage.OriginalConfigManage.Original_Ip + " 超过10秒钟仍为忙碌状态,设状态为异常,等待重新进行配置认证...");
                            tmpManage.IdleFlag = 4;
                        }

                        //Kevin 2012-12-09修改
                        //如果配置长时间都是 “正在连接” 或 “配置异常”状态,则重启线程
                        tmpsecondtime = PublicInfo.DateDiff(DateTime.Now, tmpManage.SendCmdTime);
                        //如果20秒还是正在连接状态,则重启线程
                        if ((tmpsecondtime > 20) && (tmpManage.IdleFlag == -2))
                        {
                            //“正在连接”状态异常
                            Log.Record("heart.log", "配置:" + tmpManage.OriginalConfigManage.Original_ConfigName + "(" + tmpManage.OriginalConfigManage.Original_OfficeNumber + ")" + tmpManage.OriginalConfigManage.Original_Ip + " 配置状态异常(超过20秒处于'正在连接'状态),重新启动线程进行配置认证...");
                            //启动专门的一个线程进行处理异常重启的配置
                            /////////////////////////////////////////
                            Thread tmpThread = new Thread(new ThreadStart(tmpManage.ReStartEterm));
                            tmpThread.Start();
                        }


                        //发送心跳包异常重新启动配置
                        tmpsecondtime = PublicInfo.DateDiff(tmpManage.HeartStartTime, tmpManage.HeartEndTime);

                        if (tmpManage.IdleFlag == 4)
                        {
                            //Log.Record("heart.log", "配置:" + tmpManage.OriginalConfigManage.Original_ConfigName + "(" + tmpManage.OriginalConfigManage.Original_OfficeNumber + ")" + tmpManage.OriginalConfigManage.Original_Ip +
                            //    " 异常状态,心跳包间隔:"+tmpsecondtime.ToString()+"秒,发送心跳包时间:"+
                            //    tmpManage.HeartStartTime.ToString("yyyy-MM-dd HH:mm:ss")+",接收心跳包返回时间:"+
                            //    tmpManage.HeartEndTime.ToString("yyyy-MM-dd HH:mm:ss"));

                            tmpsecondtime = PublicInfo.DateDiff(DateTime.Now, tmpManage.ErrorTime);
                            if (tmpsecondtime > 60)
                            {
                                tmpManage.ErrorTime = DateTime.Now;
                            }
                            else
                            {
                                if (tmpsecondtime > 20)
                                {
                                    Log.Record("heart.log", "配置:" + tmpManage.OriginalConfigManage.Original_ConfigName + "(" + tmpManage.OriginalConfigManage.Original_OfficeNumber + ")" + tmpManage.OriginalConfigManage.Original_Ip + " 配置状态异常(超过20秒处于'异常'状态),重新启动线程进行配置认证...");
                                    //启动专门的一个线程进行处理异常重启的配置
                                    /////////////////////////////////////////
                                    Thread tmpThread = new Thread(new ThreadStart(tmpManage.ReStartEterm));
                                    tmpThread.Start();
                                }
                            }
                        }

                        if ((tmpManage.IdleFlag != 0) && (tmpManage.HeartStartTime.CompareTo(tmpManage.HeartEndTime) > 0) && (tmpsecondtime > 10))
                        {
                            //发送心跳包线程异常,需要重新启动线程
                            Log.Record("heart.log", "配置:" + tmpManage.OriginalConfigManage.Original_ConfigName + "(" + tmpManage.OriginalConfigManage.Original_OfficeNumber + ")" + tmpManage.OriginalConfigManage.Original_Ip + " 发送心跳包间隔时间异常,重新启动线程进行配置认证...");
                            //启动专门的一个线程进行处理异常重启的配置
                            /////////////////////////////////////////
                            Thread tmpThread = new Thread(new ThreadStart(tmpManage.ReStartEterm));
                            tmpThread.Start();
                        }


                        if (tmpManage.EtermType == "地址认证")
                        {
                            listBox_Online.Items[index] = "(" + tmpManage.OriginalConfigManage.Original_OfficeNumber.ToUpper() + ")" + tmpManage.OriginalConfigManage.Original_LocalIp + ":" + tmpManage.OriginalConfigManage.Original_Port.ToString() + "  " + tmpstatus;
                        }
                        else
                        {
                            listBox_Online.Items[index] = "(" + tmpManage.OriginalConfigManage.Original_OfficeNumber.ToUpper() + ")" + tmpManage.OriginalConfigManage.Original_ConfigName + ":" + tmpManage.OriginalConfigManage.Original_Port.ToString() + "  " + tmpstatus;
                        }
                        index++;
                    }
                    else
                    {
                        if (tmpManage.EtermType == "地址认证")
                        {
                            listBox_Online.Items.Add("(" + tmpManage.OriginalConfigManage.Original_OfficeNumber.ToUpper() + ")" + tmpManage.OriginalConfigManage.Original_LocalIp + ":" + tmpManage.OriginalConfigManage.Original_Port.ToString() + "  " + tmpstatus);
                        }
                        else
                        {
                            listBox_Online.Items.Add("(" + tmpManage.OriginalConfigManage.Original_OfficeNumber.ToUpper() + ")" + tmpManage.OriginalConfigManage.Original_ConfigName + ":" + tmpManage.OriginalConfigManage.Original_Port.ToString() + "  " + tmpstatus);
                        }
                    }
                }
            }
        }
        public async Task <IHttpActionResult> Google([FromBody] GoogleRequestModel model)
        {
            try
            {
                if (!ModelState.IsValid || model == null)
                {
                    return(BadRequest());
                }

                var body = new List <KeyValuePair <string, string> >
                {
                    new KeyValuePair <string, string>("grant_type", "authorization_code"),
                    new KeyValuePair <string, string>("code", model.Code),
                    new KeyValuePair <string, string>("redirect_uri", "http://localhost/signin-google"),
                    new KeyValuePair <string, string>("client_id", model.ClientId)
                };

                var client        = new HttpClient();
                var url           = new Uri(Constants.TokenEndpoint);
                var form          = new FormUrlEncodedContent(body);
                var tokenResponse = await client.PostAsync(url, form);

                if (tokenResponse.IsSuccessStatusCode == false)
                {
                    return(BadRequest());
                }

                string text = await tokenResponse.Content.ReadAsStringAsync();

                JObject response    = JObject.Parse(text);
                string  accessToken = response.Value <string>("access_token");
                string  tokenType   = response.Value <string>("token_type");

                if (string.IsNullOrEmpty(accessToken))
                {
                    return(NotFound());
                }

                HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, Constants.UserInfoEndpoint);
                request.Headers.Authorization = new AuthenticationHeaderValue(tokenType, accessToken);
                HttpResponseMessage userInfoResponse = await client.SendAsync(request);

                if (userInfoResponse.IsSuccessStatusCode == false)
                {
                    return(BadRequest());
                }

                text = await userInfoResponse.Content.ReadAsStringAsync();

                JObject userObj = JObject.Parse(text);

                string userEmail = _responseValuesGetter.TryGetValue(userObj, "email");
                string googleId  = _responseValuesGetter.TryGetValue(userObj, "id");

                User user = await _userRepository.FindByEmailAsync(userEmail);

                if (user == null)
                {
                    var info = new PublicInfo
                    {
                        NickName   = _responseValuesGetter.TryGetValue(userObj, "name"),
                        PictureUrl = _responseValuesGetter.TryGetValue(userObj, "picture")
                    };

                    user = new User
                    {
                        Email      = userEmail,
                        Gender     = _responseValuesGetter.GetGender(_responseValuesGetter.TryGetValue(userObj, "gender")),
                        PublicInfo = info
                    };

                    user.ExternalKeys.Add(new ExternalKey
                    {
                        Key  = googleId,
                        Type = ExternalSystemType.Google
                    });

                    await _userRepository.AddAsync(user);
                }

                List <User> userFriends = await _userRepository.FindUsersByIds(user.FriendsIds);

                string sendToken = _tokenManager.CreateSendToken(user);

                var responseModel = new GoogleResponseModel
                {
                    User = new UserResponseModel
                    {
                        ServerId    = user.Id.ToString(),
                        Email       = user.Email,
                        PublicInfo  = user.PublicInfo,
                        BirthDate   = user.BirthDate,
                        Gender      = user.Gender,
                        LookingFor  = user.LookingFor,
                        Seconds     = user.Seconds,
                        FriendsList = userFriends.Select(x => new UserResponseModel
                        {
                            ServerId   = x.Id.ToString(),
                            Email      = x.Email,
                            PublicInfo = x.PublicInfo,
                            BirthDate  = x.BirthDate,
                            Gender     = x.Gender,
                            LookingFor = x.LookingFor,
                            Seconds    = x.Seconds,
                        }).ToList()
                    },
                    Token = sendToken
                };
                return(Ok(responseModel));
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }
Exemplo n.º 17
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            string tmpstr = "";

            if (m_ArrayContents != null)
            {
                if (richTextBox1.Lines.Length >= m_MaxLines)
                {
                    //考虑到效率问题,先把内容复制到另外一个RichEdit中
                    richTextBox2.AppendText(richTextBox1.Text);

                    richTextBox1.Clear();
                }

                //此处有可能导致配置返回处理慢,需要考虑处理优化
                if (m_ArrayContents.Count != 0)
                {
                    tmpstr = m_ArrayContents[0] as string;
                    richTextBox1.AppendText(tmpstr);
                    richTextBox1.SelectionStart = richTextBox1.Text.Length;
                    richTextBox1.ScrollToCaret();
                    lock (m_ArrayContents)
                    {
                        m_ArrayContents.RemoveAt(0);
                    }
                }
            }

            if (m_ServerInfoList != null)
            {
                BaseManage tmpManage = null;
                int        index     = 0;
                string     tmpstatus = "未连接";

                foreach (int id in m_ServerInfoList.Keys)
                {
                    tmpManage = m_ServerInfoList[id] as BaseManage;

                    if (listBox_Online.Items.Count >= (index + 1))
                    {
                        switch (tmpManage.IdleFlag)
                        {
                        case -1:
                            tmpstatus = "未连接";
                            break;

                        case 0:
                            tmpstatus = "空闲";
                            break;

                        case 1:
                            tmpstatus = "忙碌";
                            break;

                        case 2:
                            tmpstatus = "帐号密码错误";
                            break;

                        case 3:
                            tmpstatus = "工作号密码错误";
                            break;

                        case 4:
                            tmpstatus = "异常错误";
                            break;
                        }

                        int tmpsecondtime = PublicInfo.DateDiff(DateTime.Now, tmpManage.SetBusyTime);

                        //检查配置,如果超过10秒钟仍为忙碌状态,则重新进行配置认证
                        if ((tmpManage.IdleFlag == 1) && (tmpsecondtime > 10))
                        {
                            //设置为异常状态,等待重新进行配置认证
                            Log.Record("server.log", "配置:" + tmpManage.OriginalConfigManage.Original_ConfigName + "(" + tmpManage.OriginalConfigManage.Original_OfficeNumber + ")" + tmpManage.OriginalConfigManage.Original_Ip + " 超过10秒钟仍为忙碌状态,设为状态为异常,等待重新进行配置认证...");
                            tmpManage.IdleFlag = 4;
                        }

                        if (tmpManage.EtermType == "地址认证")
                        {
                            listBox_Online.Items[index] = "(" + tmpManage.OriginalConfigManage.Original_OfficeNumber.ToUpper() + ")" + tmpManage.OriginalConfigManage.Original_LocalIp + ":" + tmpManage.OriginalConfigManage.Original_Port.ToString() + "  " + tmpstatus;
                        }
                        else
                        {
                            listBox_Online.Items[index] = "(" + tmpManage.OriginalConfigManage.Original_OfficeNumber.ToUpper() + ")" + tmpManage.OriginalConfigManage.Original_ConfigName + ":" + tmpManage.OriginalConfigManage.Original_Port.ToString() + "  " + tmpstatus;
                        }
                        index++;
                    }
                    else
                    {
                        if (tmpManage.EtermType == "地址认证")
                        {
                            listBox_Online.Items.Add("(" + tmpManage.OriginalConfigManage.Original_OfficeNumber.ToUpper() + ")" + tmpManage.OriginalConfigManage.Original_LocalIp + ":" + tmpManage.OriginalConfigManage.Original_Port.ToString() + "  " + tmpstatus);
                        }
                        else
                        {
                            listBox_Online.Items.Add("(" + tmpManage.OriginalConfigManage.Original_OfficeNumber.ToUpper() + ")" + tmpManage.OriginalConfigManage.Original_ConfigName + ":" + tmpManage.OriginalConfigManage.Original_Port.ToString() + "  " + tmpstatus);
                        }
                    }
                }
            }
        }
Exemplo n.º 18
0
        /// <summary>
        /// 检查中文拼音是否支持,防止出现缺少汉字的情况
        /// </summary>
        /// <param name="content"></param>
        /// <returns></returns>
        private bool CheckChinesePinYin(string content)
        {
            //先把字节包转换为字符串
            string tmpcontent = content;

            //源字符串长度
            int count = tmpcontent.Length;

            //序号
            int index = 0;

            //汉字的起始、结束字节标志
            byte[] beginbuf = { 0x1B, 0x0E };
            byte[] endbuf   = { 0x1B, 0x0F };

            int  code = 0;
            byte tmpbyte;

            //汉字范围
            //范围(0x4e00~0x9fff)转换成int(chfrom~chend)
            int chfrom = Convert.ToInt32("4e00", 16);
            int chend  = Convert.ToInt32("9fff", 16);

            bool isChinese = false;//是否汉字

            //临时存储连续的汉字
            string tmpstr    = "";
            string tmppinyin = "";//拼音

            ArrayList al = new ArrayList();

            PublicInfo thepub = new PublicInfo();

            bool flag = true;

            for (int i = 0; i < count; i++)
            {
                //获得字符串中指定索引i处字符unicode编码
                code = Char.ConvertToUtf32(tmpcontent, i);
                if (code >= chfrom && code <= chend)
                {
                    //Base_PinYin _Base_PinYin = m_BasePinYinList.Find(delegate(Base_PinYin x)
                    //{
                    //    if (x.HanZi == tmpcontent.Substring(i, 1))
                    //    {
                    //        return true;
                    //    }
                    //    else
                    //    {
                    //        return false;
                    //    }
                    //});

                    //if ((_Base_PinYin == null) || (_Base_PinYin.BianMa.Trim() == "") || (_Base_PinYin.PinYin.Trim() == ""))
                    //{
                    //    if (_Base_PinYin == null)
                    //    {
                    //        //添加到数据库
                    //        _Base_PinYin = new Base_PinYin();
                    //        _Base_PinYin.HanZi = tmpcontent.Substring(i, 1);
                    //        _Base_PinYin.PinYin = "";
                    //        _Base_PinYin.BianMa = "";
                    //        _Base_PinYin.Remarks = "";
                    //        ManageSpace.Manage.Add_Base_PinYin(_Base_PinYin);
                    //    }

                    //    flag = false;
                    //}

                    //检查中文拼音是否支持
                    byte[] hanziBt;
                    tmppinyin = chs2py.convert(tmpcontent.Substring(i, 1), out hanziBt);
                    if (hanziBt == null)
                    {
                        Log.Record("chinese.log", "不支持汉字:" + tmpcontent.Substring(i, 1) + " ||| " + tmpcontent);
                        return(false);
                    }
                }
            }

            if (!flag)
            {
                Log.Record("chinese.log", "不支持汉字:" + tmpcontent);
                return(false);
            }
            else
            {
                return(true);
            }
        }
Exemplo n.º 19
0
 private static void Combo(ActionStatus actionStatus, CardBasicInfo card, List <string> ActionCodeLst, PublicInfo PlayInfo)
 {
     if ((card.卡牌种类 != CardBasicInfo.资源类型枚举.法术) &&
         PlayInfo.连击状态 && (!string.IsNullOrEmpty(card.连击效果)))
     {
         //初始化 Buff效果等等
         SpellCard ablity = (SpellCard)CardUtility.GetCardInfoBySN(card.连击效果);
         if (ablity != null)
         {
             var ResultArg = ablity.UseSpell(actionStatus);
             if (ResultArg.Count != 0)
             {
                 ActionCodeLst.AddRange(ResultArg);
                 //英雄技能等的时候,不算[本方施法]
                 if (ablity.法术卡牌类型 == CardBasicInfo.法术卡牌类型枚举.普通卡牌)
                 {
                     actionStatus.battleEvenetHandler.事件池.Add(new EventCard.全局事件()
                     {
                         触发事件类型 = EventCard.事件类型枚举.施法,
                         触发位置   = PlayInfo.Hero.战场位置
                     });
                 }
             }
         }
     }
 }
Exemplo n.º 20
0
 public string DealHero(ActionStatus game, PublicInfo PlayInfo)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 21
0
 public ResponseMsg_FollowUpdate(PublicInfo follow)
 {
     op          = MessageEnums.OperationCode.FollowUpdateResponse;
     this.Follow = follow;
 }
Exemplo n.º 22
0
 public ResponseMsg_FollowAddRemove(MessageEnums.Status status, PublicInfo follow)
 {
     op          = MessageEnums.OperationCode.FollowAddRemoveResponse;
     this.Status = status;
     this.Follow = follow;
 }