예제 #1
0
        private static bool StartSteamServer(Action <ulong, ulong, ServerAuth.Status> OnAuthChange)
        {
            if (Server != null)
            {
                return(false);
            }

            var serverInit = new ServerInit(Config.ModDir, Config.GameDescription);

            serverInit.Secure        = Config.Secure;
            serverInit.VersionString = Config.Version;

            Server            = new Server(_instance._appId, serverInit);
            Server.ServerName = Config.Name;
            Server.MaxPlayers = Config.MaxPlayers;
            Server.LogOnAnonymous();

            if (!Server.IsValid)
            {
                Server = null;
                Debug.LogError("Couldn't initialize steam server.");
                return(false);
            }

            Server.Auth.OnAuthChange = OnAuthChange;
            Debug.Log("Steam server initialized.");
            return(true);
        }
예제 #2
0
        public static bool CreateServer(Networking.GameServer server, bool isPublic)
        {
            Instance.isInitialized = true;

            ServerInit options = new ServerInit("Barotrauma", "Barotrauma")
            {
                GamePort  = (ushort)server.Port,
                QueryPort = (ushort)server.QueryPort
            };

            //options.QueryShareGamePort();

            instance.server = new Server(AppID, options, isPublic);
            if (!instance.server.IsValid)
            {
                instance.server.Dispose();
                instance.server = null;
                DebugConsole.ThrowError("Initializing Steam server failed.");
                return(false);
            }

            RefreshServerDetails(server);

            server.ServerPeer.InitializeSteamServerCallbacks(instance.server);

            Instance.server.LogOnAnonymous();

            return(true);
        }
    public void SteamServerStart()
    {
        // init the SteamServer needed for authentication of players
        //
        Config.ForUnity(Application.platform.ToString());
        string     path       = Path.GetFullPath(".");
        string     folderName = Path.GetFileName(Path.GetDirectoryName(path));
        ServerInit options    = new ServerInit(folderName, "Unitystation");

        server = new Server(801140, options);

        if (server != null)
        {
            if (GameData.IsHeadlessServer || GameData.Instance.testServer || SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null)
            {
                server.DedicatedServer = true;
            }
            server.LogOnAnonymous();
            server.ServerName = "Unitystation Official";
            // Set required settings for dedicated server

            Logger.Log("Setting up Auth hook", Category.Steam);
            //Process callback data for authentication
            server.Auth.OnAuthChange = AuthChange;
        }
        // confirm in log if server is actually registered or not
        if (server.IsValid)
        {
            Logger.Log("Server registered", Category.Steam);
        }
        else
        {
            Logger.Log("Server NOT registered", Category.Steam);
        }
    }
예제 #4
0
        public void InitTest()
        {
            int SERVER_CACHED_SIZE              = 0; // TODO: 初始化为适当的值
            int SERVER_BUFFER_SIZE              = 0; // TODO: 初始化为适当的值
            int SERVER_MANAGE_THREAD_POOL_SIZE  = 0; // TODO: 初始化为适当的值
            int SERVER_SEND_THREAD_POOL_SIZE    = 0; // TODO: 初始化为适当的值
            int SERVER_RECEIVE_THREAD_POOL_SIZE = 0; // TODO: 初始化为适当的值
            int SERVER_PROCESS_THREAD_POOL_SIZE = 0; // TODO: 初始化为适当的值
            int SERVER_MAX_CLIENTS              = 0; // TODO: 初始化为适当的值
            int SERVER_OUT_TIME_INTERVAL        = 0; // TODO: 初始化为适当的值

            ServerInit.Init(SERVER_CACHED_SIZE, SERVER_BUFFER_SIZE, SERVER_MANAGE_THREAD_POOL_SIZE, SERVER_SEND_THREAD_POOL_SIZE, SERVER_RECEIVE_THREAD_POOL_SIZE, SERVER_PROCESS_THREAD_POOL_SIZE, SERVER_MAX_CLIENTS, SERVER_OUT_TIME_INTERVAL);
            Assert.Inconclusive("无法验证不返回值的方法。");
        }
