Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        /// <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);
        }
Ejemplo n.º 5
0
        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,
                });
            }
        }
Ejemplo n.º 6
0
        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);
        }