public static async Task <Models.Character> InsertCharacter(long member_no, long user_no, string user_name, string player_id, int character_id)
        {
            var character_data = ACDC.CharacterData[character_id];

            if (character_data == null || character_data == default(JCharacterData))
            {
                Log.Error($"Character cannot find character_id:{character_id}, user_name:{user_name}");
                return(null);
            }

            var character = await CharacterCache.Instance.GetEntity(member_no, user_no, character_id, true, false, false);

            if (character == null || character == default(Models.Character))
            {
                character = await CharacterCache.Instance.InsertEntity(member_no, new Models.Character()
                {
                    user_no         = user_no,
                    character_type  = character_id,
                    character_level = character_data.Level,
                    rank_level      = 1,
                });
            }
            else
            {
                Log.Error($"Character already exist character_id:{character_id}, user_name:{user_name}");
                return(null);
            }

            Dictionary <string, object> properties = new Dictionary <string, object>();

            properties.Add("Name", user_name);
            await Ranking.PutProperty(player_id, character_id.ToString(), properties);

            return(character);
        }
Ejemplo n.º 2
0
        public override async Task GetUserInfo(GetUserInfoRequest request, IServerStreamWriter <GetUserInfoReply> responseStream, ServerCallContext context)
        {
            var session = await context.GetSession();

            if (session == null)
            {
                await responseStream.WriteAsync(new GetUserInfoReply()
                {
                    Code = ErrorCode.LostSession
                });

                return;
            }

            UserInfo userInfo = new UserInfo();
            await userInfo.Load(session);

            Dictionary <string, object> properties = new Dictionary <string, object>();

            properties.Add("Name", userInfo.UserName);
            await Ranking.PutProperty(session.player_id, string.Empty, properties);

            //await Ranking.ProcessRankingReward(session);



            var member = await MemberQuery.GetMember(session.player_id);

            // todo : member.last_play_time 체크로 지급 여부 판단
            var currentTime = DateTime.UtcNow;

            var mails = await MailQuery.GetSystemMail(member.last_play_time);

            foreach (var mail in mails)
            {
                if (mail.recipient != string.Empty)
                {
                    // 받는 사람 목록이 있는 경우 해당 player_id 가 맞는지 비교
                    string[] words = mail.recipient.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                    if (words.Contains(member.player_id) == false)
                    {
                        continue;
                    }
                }

                var m = new Mail();
                switch (member.language_code)
                {
                case "ko":
                    m.title = mail.title_ko;
                    m.body  = mail.body_ko;
                    break;

                default:
                    m.title = mail.title_en;
                    m.body  = mail.body_en;
                    break;
                }
                m.mail_state = MailState.Send;
                if (mail.item_id != 0 && mail.item_count > 0)
                {
                    m.has_item = true;
                }
                m.item_id     = mail.item_id;
                m.item_count  = mail.item_count;
                m.sender      = mail.sender;
                m.send_time   = currentTime;
                m.expiry_time = currentTime.AddDays(mail.expiry_days);
                m.user_no     = member.user_no;

                await MailQuery.SendMail(member.member_no, m);
            }

            // member.last_play_time 현재 시간으로 기록
            await MemberQuery.UpdateMemberLastPlayTime(session.member_no, currentTime);

            await responseStream.WriteAsync(new GetUserInfoReply()
            {
                Code = ErrorCode.Success,
                User = userInfo,
            });
        }