예제 #5
0
파일: Menu.cs 프로젝트: miyu8/Task8_3
 public void Run()
 {
     Console.CursorVisible = false;
     menu[0]     = "Новая игра";
     menu[1]     = "Загрузить существующую игру";
     menu2[0]    = "Стандартная";
     menu2[1]    = "Альтернативная";
     menu2[2]    = "Смешанная";
     menu2[3]    = "С травоядными животными";
     boolMenu[0] = true;
     options     = jSON.GetJson();
     serverInit  = new ServerInit(options);
     MainMenu();
 }
예제 #6
0
    private void StartSteamServer()
    {
        if (Global.get_SteamServer() != null)
        {
            return;
        }
        IPAddress ipAddress = (IPAddress)null;

        if (!string.IsNullOrEmpty(ConVar.Server.ip))
        {
            ipAddress = IPAddress.Parse(ConVar.Server.ip);
        }
        Config.ForUnity(Application.get_platform().ToString());
        ServerInit serverInit = new ServerInit("rust", "Rust");

        serverInit.IpAddress     = (__Null)ipAddress;
        serverInit.GamePort      = (__Null)(int)(ushort)((Network.Server)Network.Net.sv).port;
        serverInit.Secure        = (__Null)(ConVar.Server.secure ? 1 : 0);
        serverInit.VersionString = (__Null)2161.ToString();
        if (this.useQueryPort)
        {
            serverInit.QueryPort = (__Null)(int)(ushort)ConVar.Server.queryport;
        }
        else
        {
            serverInit.QueryShareGamePort();
        }
        Global.set_SteamServer(new Facepunch.Steamworks.Server(Defines.appID, serverInit));
        if (!((BaseSteamworks)Global.get_SteamServer()).get_IsValid())
        {
            Debug.LogWarning((object)("Couldn't initialize Steam Server (" + (object)ipAddress + ")"));
            ((BaseSteamworks)Global.get_SteamServer()).Dispose();
            Global.set_SteamServer((Facepunch.Steamworks.Server)null);
            Application.Quit();
        }
        else
        {
            if (CommandLine.HasSwitch("-debugsteamcallbacks"))
            {
                Facepunch.Steamworks.Server steamServer = Global.get_SteamServer();
                ((BaseSteamworks)steamServer).OnAnyCallback = (__Null)Delegate.Combine((Delegate)((BaseSteamworks)steamServer).OnAnyCallback, (Delegate) new Action <object>(ServerMgr.DebugPrintSteamCallback));
            }
            Global.get_SteamServer().get_Auth().OnAuthChange = (__Null) new Action <ulong, ulong, ServerAuth.Status>(this.OnValidateAuthTicketResponse);
            ((BaseSteamworks)Global.get_SteamServer()).get_Inventory().add_OnDefinitionsUpdated(new Action(this.OnInventoryDefinitionsUpdated));
            Global.get_SteamServer().LogOnAnonymous();
            ((MonoBehaviour)this).InvokeRepeating("UpdateServerInformation", 1f, 10f);
            DebugEx.Log((object)"Connected to Steam", (StackTraceLogType)0);
        }
    }
예제 #7
0
        public void Init()
        {
            var serverInit = new ServerInit("rust", "Rust");

            serverInit.GamePort  = 28015;
            serverInit.Secure    = true;
            serverInit.QueryPort = 28016;

            using (var server = new Facepunch.Steamworks.Server(252490, serverInit))
            {
                server.ServerName = "My Test Server";
                server.LogOnAnonymous();

                Assert.IsTrue(server.IsValid);
            }
        }
