Ejemplo n.º 1
0
        private void Startup(uint ip, ushort steamPort, ushort gamePort, ushort queryPort, ServerMode serverMode, string versionString)
        {
            if (NativeHelpers.ServicesGameServer_GetSteamLoadStatus() == LoadStatus.NotLoaded)
            {
                // Only startup the native parts if they are not loaded yet
                if (!NativeMethods.ServicesGameServer_Startup(Constants.VersionInfo.InterfaceID, ip, steamPort, gamePort, queryPort, (int)serverMode, versionString))
                {
                    // Setup failed!
                    Instance = null;
                    ErrorCodes error = NativeHelpers.ServicesGameServer_GetErrorCode();
                    if (error == ErrorCodes.InvalidInterfaceVersion)
                    {
                        Error.ThrowError(ErrorCodes.InvalidInterfaceVersion,
                                         NativeMethods.ServicesGameServer_GetInterfaceVersion(), Constants.VersionInfo.InterfaceID);
                    }
                    else
                    {
                        Error.ThrowError(error);
                    }
                }
            }

            serviceJobs = new JobManager();
            serviceJobs.AddJob(new DelegateJob(() => RegisterManagedCallback(), () => RemoveManagedCallback()));
            serviceJobs.AddJob(new DelegateJob(() => gameServer      = new GameServer(), () => gameServer.ReleaseManagedResources()));
            serviceJobs.AddJob(new DelegateJob(() => gameServerStats = new GameServerStats(), () => gameServerStats.ReleaseManagedResources()));

            serviceJobs.RunCreateJobs();
        }
Ejemplo n.º 2
0
        public static GameServerStats CreateGameServerStats()
        {
            var match = CreateGameMatchStats();
            var modes = new ConcurrentDictionary <string, int> {
                [match.GameMode] = 1
            };
            var maps = new ConcurrentDictionary <string, int> {
                [match.Map] = 1
            };
            var stats = new GameServerStats
            {
                Endpoint             = Server1Endpoint,
                Name                 = Server1Name,
                TotalMatchesPlayed   = 1,
                MaximumPopulation    = 5,
                TotalPopulation      = 5,
                PlayedGameModes      = modes,
                PlayedMaps           = maps,
                MaximumMatchesPerDay = 1,
                Top5Maps             = new[] { Map1 },
                Top5GameModes        = new[] { GameModeDM }
            };

            stats.CalculateAverageData(Timestamp1, Timestamp1);
            return(stats);
        }
Ejemplo n.º 3
0
        public void AfterClientSendingGetPopularServersRequest()
        {
            SendServer2Info();
            SendServer3Info();
            var match = Test.CreateGameMatchStats();

            for (var i = 0; i < 5; i++)
            {
                client.SendRequest().PutMatchStats(match, Test.Server1Endpoint, Test.Timestamp1);
            }
            for (var i = 0; i < 3; i++)
            {
                client.SendRequest().PutMatchStats(match, Test.Server2Endpoint, Test.Timestamp1);
            }
            for (var i = 0; i < 2; i++)
            {
                client.SendRequest().PutMatchStats(match, Test.Server3Endpoint, Test.Timestamp1);
            }
            var response = client.GetPopularServers(3);

            server.ClearDatabaseAndCache();
            var server1        = new GameServerStats(Test.Server1Endpoint, Test.Server1Name, 5);
            var server2        = new GameServerStats(Test.Server2Endpoint, Test.Server2Name, 3);
            var server3        = new GameServerStats(Test.Server3Endpoint, Test.Server3Name, 2);
            var servers        = new[] { server1, server2, server3 };
            var json           = Extensions.SerializePopularServers(servers);
            var popularServers = JsonConvert.DeserializeObject <GameServerStats[]>(json);
            var result         = JsonConvert.DeserializeObject <GameServerStats[]>(response.Message);

            result.ShouldBeEquivalentTo(popularServers);
        }
        public GameServerStats GetStats()
        {
            var oldestRoom = _roomManager.GetOldestRoom();

            var result = new GameServerStats()
            {
                RoomCount           = _roomManager.GetRoomsCount(),
                PeerCount           = PeerCollection.GetPeerCount(),
                RoomsPeerCount      = _roomManager.GetRoomPeerCount(),
                OldestRoomCreatedOn = oldestRoom?.GetCreatedOnDateTime()
            };

            result.PeersCountPerPort = new Dictionary <ushort, int>();
            foreach (var listener in GetListeners())
            {
                result.PeersCountPerPort.Add(listener.GetListenPort(), PeerCollection.GetPeerCount());
            }

            return(result);
        }
Ejemplo n.º 5
0
 private static GameServerStats RemoveExcessFields(GameServerStats stats)
 {
     return(Test.CreateGameServersStatsWithArguments(stats.Endpoint, stats.TotalMatchesPlayed,
                                                     stats.MaximumMatchesPerDay, stats.AverageMatchesPerDay, stats.MaximumPopulation, stats.AveragePopulation,
                                                     stats.Top5GameModes, stats.Top5Maps));
 }