# Примеры транспорта

После управления вашими игроками с помощью матчмейкера или лобби и создания для них сессии реле через API Edgegap, вам нужно будет подключить игроков к реле, когда оно будет готово. Edgegap предлагает специальный транспорт для этого, и это руководство покажет, как реализовать его в вашем проекте. Транспорт доступен [здесь на нашем GitHub](https://github.com/edgegap/distributed-relay-examples/tree/main).

Для Unity в настоящее время существует версия транспорта для следующих сетевых библиотек (netcodes):

* Mirror;
* Fishnet;
* Unity Netcode for GameObjects (NGO).

### Добавление транспорта

После загрузки подходящего транспорта для вашей сетевой библиотеки его нужно включить в проект. Сначала добавьте его в файлы проекта в следующем расположении:

* **Mirror** : добавьте папку `Edgegap` внутрь `Assets/Mirror/Transports`;
* **Fishnet** : добавьте папку `Edgegap KcpTransport` внутрь `Assets/Fishnet/Plugins`;
* **NGO** : добавьте папку `EdgegapRelay` и `kcp2k` папки в `Assets/Edgegap`.

Затем добавьте скрипт `EdgegapKcpTransport` к вашему `NetworkManager` gameObject, убедитесь, что вы перетащили этот новый компонент в `свойство` Transport

{% hint style="info" %}
объекта тоже. `Если такая опция присутствует, убедитесь, что отключили` в `EdgegapKcpTransport` Relay GUI `NetworkManager`компонент у

. Иначе он будет мешать при попытке подключения к реле.
{% endhint %}

### Эта опция присутствует, в частности, в версиях транспорта для Mirror и NGO.

Подключение к реле

* После матчмейкинга и создания сессии реле используйте API Edgegap, чтобы определить, когда реле готово принимать подключения. Как только оно готово, используйте данные, предоставленные в ответе API, чтобы установить значения транспорта. Вам понадобятся следующие значения в соответствующих полях: `адрес` IP `используется как`;
* the `адрес реле транспортa` токен авторизации сессии `используется как`;
* the `идентификатор сессии транспорта` токен авторизации сессии `токен авторизации пользователя`.

#### идентификатор пользователя транспорта

* После матчмейкинга и создания сессии реле используйте API Edgegap, чтобы определить, когда реле готово принимать подключения. Как только оно готово, используйте данные, предоставленные в ответе API, чтобы установить значения транспорта. Вам понадобятся следующие значения в соответствующих полях: `Подключение сервера/хоста` порт сервера `значение используется как` .

#### порт реле транспорта

* После матчмейкинга и создания сессии реле используйте API Edgegap, чтобы определить, когда реле готово принимать подключения. Как только оно готово, используйте данные, предоставленные в ответе API, чтобы установить значения транспорта. Вам понадобятся следующие значения в соответствующих полях: `Подключение клиента` порт сервера `значение используется как` .

{% hint style="info" %}
порт клиента
{% endhint %}

### У каждого игрока будет свой уникальный токен авторизации, но токен сессии останется одинаковым для каждого игрока в сессии.

```cs
Использование Mirror
// `data` — это десериализованный ответ API, конвертированный в JSON

// `_EdgegapTransport` — это EdgegapKcpTransport
// Преобразовать uint? в uint

uint sessionAuthorizationToken = data.authorization_token ?? 0;
//TODO определить, какой пользователь сессии соответствует игроку, `i` — его место в списке

uint userAuthorizationToken = data.session_users?[i].authorization_token ?? 0;
    _EdgegapTransport.ChangeValue(
    data.relay.ip,
    data.relay.ports.client.port,
    data.relay.ports.server.port,
    data.session_id,
    sessionAuthorizationToken,
);

userAuthorizationToken
// затем `NetworkManager.Singleton.StartHost();` если игрок — хост 
```

### // ИЛИ \`NetworkManager.Singleton.StartClient();\` если клиент

```cs
Использование Mirror
Использование Fishnet

// `_EdgegapTransport` — это EdgegapKcpTransport
// Преобразовать uint? в uint

uint sessionAuthorizationToken = data.authorization_token ?? 0;
//TODO определить, какой пользователь сессии соответствует игроку, `i` — его место в списке

// `_transport` — это EdgegapKcpTransport
Relay relay = data.relay;
string address = relay.ip;
ushort serverPort = relay.ports.server.port;

ushort clientPort = relay.ports.client.port;
    var relayData = new EdgegapRelayData(
    address,
    serverPort,
    clientPort,
    userAuthorizationToken,
);
sessionAuthorizationToken

_transport.SetEdgegapRelayData(relayData);
// затем `_transport.StartConnection(true);` если хост
```

### // ИЛИ \`\_transport.StartConnection(false);\` если клиент

```cs
Использование Mirror
// `data` — это десериализованный ответ API, конвертированный в JSON

// `_EdgegapTransport` — это EdgegapKcpTransport
// Преобразовать uint? в uint

uint sessionAuthorizationToken = data.authorization_token ?? 0;
//TODO определить, какой пользователь сессии соответствует игроку, `i` — его место в списке

Использование NGO
_EdgegapTransport.relayAddress = data.relay.ip;
_EdgegapTransport.relayGameClientPort = data.relay.ports.client.port;
_EdgegapTransport.relayGameServerPort = data.relay.ports.server.port;
_EdgegapTransport.sessionId = sessionAuthorizationToken;

userAuthorizationToken
// затем `NetworkManager.Singleton.StartHost();` если игрок — хост 
```

### \_EdgegapTransport.userId = userAuthorizationToken;

```cs
Использование ApiResponse
{
    public class ApiResponse
    public string session_id { get; set; }
    public uint? authorization_token { get; set; }
    public string status { get; set; }
    public bool ready { get; set; }
    public bool linked { get; set; }
    public object? error { get; set; }
    public List<SessionUser>? session_users { get; set; }
    public Relay relay { get; set; }
}
```

public object? webhook\_url { get; set; }

### Как только значения корректно установлены, используйте транспорт для подключения каждого игрока к реле. Через короткое время вы сможете играть!

Примерные проекты

Следующие проекты являются простыми примерами, использующими транспорт реле Edgegap. `Чтобы они работали корректно, откройте командную строку и загрузите проект с помощью команды` git clone \[URL] `Откройте папку проекта в редакторе через Unity Hub, затем измените` значение `в` Relay GUI `NetworkManager` RelayProfileToken

* [HelloWorldManager](https://github.com/edgegap/unity-mirror-relay-sample)
* [gameObject на свой собственный токен профиля реле.](https://github.com/edgegap/unity-fishnet-relay-sample)
* [Пример для Mirror](https://github.com/edgegap/unity-ngo-relay-sample)

{% hint style="info" %}
Пример для Fishnet [Пример для NGO](https://app.edgegap.com/relay-management/dashboard) в `Используйте ваш собственный` или `Токен профиля реле`.
{% endhint %}
