Esempio n. 1
0
        public async Task Test_ConcurrentCallsToUpdateStatHistoryDoesNotCauseException()
        {
            var server        = serviceProvider.GetRequiredService <IW4MServer>();
            var configHandler = A.Fake <IConfigurationHandler <StatsConfiguration> >();
            var mgr           = new StatManager(serviceProvider.GetRequiredService <IManager>(), serviceProvider.GetRequiredService <IDatabaseContextFactory>(), configHandler);
            var target        = ClientGenerators.CreateDatabaseClient();

            target.CurrentServer = server;

            A.CallTo(() => configHandler.Configuration())
            .Returns(new StatsConfiguration()
            {
                TopPlayersMinPlayTime = 0
            });

            var dbFactory = serviceProvider.GetRequiredService <IDatabaseContextFactory>();
            var db        = dbFactory.CreateContext(true);

            db.Set <EFServer>().Add(new EFServer()
            {
                EndPoint = server.EndPoint.ToString()
            });

            db.Clients.Add(target);
            db.SaveChanges();

            mgr.AddServer(server);
            await mgr.AddPlayer(target);

            var stats = target.GetAdditionalProperty <EFClientStatistics>("ClientStats");

            await mgr.UpdateStatHistory(target, stats);
        }
Esempio n. 2
0
 public async Task OnEventAsync(Event E, Server S)
 {
     switch (E.Type)
     {
         case Event.GType.Start:
             Manager.AddServer(S);
             break;
         case Event.GType.Stop:
             break;
         case Event.GType.Connect:
             Manager.AddPlayer(E.Origin);
             break;
         case Event.GType.Disconnect:
             await Manager.RemovePlayer(E.Origin);
             break;
         case Event.GType.Say:
             if (E.Data != string.Empty && E.Data.Trim().Length > 0 && E.Data.Trim()[0] != '!')
                 await Manager.AddMessageAsync(E.Origin.ClientId, E.Owner.GetHashCode(), E.Data);
             break;
         case Event.GType.MapChange:
             break;
         case Event.GType.MapEnd:
             await Manager.Sync(S);
             break;
         case Event.GType.Broadcast:
             break;
         case Event.GType.Tell:
             break;
         case Event.GType.Kick:
             break;
         case Event.GType.Ban:
             break;
         case Event.GType.Remote:
             break;
         case Event.GType.Unknown:
             break;
         case Event.GType.Report:
             break;
         case Event.GType.Flag:
             break;
         case Event.GType.Script:
             break;
         case Event.GType.Kill:
             string[] killInfo = (E.Data != null) ? E.Data.Split(';') : new string[0];
             if (killInfo.Length >= 9 && killInfo[0].Contains("ScriptKill") && E.Owner.CustomCallback)
                 await Manager.AddScriptKill(E.Origin, E.Target, S.GetHashCode(), S.CurrentMap.Name, killInfo[7], killInfo[8], killInfo[5], killInfo[6], killInfo[3], killInfo[4]);
             else if (!E.Owner.CustomCallback)
                 await Manager.AddStandardKill(E.Origin, E.Target);
             break;
         case Event.GType.Death:
             break;
     }
 }