예제 #8
0
    // --------------------------------------------------------------------------------
    // Callbacks
    // --------------------------------------------------------------------------------

    // Server successfully initialized
    void uLink_OnServerInitialized()
    {
        LogManager.General.Log("Server successfully started!");

        // Set private key
        ServerInit.InitPrivateKey();

        // Enable game mode
        gameMode.enabled = true;

        // Lower CPU consumption
        LogManager.General.Log("Setting frame rate to " + serverFrameRate);
        QualitySettings.vSyncCount  = 0;
        Application.targetFrameRate = serverFrameRate;        //(int)uLink.Network.sendRate * 2;

        // Max score needed
        if (GameManager.isArena && !isTestServer)
        {
            int playerCount = accountToParty.Count;
            gameMode.scoreNeededToWin = playerCount / 2 * 500;
            LogManager.General.Log("A team score of " + gameMode.scoreNeededToWin + " is needed to win the game.");
        }
        else
        {
            gameMode.scoreNeededToWin = 999999999;
        }

        // Start conditions
        if (!GameManager.isArena || isTestServer)
        {
            this.SendGameStart();
        }

        // Disable network emulation on server
        LogManager.General.Log("Disabling network emulation");
        NetworkHelper.DisableNetworkEmulation();

        // Fastest quality level on server
        LogManager.General.Log("Enabling lowest quality level");
        QualitySettings.SetQualityLevel(0);
    }
예제 #9
0
        public void Start()
        {
            server.Start();

            if (!PrivateServer)
            {
                MasterServer.Start(this);
            }

            if (ServerConfig.LoadConfig(ConfigDirectory, out var config))
            {
                Config = config;
                Logger.LogDebug($"Loaded {Config.Bans.Count} bans.");
            }

            if (RequireSteamAuth)
            {
                Logger.LogDebug("Enabling steam authentication...");

                var serverInit = new ServerInit("Getting Over It", "Getting Over It with Bennett Foddy")
                {
                    GamePort = (ushort)Port,
                    Secure   = false
                };

                SteamServer = new Server(SharedConstants.SteamAppId, serverInit);
                SteamServer.Auth.OnAuthChange  += OnSteamAuthChange;
                SteamServer.ServerName          = Name;
                SteamServer.AutomaticHeartbeats = false;
                SteamServer.DedicatedServer     = !ListenServer;
                SteamServer.MaxPlayers          = MaxPlayers;
                SteamServer.LogOnAnonymous();

                Logger.LogDebug("Steam authentication enabled.");
            }

            Running = true;
        }
    public static void Init()
    {
        if (ticket != null)
        {
            ticket.Cancel();
        }

        if (Server.Instance != null)
        {
            return;
        }

        Debug.Log("SNet_Auth initiliazed");

        ServerInit initer = new ServerInit("", "");

        initer.GamePort = 27020;

        var server = new Server(Client.Instance.AppId, initer);

        if (server == null)
        {
            Debug.LogError("Steam Server init failed. Please restart the application/Unity");
            Application.Quit();
            return;
        }

        server.LogOnAnonymous();

        server.Auth.OnAuthChange = (steamid, ownerid, status) =>
        {
            Debug.Log(status + " " + ownerid);
            server.Auth.EndSession(steamid);

            Transform member = SNet_Manager.instance.lobbyMemberHolder.Find(steamid.ToString());

            if (status == ServerAuth.Status.OK)
            {
                if (SNet_Network.instance.isHost())
                { // client validated, send validate message to all of the clients
                    current.validatedIds.Add(steamid);
                    Validate(steamid);

                    // Send all validateds to the new validated user.
                    SNet_Network.instance.Send_Message(new Auth_All(), steamid);

                    // Send the others the new one.
                    ulong[] members = Client.Instance.Lobby.GetMemberIDs();
                    foreach (ulong u in members)
                    {
                        if (u != steamid)
                        {
                            SNet_Network.instance.Send_Message(new Auth_V(steamid), u);
                        }
                    }
                }

                else if (SNet_Network.instance.isHost(steamid))
                {
                    // host validated. send your auth ticket to the host.
                    if (ticket != null)
                    {
                        ticket.Cancel();
                    }

                    ticket = Client.Instance.Auth.GetAuthSessionTicket();
                    SNet_Network.instance.Send_Message(new Auth_H(ticket.Data), SNet_Network.currentHost);
                }

                /*
                 * USER VALIDATED
                 * */
                Debug.Log("User validated: " + steamid);

                Validate(steamid);
            }
            else
            {
                if (member != null)
                {
                    member.Find("VACError").gameObject.SetActive(true);
                }
            }
        };
    }
