2020-11-30 08:12:07 +00:00
..
2020-11-30 08:12:07 +00:00
2020-11-30 08:12:07 +00:00
2020-11-30 08:12:07 +00:00
2020-11-30 08:12:07 +00:00
2020-11-30 08:12:07 +00:00
2020-11-30 08:12:07 +00:00
2020-11-30 08:12:07 +00:00
2020-11-30 08:12:07 +00:00
2020-11-30 08:12:07 +00:00
2020-11-30 08:12:07 +00:00
2020-11-30 08:12:07 +00:00

Mirror Cloud Services

Mirror List Server

Example has an API key which can be used as a demo.

To get an API key to use within your game you can subscribe on the Mirror Networking Website

Key features

  • The Cloud Service works via https so it is secure and can be used from any platform.
  • It runs on Google Cloud so there is no worry about server downtime.
  • It scales really well. Default quota is 1000 API requests per minute. If you have high demands, contact us and we can increase that limit.

List Server Examples

An example for this can be found in Mirror/Examples/Cloud/

Note: you cannot connect to your own public IP address, you will need at least one other person to test this

How to use

Add ApiConnector component to an object in your game. It is probably best to put this on the same object as your NetworkManager. Once it has been added set the ApiAddress and ApiKey fields.

To use ApiConnector either directly reference it in an inspector field or get it when your script awakes

ApiConnector connector;

void Awake()
{
    connector = FindObjectOfType<ApiConnector>();
}

The Api calls are grouped into objects. connector.ListServer.ServerApi has the Server Api calls like AddServer. connector.ListServer.ClientApi has the Client Api calls like GetServerList.

Server Api Example

Example of how to add server

void AddServer(int playerCount)
{
    Transport transport = Transport.activeTransport;

    Uri uri = transport.ServerUri();
    int port = uri.Port;
    string protocol = uri.Scheme;

    connector.ListServer.ServerApi.AddServer(new ServerJson
    {
        displayName = "Fun game!!!",
        protocol = protocol,
        port = port,
        maxPlayerCount = NetworkManager.singleton.maxConnections,
        playerCount = playerCount
    });
}

Client Api Example

Example of how to list servers

ApiConnector connector;

void Awake()
{
    connector = FindObjectOfType<ApiConnector>();
    // add listener to event that will update UI when Server list is refreshed
    connector.ListServer.ClientApi.onServerListUpdated += onServerListUpdated;

    // add listen to button so that player can refresh server list
    refreshButton.onClick.AddListener(RefreshButtonHandler);
}

public void RefreshButtonHandler()
{
    connector.ListServer.ClientApi.GetServerList();
}

void onServerListUpdated() 
{
    // Update UI here
}

Debug

If something doesn't seem to be working then here are some tips to help solve the problem

Check logs

Enable showDebugMessages on your NetworkManager or use the log level window to enable logging for the cloud scripts

Below are some example logs to look for to check things are working.

Add Server

The add request is sent to add a server to the list server

Request: POST servers {"protocol":"tcp4","port":7777,"playerCount":0,"maxPlayerCount":4,"displayName":"Tanks Game 521","address":"","customAddress":"","customData":[]}
Response: POST 200 /servers {"id":"BI6bQQ2TbNiqhdp1D7UB"}

Update Server

The object sent in update request maybe be empty, this is sent to keep the server record alive so it shows up.

The update request can also be used to change info. For example the player count when someone joins or leaves

Request: PATCH servers/BI6bQQ2TbNiqhdp1D7UB {}
Response: PATCH 204 /servers/BI6bQQ2TbNiqhdp1D7UB

Remove Server

The remove request is sent to remove a server from the list server. This is automatically called when the ApiConnection is destroyed.

Request: DELETE servers/BI6bQQ2TbNiqhdp1D7UB
Response: DELETE 204 /servers/BI6bQQ2TbNiqhdp1D7UB 

Get Servers

The get request is sent in order to get the list of servers.

The example below shows an array of 2 servers, one with name Tanks Game 521 and the other with name Tanks Game 212

Request: GET servers
Response: GET 200 /servers {"servers":[{"address":"tcp4://xx.xx.xx.xx:7777","displayName":"Tanks Game 521","port":7777,"protocol":"tcp4","playerCount":0,"maxPlayerCount":4,"customAddress":"","customData":[]},{"address":"tcp4://xx.xx.xx.xx:7777","displayName":"Tanks Game 212","port":7777,"protocol":"tcp4","playerCount":0,"maxPlayerCount":4,"customData":[]}]}

xx.xx.xx.xx will be the IP address for the server

Use the QuickListServerDebug

The QuickListServerDebug script uses OnGUI to show the list of servers. This script can be used to check the server list without using Canvas UI.