Example #1
0
    protected void OnServerRegisterGameServer(NetworkMessage netMsg)
    {
        if (writeLog)
        {
            Debug.Log("[" + name + "] OnServerRegisterGameServer");
        }
        var msg      = netMsg.ReadMessage <MasterServerMessages.RegisterGameServerMessage>();
        var response = new MasterServerMessages.RegisteredGameServerMessage();
        var gameType = string.IsNullOrEmpty(msg.gameType) ? DefaultGameType : msg.gameType;
        var rooms    = EnsureRoomsForGameType(gameType);
        var roomId   = System.Guid.NewGuid().ToString();
        var newRoom  = new MasterServerRoom();

        newRoom.roomId         = roomId;
        newRoom.gameType       = gameType;
        newRoom.title          = msg.title;
        newRoom.password       = msg.password;
        newRoom.scene          = msg.scene;
        newRoom.networkAddress = netMsg.conn.address;
        newRoom.networkPort    = msg.networkPort;
        newRoom.maxConnections = msg.maxConnections;
        newRoom.connectionId   = netMsg.conn.connectionId;

        var registeredRoom = RegisteredMasterServerRoom.Empty;

        if (!msg.registerKey.Equals(registerKey))
        {
            response.resultCode = (short)MasterServerMessages.ResultCodes.RegistrationFailedInvalidKey;
        }
        else if (!rooms.AddRoom(roomId, newRoom, out registeredRoom))
        {
            response.resultCode = (short)MasterServerMessages.ResultCodes.RegistrationFailedCannotCreateRoom;
        }
        else
        {
            response.resultCode = (short)MasterServerMessages.ResultCodes.RegistrationSucceeded;

            NetworkConnection spawnerConnection;
            if (!string.IsNullOrEmpty(msg.spawnToken) && spawners.TryGetValue(msg.spawnToken, out spawnerConnection))
            {
                spawners.Remove(msg.spawnToken);
                var spawnResponse = new MasterServerMessages.SpawnedGameServerMessage();
                spawnResponse.resultCode = (short)MasterServerMessages.ResultCodes.SpawnSucceeded;
                spawnResponse.room       = newRoom;
                spawnerConnection.Send(MasterServerMessages.SpawnedGameServerId, spawnResponse);
            }
        }

        response.registeredRoom = registeredRoom;

        netMsg.conn.Send(MasterServerMessages.RegisteredGameServerId, response);
    }
Example #2
0
    protected void OnServerSpawnGameServer(NetworkMessage netMsg)
    {
        if (writeLog)
        {
            Debug.Log("[" + name + "] OnServerSpawnGameServer");
        }
        var msg = netMsg.ReadMessage <MasterServerMessages.SpawnGameServerMessage>();

        if (!msg.registerKey.Equals(registerKey))
        {
            var spawnResponse = new MasterServerMessages.SpawnedGameServerMessage();
            spawnResponse.resultCode = (short)MasterServerMessages.ResultCodes.RegistrationFailedInvalidKey;
            spawnResponse.room       = MasterServerRoom.Empty;
            netMsg.conn.Send(MasterServerMessages.SpawnedGameServerId, spawnResponse);
            return;
        }

        var spawnToken = System.Guid.NewGuid().ToString();
        var arguments  = "";

        arguments += " -startGameServer";
        arguments += " -registerKey " + registerKey;
        arguments += " -spawnToken " + spawnToken;
        arguments += " -gameServerGameType " + msg.gameType;
        arguments += " -gameServerTitle " + msg.title;
        arguments += " -gameServerPassword " + msg.title;
        arguments += " -gameServerScene " + msg.scene;
        arguments += " -gameServerNetworkPort " + msg.networkPort;
        arguments += " -gameServerMaxConnections " + msg.maxConnections;
        if (spawningAsBatch)
        {
            arguments += " -batchmode";
        }

        var spawnPath = Application.isEditor ? spawningBuildPathForEditor : spawningBuildPath;
        var process   = new System.Diagnostics.Process();

        process.StartInfo.FileName  = spawnPath;
        process.StartInfo.Arguments = arguments;
        process.Start();

        spawners.Add(spawnToken, netMsg.conn);
    }