コード例 #1
0
        public static async Task <string> GetMails(long member_no, long user_no, int count, long?nextPageKey = null, List <MailState> states = null)
        {
            int skip = 0;

            if (nextPageKey != null)
            {
                skip = (int)nextPageKey * count;
            }

            // 상태 지정이 없으면 기본값으로 보냄,읽음 상태만 처리하도록 한다.
            if (states == null)
            {
                states = new List <MailState>();
                states.Add(MailState.Send);
                states.Add(MailState.Read);
            }

            var mails = await MailQuery.GetMail(member_no, user_no, skip, count, states);

            if (mails.Count == 0)
            {
                return(string.Empty);
            }

            return(JsonConvert.SerializeObject(mails));
        }
コード例 #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,
            });
        }