Документация
Описание
Пакет для создания и поиска служб с помощью mDNS в Unity.
Разработан на основе этого пакета.
Работа с пакетом
1) Создание и уничтожение объекта класса mDNS
private void Awake()
{
mDNS = new MDNS();
}
private void OnApplicationQuit()
{
mDNS.Dispose();
}
2) Поиск службы
За поиск службы отвечает метод:
public async Task<MDNSResponse> DiscoverService(string serviceName, int millisecondsDelay = 2000)
или
public async Task<MDNSResponse> DiscoverServiceLoop(string serviceName, int millisecondsDelay = 2000)
, где servicName - имя службы, например _silasveta-server._tcp.local
(Домен .local
нужно дописывать руками). Также есть событие:
public event Action<MDNSResponse> ServiceDiscovered
, которое вызывается при нахождении службы.
Методы DiscoverService
и DiscoverServiceLoop
различаются тем, что второй ищет службу циклично( пока не найдёт или программа не завершит своё выполнение).
3) Создание службы
За создание службы отвечает метод:
public bool AdvertiseService(string instanceName, string serviceName, int port = 8000, string[] TXTRecords = null)
, где:
- instanceName - имя Instance, например
dyachkov
- serviceName - имя службы, например
_anton-test._tcp
- port - порт, по умолчанию
8000
- TXTRecords - текстовые записи, по умолчанию
null
Также есть событие:
public event Action<string> ServiceAdvertised
, которое вызывается при создании службы.
4) Удаление службы( все службы созданные во врмя playmode
будут удалены автоматически! )
За удаление службы отвечает метод:
public bool UnadvertiseService(string instanceName, string serviceName, int port = 8000)
, где:
- instanceName - имя Instance, например
dyachkov
- serviceName - имя службы, например
_anton-test._tcp
- port - порт, по умолчанию
8000
Также есть событие:
public event Action<string> ServiceUnadvertised
, которое вызывается при удалении службы.
5) Структура данных MDNSResponse
- IP - IP адрес устройства, на котором была найдена служба
- HostName - имя хоста (имя компьютера)
- Instance - имя Instance
- Port - порт, на котором запущена служба
- Service - полное имя сервиса
- Text - массив дополнительной информации из TXT ответа
Пример кода
using UnityEngine;
using SilaSveta;
public class MDNSConnector : MonoBehaviour
{
private static string instanceName = "dyachkov.";
private static string serviceName = "_anton-test._tcp";
private int port = 8000;
private string[] text = new string[2] { "first record", "second record"}
private string serviceFullName = instanceName + serviceName + ".local";
private MDNS mDNS;
private void Awake()
{
mDNS = new MDNS();
}
private void OnEnable()
{
mDNS.ServiceDiscovered += OnServiceDiscovered;
mDNS.ServiceAdvertised += OnServiceAdverticed;
mDNS.ServiceUnadvertised += OnServiceUnadverticed;
}
private void Start()
{
mDNS.AdvertiseService(instanceName, serviceName, port, text);
mDNS.DiscoverService(serviceFullName);
}
private void OnDisable()
{
mDNS.ServiceDiscovered -= OnServiceDiscovered;
mDNS.ServiceAdvertised -= OnServiceAdverticed;
mDNS.ServiceUnadvertised -= OnServiceUnadverticed;
}
private void OnApplicationQuit()
{
mDNS.Dispose();
}
private void OnServiceDiscovered(MDNSResponse response)
{
Debug.Log($"Service discovered: {response.Service}, with ip: {response.IP}:{response.Port} from {response.HostName}");
}
private void OnServiceAdverticed(string serviceName)
{
Debug.Log($"Service created: {serviceName}");
}
private void OnServiceUnadverticed(string serviceName)
{
Debug.Log($"Service deleted: {serviceName}");
}
}
Команда
- Разработчик Дьячков Антон