README.md

Документация

Описание

Пакет для создания и поиска служб с помощью 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}");
    }
}


Команда

Конвейеры
0 успешных
0 с ошибкой