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, }); }