예제 #11
0
    // Awake
    void Awake()
    {
        // TODO: Checks...
        instance = this;

        // This will be reset later if -batchmode was specified
#if UNITY_STANDALONE_WIN
        isTestServer = true;
#else
        isTestServer = false;
#endif

        // Default values
        serverPort = defaultServerPort;
        partyCount = 1;

        // -party0 account1 -party1 account2
        // -batchmode -port7100
        // taskkill /IM
        LogManager.General.Log("Parsing command line arguments");
        string[] args    = System.Environment.GetCommandLineArgs();
        int      partyId = GameServerParty.Undefined;

        foreach (string arg in args)
        {
            LogManager.General.Log("Command line argument: '" + arg + "'");

            // Overwrite port
            if (arg.StartsWith("-port") && arg.Length > "-port".Length)
            {
                serverPort = int.Parse(arg.Substring(5));
                // Batchmode
            }
            else if (arg == "-batchmode")
            {
                batchMode    = true;
                isTestServer = false;
                // Party count
            }
            else if (arg.StartsWith("-partycount") && arg.Length > "-partycount".Length)
            {
                partyCount = int.Parse(arg.Substring("-partycount".Length));

                LogManager.General.Log(string.Format("Creating parties: {0}", partyCount));
                GameServerParty.partyList.Clear();
                GameServerParty.CreateParties(partyCount);
                // Teams
            }
            else if (arg.StartsWith("-party") && arg.Length > "-party".Length)
            {
                partyId            = int.Parse(arg.Substring("-party".Length));
                restrictedAccounts = true;
                // Map
            }
            else if (arg.StartsWith("-map") && arg.Length > "-map".Length)
            {
                mapName = arg.Substring("-map".Length);
                // Lobby IP
            }
            else if (arg.StartsWith("-lobbyIP") && arg.Length > "-lobbyIP".Length)
            {
                lobbyIP = arg.Substring("-lobbyIP".Length);
                // Lobby Port
            }
            else if (arg.StartsWith("-lobbyPort") && arg.Length > "-lobbyPort".Length)
            {
                lobbyPort = int.Parse(arg.Substring("-lobbyPort".Length));
                // Server type
            }
            else if (arg.StartsWith("-type") && arg.Length > "-type".Length)
            {
                string serverTypeString = arg.Substring("-type".Length);
                switch (serverTypeString)
                {
                case "Arena":
                    GameManager.serverType = ServerType.Arena;
                    break;

                case "Town":
                    GameManager.serverType = ServerType.Town;
                    break;

                case "FFA":
                    GameManager.serverType = ServerType.FFA;
                    break;

                case "World":
                    GameManager.serverType = ServerType.World;
                    break;
                }
                // Database IP
            }
            else if (arg.StartsWith("-databaseIP") && arg.Length > "-databaseIP".Length)
            {
                databaseIP = arg.Substring("-databaseIP".Length);
                // Database Port
            }
            else if (arg.StartsWith("-databasePort") && arg.Length > "-databasePort".Length)
            {
                databasePort = int.Parse(arg.Substring("-databasePort".Length));
                // Account ID
            }
            else
            {
                if (partyId >= 0 && partyId < GameServerParty.partyList.Count)
                {
                    var currentParty = GameServerParty.partyList[partyId];
                    accountToParty[arg] = currentParty;
                    currentParty.expectedMemberCount += 1;
                }
            }
        }

        // For testing
        if (isTestServer)
        {
            GameManager.serverType = testServerType;
        }
        else
        {
            if (!string.IsNullOrEmpty(databaseIP))
            {
                Database.AddNode("riak", databaseIP, databasePort, 10, Defaults.WriteTimeout, Defaults.ReadTimeout);
                Database.Connect();
            }
            else
            {
                LogManager.DB.LogError("No database address specified, can't connect to the database");
            }
        }

        // Create at least 1 party if no party count has been specified
        if (GameServerParty.partyList.Count != partyCount)
        {
            switch (GameManager.serverType)
            {
            case ServerType.Arena:
                partyCount = 2;
                break;

            case ServerType.FFA:
                partyCount = 10;
                break;
            }

            LogManager.General.Log(string.Format("Creating parties: {0}", partyCount));
            GameServerParty.partyList.Clear();
            GameServerParty.CreateParties(partyCount);
        }

        // Server type
        LogManager.General.Log("Server type: " + GameManager.serverType);
        MapManager.InitPhysics(GameManager.serverType);

        if (restrictedAccounts)
        {
            LogManager.General.Log("Server is restricted to the following accounts: " + accountToParty.Keys);
        }

        if (GameManager.isArena)
        {
            QueueSettings.queueIndex = accountToParty.Count / 2 - 1;
            LogManager.General.Log("Queue type is: " + (QueueSettings.queueIndex + 1) + "v" + (QueueSettings.queueIndex + 1));
        }
        else if (GameManager.isFFA)
        {
            QueueSettings.queueIndex = 0;
            LogManager.General.Log("Queue type is: " + (QueueSettings.queueIndex + 1) + "v" + (QueueSettings.queueIndex + 1));
        }

        // Server batchmode
        //if(batchMode) {
        LogManager.General.Log("Batchmode is being used: Destroy the camera and disable renderers");

        // Destroy the camera
        Destroy(Camera.main);

        // Disable renderers in batchmode
        DisableRenderers(creatorPrefab);

        // No statistics GUI
#if UNITY_EDITOR
        GetComponent <uLinkStatisticsGUI>().enabled = true;
#endif

        // No audio
        AudioListener.pause = true;

        // Disable all game modes just to be safe
        var gameModes = GetComponents <GameMode>();
        foreach (var mode in gameModes)
        {
            mode.enabled = false;
        }

        // Pick correct game mode
        int maxPlayerCount = 0;
        switch (GameManager.serverType)
        {
        case ServerType.Arena:
            gameMode = GetComponent <ArenaGameMode>();
            int maxSpectators = 10;
            maxPlayerCount = 10 + maxSpectators;
            break;

        case ServerType.Town:
            gameMode       = GetComponent <TownGameMode>();
            maxPlayerCount = 1024;
            break;

        case ServerType.FFA:
            gameMode       = GetComponent <FFAGameMode>();
            maxPlayerCount = 10;
            break;

        case ServerType.World:
            gameMode       = GetComponent <WorldGameMode>();
            maxPlayerCount = 1024;
            break;
        }

        // FFA
        if (GameManager.isFFA)
        {
            GameServerParty.partyList.Clear();
            GameServerParty.CreateParties(10, 1);
        }

        // Public key
        NetworkHelper.InitPublicLobbyKey();

        // Started by uZone?
        if (uZone.Instance.wasStartedByuZone)
        {
            // Listen to lobby events and RPCs
            Lobby.AddListener(this);

            IPAndPortCallBack connectToServices = (host, port) => {
                // Connect to lobby
                LogManager.General.Log(string.Format("Connecting to lobby as server {0}:{1}", host, port));
                Lobby.ConnectAsServer(host, port);

                // Update members in case we downloaded the info
                lobbyIP   = host;
                lobbyPort = port;

                // Set up callback
                uZone.Instance.GlobalEvents events = new uZone.Instance.GlobalEvents();
                events.onInitialized = uZone_OnInitialized;

                // This will tell uZone that the instance is ready
                // and we can let other players connect to it
                LogManager.General.Log("Initializing the uZone instance");
                uZone.Instance.Initialize(events);
            };

            // uLobby and uZone
#if UNITY_STANDALONE_WIN
            lobbyIP   = "127.0.0.1";
            lobbyPort = 1310;

            connectToServices(lobbyIP, lobbyPort);
#else
            if (string.IsNullOrEmpty(lobbyIP))
            {
                StartCoroutine(NetworkHelper.DownloadIPAndPort("https://battleofmages.com/scripts/login-server-ip.php", connectToServices));
            }
            else
            {
                connectToServices(lobbyIP, lobbyPort);
            }
#endif
        }

        // Load map
        StartCoroutine(MapManager.LoadMapAsync(
                           mapName,

                           // Map is loaded asynchronously...
                           // When it's finished, we use the callback:
                           () => {
            // Register codecs for serialization
            GameDB.InitCodecs();

            // Server port
            if (!isTestServer)
            {
                try {
                    serverPort = uZone.Instance.port;
                    LogManager.General.Log("Using port assigned from uZone: " + serverPort);
                } catch {
                    LogManager.General.Log("Failed to retrieve port info from uZone! Using port " + serverPort);
                }
            }
            else
            {
                LogManager.General.Log("Using test server port: " + serverPort);
            }

            // Init server
            LogManager.General.Log("Initializing the server on port " + serverPort);
            uLink.Network.InitializeServer(maxPlayerCount, serverPort);

            // Encryption
            LogManager.General.Log("Initializing security");
            uLink.Network.InitializeSecurity(true);

#if !UNITY_EDITOR
            // Clean up
            DestroyServerAssets();
#endif
            // Send ready message if we didn't do it yet
            SendReadyMessage();
        }
                           ));
    }
