/// <summary> /// Return the date of the parsed string. /// </summary> /// <param name="line">The string to parse.</param> /// <returns></returns> public override DateLog ParseDateLog(string line) { var Hour = Int32.Parse(line[0].ToString()) * 10 + Int32.Parse(line[1].ToString()); var Minute = Int32.Parse(line[3].ToString()) * 10 + Int32.Parse(line[4].ToString()); var Second = Int32.Parse(line[6].ToString()) * 10 + Int32.Parse(line[7].ToString()); DateLog tmp = new DateLog(new DateTime(1, 1, 1, Hour, Minute, Second, 0), 0); return(tmp); }
/// <summary> /// Return the date of the parsed string. /// </summary> /// <param name="line">The string to parse.</param> /// <returns></returns> public override DateLog ParseDateLog(string line) { var Anno = Int32.Parse(line[3].ToString()) * 1000 + Int32.Parse(line[4].ToString()) * 100 + Int32.Parse(line[5].ToString()) * 10 + Int32.Parse(line[6].ToString()); var Mese = Int32.Parse(line[7].ToString()) * 10 + Int32.Parse(line[8].ToString()); var Giorno = Int32.Parse(line[9].ToString()) * 10 + Int32.Parse(line[10].ToString()); var Hour = (ParseMilliseconds(line) / 3600000); var Minute = ((ParseMilliseconds(line) / 60000) - (Hour * 60)); var Second = ((ParseMilliseconds(line) / 1000) - (Hour * 3600) - (Minute * 60)); var Cents = ((ParseMilliseconds(line) / 10) - (Hour * 360000) - (Minute * 6000) - (Second * 100)); DateLog tmp = new DateLog(new DateTime(1, 1, 1, Hour, Minute, Second, Cents), 0); return(tmp); }
public async Task <IActionResult> ViewedFriendRequestsPage([FromBody] ViewedFriendRequestsPage.Request req) { var db = PDBSM.PersonalDBContext(SelfHost.playerInfo.playerId); var dateLog = await db.DateLogs.FindAsync(SelfHost.playerInfo.playerId); if (dateLog == null) { dateLog = new DateLog(SelfHost.playerInfo.playerId); await db.DateLogs.AddAsync(dateLog); } dateLog.FriendRequestPageLastView = DateTime.UtcNow; await db.SaveChangesAsync(); var res = new ViewedFriendRequestsPage.Response(); return(Ok(res)); }
/// <summary> /// Execute the parsing of the date. /// </summary> /// <param name="line">The string to parse.</param> public virtual DateLog ParseDateLog(string line) { try { Int32.Parse(line[0].ToString()); } catch { return(new DateLog(new DateTime(1, 1, 1, 0, 0, 0, 0), 0)); } var Year = Int32.Parse(line[6].ToString()) * 1000 + Int32.Parse(line[7].ToString()) * 100 + Int32.Parse(line[8].ToString()) * 10 + Int32.Parse(line[9].ToString()); var Month = Int32.Parse(line[3].ToString()) * 10 + Int32.Parse(line[4].ToString()); var Day = Int32.Parse(line[0].ToString()) * 10 + Int32.Parse(line[1].ToString()); var Hour = Int32.Parse(line[11].ToString()) * 10 + Int32.Parse(line[12].ToString()); var Minute = Int32.Parse(line[14].ToString()) * 10 + Int32.Parse(line[15].ToString()); var Second = Int32.Parse(line[17].ToString()) * 10 + Int32.Parse(line[18].ToString()); var Cents = 0; var firstIndex = line.IndexOf(' '); line = line.Remove(0, firstIndex + 1); firstIndex = line.IndexOf(' '); line = line.Remove(firstIndex); var lastIndex = line.LastIndexOf('.'); line = line.Remove(0, lastIndex + 1); if (line.Length == 2) { Cents = Int32.Parse(line[0].ToString()) * 100 + Int32.Parse(line[1].ToString()) * 10; } else { Cents = Int32.Parse(line[0].ToString()) * 100 + Int32.Parse(line[1].ToString()) * 10 + Int32.Parse(line[2].ToString()); } DateLog tmp = new DateLog(new DateTime(1, 1, 1, Hour, Minute, Second, Cents), 0); return(tmp); }
async Task GetFriendsResponse(GetFriends.Response res) { var lists = new GetFriends.Lists(); res.lists = lists; var selfPersonalDB = PDBSM.PersonalDBContext(SelfHost.playerInfo.playerId); var dateLog = await selfPersonalDB.DateLogs.FindAsync(SelfHost.playerInfo.playerId); if (dateLog == null) { dateLog = new DateLog(SelfHost.playerInfo.playerId); } res.FriendRequestPageLastView = dateLog.FriendRequestPageLastView; lists.Friends = new List <GetFriends.FriendPlayer>(); lists.Requests = new List <GetFriends.RequestPlayer>(); lists.MutePlayers = new List <GetFriends.MutePlayer>(); { var friends = await Common2DB.Friends.Where(f => f.playerIdL == SelfHost.playerInfo.playerId).ToListAsync(); for (int i = 0; i < friends.Count; i++) { var state = ""; var onlineState = new OnlineState(friends[i].playerIdR); if (await onlineState.FetchAsync() && await new Session(onlineState.Model.sessionId).ExistsAsync()) { state = onlineState.Model.state; } var onlineStamp = new OnlineStamp(friends[i].playerIdR); if (!await onlineStamp.FetchAsync()) { onlineStamp.Model.date = DateTime.MinValue; var reco = await PDBSM.PersonalDBContext(friends[i].playerIdR).DateLogs.FindAsync(friends[i].playerIdR); if (reco != null) { onlineStamp.Model.date = reco.OnlineStamp; } await onlineStamp.SaveAsync(); } lists.Friends.Add(new GetFriends.FriendPlayer() { playerId = friends[i].playerIdR, lastLogin = onlineStamp.Model.date, onlineState = state, }); } } { var friends = await Common2DB.Friends.Where(f => f.playerIdR == SelfHost.playerInfo.playerId).ToListAsync(); for (int i = 0; i < friends.Count; i++) { var state = ""; var onlineState = new OnlineState(friends[i].playerIdL); if (await onlineState.FetchAsync() && await new Session(onlineState.Model.sessionId).ExistsAsync()) { state = onlineState.Model.state; } var onlineStamp = new OnlineStamp(friends[i].playerIdL); if (!await onlineStamp.FetchAsync()) { onlineStamp.Model.date = DateTime.MinValue; var reco = await PDBSM.PersonalDBContext(friends[i].playerIdL).DateLogs.FindAsync(friends[i].playerIdL); if (reco != null) { onlineStamp.Model.date = reco.OnlineStamp; } await onlineStamp.SaveAsync(); } lists.Friends.Add(new GetFriends.FriendPlayer() { playerId = friends[i].playerIdL, lastLogin = onlineStamp.Model.date, onlineState = state, }); } } var favorites = await selfPersonalDB.FavoriteFriends.Where(r => r.playerId == SelfHost.playerInfo.playerId).ToListAsync(); lists.Friends.ForEach(friend => { var idx = favorites.FindIndex(favorite => favorite.playerId == friend.playerId); if (0 <= idx) { friend.favorite = true; favorites.RemoveAt(idx); } }); if (0 < favorites.Count) { selfPersonalDB.RemoveRange(favorites); await selfPersonalDB.SaveChangesAsync(); } var requests = await selfPersonalDB.FriendRequests.Where(r => r.playerIdDst == SelfHost.playerInfo.playerId).ToListAsync(); for (int i = 0; i < requests.Count; i++) { var player = new Player(requests[i].playerIdSrc); if (await player.Validate(PDBSM)) { lists.Requests.Add(new GetFriends.RequestPlayer() { playerId = player.playerId, applicationDate = requests[i].timeStamp, }); } } var mutePlayers = await selfPersonalDB.MutePlayers.Where(f => f.playerIdSrc == SelfHost.playerInfo.playerId).ToListAsync(); for (int i = 0; i < mutePlayers.Count; i++) { var mutePlayer = mutePlayers[i]; lists.MutePlayers.Add(new GetFriends.MutePlayer() { playerId = mutePlayer.playerIdDst, text = mutePlayer.text, voice = mutePlayer.voice, }); } }
public async Task InvokeAsync(HttpContext context, IServicePack servicePack) { var log = new LogModels.HttpRequest.Host(); servicePack.Log.AddChild(log); var selfHost = new SelfHost(); servicePack.Authorized = false; servicePack.SelfHost = selfHost; if (context.Request.Path == "/api/Auth/Login" || context.Request.Path == "/HealthCheck" || context.Request.Path == "/api/Test/TssVersion" ) { await _next(context); return; } try { log.Authorization = "Nothing \"Authorization\" header."; string authorization = context.Request.Headers["Authorization"]; if (string.IsNullOrEmpty(authorization)) { throw new Exception(); } log.Authorization = "Error \"Authorization\" token."; if (!authorization.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase)) { throw new Exception(); } var token = authorization.Substring("Bearer ".Length).Trim(); var payload = EvoApiJwt.Extract(token); log.SessionId = payload.sessionId; var session = new Session(payload.sessionId); if (!await session.FetchAsync() || !EvoApiJwt.IsAuthenticated(token, session.Model.signingKey)) { log.Authorization = "Unauthorized."; if (context.Request.Path == "/api/HandShake") { await _next(context); return; } context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; return; } if (session.Model.banned) { context.Response.StatusCode = (int)HttpStatusCode.Forbidden; return; } log.Authorization = "Succeeded."; servicePack.Authorized = true; selfHost.sessionId = payload.sessionId; selfHost.signingKey = session.Model.signingKey; selfHost.loginDate = log.LoginDate = session.Model.loginDate; selfHost.account = log.Account = session.Model.account; selfHost.accountType = log.AccountType = session.Model.accountType; selfHost.accountAccessToken = session.Model.accountAccessToken; selfHost.matchingArea = session.Model.matchingArea; selfHost.hostType = log.HostType = session.Model.hostType; if (selfHost.hostType == evolib.HostType.Player) { log.PlayerId = session.Model.playerId; // only DedicatedServer ! if (context.Request.Path == "/api/BattlePass/PassExpSave" || context.Request.Path == "/api/Matching/EntryBattleServer" || context.Request.Path == "/api/Matching/ReportAcceptPlayer" || context.Request.Path == "/api/Matching/ReportBattlePhase" || context.Request.Path == "/api/Matching/ReportDisconnectPlayer" || context.Request.Path == "/api/Matching/DeleteLastBattle" || context.Request.Path == "/api/Matching/SearchEncryptionKey" || context.Request.Path == "/api/MatchResult/ReportMatchResult" || context.Request.Path == "/api/PlayerInformation/ReportBattleResult" || context.Request.Path == "/api/ViewMatch/ReplayInfoSave" || context.Request.Path == "/api/CareerRecord/Save" || context.Request.Path == "/api/Achievement/GetStatus" || context.Request.Path == "/api/Achievement/SaveStatus" ) { log.Authorization = "DedicatedServer's protocol."; context.Response.StatusCode = (int)HttpStatusCode.BadRequest; return; } if (session.Model.initialLevel == 0 // PathString型は大文字小文字区別しない!のでこの書き方で良い. && context.Request.Path != "/api/PlayerInformation/SetFirstOnetime" && context.Request.Path != "/api/MasterData/Get" && context.Request.Path != "/api/HandShake" && context.Request.Path != "/api/Auth/Logout" ) { log.Authorization = "initilaLevel limit."; context.Response.StatusCode = (int)HttpStatusCode.BadRequest; return; } var player = new Player(session.Model.playerId); if (!await player.Validate(servicePack.PersonalDBShardManager) || player.Model.sessionId != payload.sessionId) { log.Authorization = "Multiple login."; context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; await session.DeleteAsync(); return; } log.PlayerName = player.Model.playerName; selfHost.playerInfo = new PlayerInfo { playerId = player.playerId, playerName = player.Model.playerName, battleRating = player.Model.battleRating, playerIconItemId = player.Model.playerIconItemId, pretendedOffline = session.Model.pretendedOffline, }; if (!session.Model.pretendedOffline) { if (session.Model.lastOnlineStamp < (DateTime.UtcNow - TimeSpan.FromMinutes(2))) { var db = servicePack.PersonalDBShardManager.PersonalDBContext(session.Model.playerId); var reco = await db.DateLogs.FindAsync(selfHost.playerInfo.playerId); if (reco == null) { reco = new DateLog(selfHost.playerInfo.playerId); await db.DateLogs.AddAsync(reco); } var onlineStamp = new OnlineStamp(selfHost.playerInfo.playerId); reco.OnlineStamp = onlineStamp.Model.date = session.Model.lastOnlineStamp = DateTime.UtcNow; await db.SaveChangesAsync(); await onlineStamp.SaveAsync(); await session.SaveAsync(); } } } else if (selfHost.hostType == evolib.HostType.BattleServer) { selfHost.battleServerInfo = new BattleServerInfo { serverId = session.Model.serverId, matchId = session.Model.matchId, }; } } catch { context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; return; } await _next(context); }