예제 #12
0
 // OnEnable
 protected virtual void OnEnable()
 {
     lastActivity = uLink.Network.time;
     server       = GameObject.Find("Server").GetComponent <ServerInit>();
 }
예제 #13
0
        public void ServerInitConstructorTest()
        {
            ServerInit target = new ServerInit();

            Assert.Inconclusive("TODO: 实现用来验证目标的代码");
        }
예제 #14
0
 public void FiniTest()
 {
     ServerInit.Fini();
     Assert.Inconclusive("无法验证不返回值的方法。");
 }
예제 #15
0
    // Awake
    void Awake()
    {
        // TODO: Checks...
        instance = this;

        // This will be reset later if -batchmode was specified
        #if UNITY_STANDALONE_WIN
        isTestServer = true;
        #else
        isTestServer = false;
        #endif

        // Default values
        serverPort = defaultServerPort;
        partyCount = 1;

        // -party0 account1 -party1 account2
        // -batchmode -port7100
        // taskkill /IM
        LogManager.General.Log("Parsing command line arguments");
        string[] args = System.Environment.GetCommandLineArgs();
        int partyId = GameServerParty.Undefined;

        foreach(string arg in args) {
            LogManager.General.Log("Command line argument: '" + arg + "'");

            // Overwrite port
            if(arg.StartsWith("-port") && arg.Length > 5) {
                serverPort = int.Parse(arg.Substring(5));
            // Batchmode
            } else if(arg == "-batchmode") {
                batchMode = true;
                isTestServer = false;
            // Party count
            } else if(arg.StartsWith("-partycount") && arg.Length > 6) {
                partyCount = int.Parse(arg.Substring("-partycount".Length));

                LogManager.General.Log(string.Format("Creating parties: {0}", partyCount));
                GameServerParty.partyList.Clear();
                GameServerParty.CreateParties(partyCount);
            // Teams
            } else if(arg.StartsWith("-party") && arg.Length > 6) {
                partyId = int.Parse(arg.Substring("-party".Length));
                restrictedAccounts = true;
            // Map
            } else if(arg.StartsWith("-map") && arg.Length > 4) {
                mapName = arg.Substring("-map".Length);
            // Server type
            } else if(arg.StartsWith("-type") && arg.Length > 5) {
                string serverTypeString = arg.Substring("-type".Length);
                switch(serverTypeString) {
                    case "Arena":
                        GameManager.serverType = ServerType.Arena;
                        break;

                    case "Town":
                        GameManager.serverType = ServerType.Town;
                        break;

                    case "FFA":
                        GameManager.serverType = ServerType.FFA;
                        break;

                    case "World":
                        GameManager.serverType = ServerType.World;
                        break;
                }
            // Account ID
            } else {
                if(partyId >= 0 && partyId < GameServerParty.partyList.Count) {
                    var currentParty = GameServerParty.partyList[partyId];
                    accountToParty[arg] = currentParty;
                    currentParty.expectedMemberCount += 1;
                }
            }
        }

        // For testing
        if(isTestServer)
            GameManager.serverType = testServerType;

        // Create at least 1 party if no party count has been specified
        if(GameServerParty.partyList.Count != partyCount) {
            switch(GameManager.serverType) {
                case ServerType.Arena:
                    partyCount = 2;
                    break;

                case ServerType.FFA:
                    partyCount = 10;
                    break;
            }

            LogManager.General.Log(string.Format("Creating parties: {0}", partyCount));
            GameServerParty.partyList.Clear();
            GameServerParty.CreateParties(partyCount);
        }

        // Server type
        LogManager.General.Log("Server type: " + GameManager.serverType);
        MapManager.InitPhysics(GameManager.serverType);

        if(restrictedAccounts) {
            LogManager.General.Log("Server is restricted to the following accounts: " + accountToParty.Keys);
        }

        if(GameManager.isArena) {
            QueueSettings.queueIndex = accountToParty.Count / 2 - 1;
            LogManager.General.Log("Queue type is: " + (QueueSettings.queueIndex + 1) + "v" + (QueueSettings.queueIndex + 1));
        } else if(GameManager.isFFA) {
            QueueSettings.queueIndex = 0;
            LogManager.General.Log("Queue type is: " + (QueueSettings.queueIndex + 1) + "v" + (QueueSettings.queueIndex + 1));
        }

        // Server batchmode
        //if(batchMode) {
        LogManager.General.Log("Batchmode is being used: Destroy the camera and disable renderers");

        // Destroy the camera
        Destroy(Camera.main);

        // Disable renderers in batchmode
        DisableRenderers(creatorPrefab);

        // No statistics GUI
        #if UNITY_EDITOR
        GetComponent<uLinkStatisticsGUI>().enabled = true;
        #endif

        // No audio
        AudioListener.pause = true;

        // Disable all game modes just to be safe
        var gameModes = GetComponents<GameMode>();
        foreach(var mode in gameModes) {
            mode.enabled = false;
        }

        // Pick correct game mode
        int maxPlayerCount = 0;
        switch(GameManager.serverType) {
            case ServerType.Arena:
                gameMode = GetComponent<ArenaGameMode>();
                int maxSpectators = 10;
                maxPlayerCount = 10 + maxSpectators;
                break;

            case ServerType.Town:
                gameMode = GetComponent<TownGameMode>();
                maxPlayerCount = 1024;
                break;

            case ServerType.FFA:
                gameMode = GetComponent<FFAGameMode>();
                maxPlayerCount = 10;
                break;

            case ServerType.World:
                gameMode = GetComponent<WorldGameMode>();
                maxPlayerCount = 1024;
                break;
        }

        // FFA
        if(GameManager.isFFA) {
            GameServerParty.partyList.Clear();
            GameServerParty.CreateParties(10, 1);
        }

        // Load map
        StartCoroutine(MapManager.LoadMapAsync(
            mapName,

            // Map is loaded asynchronously...
            // When it's finished, we use the callback:
            () => {
                // Register codecs for serialization
                GameDB.InitCodecs();

                // Init uZone
                if(uZone.Instance.wasStartedByuZone) {
                    uZone.Instance.GlobalEvents events = new uZone.Instance.GlobalEvents();
                    events.onInitialized = uZone_OnInitialized;

                    // This will tell uZone that the instance is ready
                    // and we can let other players connect to it
                    LogManager.General.Log("Initializing the uZone instance");
                    uZone.Instance.Initialize(events);
                }

                // Server port
                if(!isTestServer) {
                    try {
                        serverPort = uZone.Instance.port;
                        LogManager.General.Log("Using port assigned from uZone: " + serverPort);
                    } catch {
                        LogManager.General.Log("Failed to retrieve port info from uZone! Using port " + serverPort);
                    }
                } else {
                    LogManager.General.Log("Using test server port: " + serverPort);
                }

                // Init server
                LogManager.General.Log("Initializing the server on port " + serverPort);
                uLink.Network.InitializeServer(maxPlayerCount, serverPort);

                // Encryption
                LogManager.General.Log("Initializing security");
                uLink.Network.InitializeSecurity(true);

        #if !UNITY_EDITOR
                // Clean up
                DestroyServerAssets();
        #endif
            }
        ));
    }
예제 #16
0
 public void InitDefaultTest()
 {
     ServerInit.InitDefault();
     Assert.Inconclusive("无法验证不返回值的方法。");
 }
예제 #17
0
 public void ServerInitConstructorTest()
 {
     ServerInit target = new ServerInit();
     Assert.Inconclusive( "TODO: 实现用来验证目标的代码" );
 }