Как разрешить адреса и информацию о портах из перечисления NWEndpoint.service (если возможно) - PullRequest
0 голосов
/ 07 марта 2020

В настоящее время я использую NetServiceBrowser, чтобы найти службы Bonjour и разрешить соответствующие адреса и порт.

Глядя на усложнение своего кода, я наткнулся на NWBrowser, который, кажется, обеспечивает очень простой интерфейс чтобы разобраться с открытием Bonjour.

Однако browseResultsChangedHandler отправляет обратно результаты и изменения, которые содержат конечную точку перечисления case service. Я пытаюсь получить информацию об адресе и порте из результатов, но, похоже, NWEndpoint должен быть типа enum .hostPort.

В идеале я бы использовал конечную точку для подключения к серверам, используя NWConnection однако я использую другую библиотеку, которая не обрабатывает NWEndpoint напрямую.

Существуют ли (простые) способы получения адресов и информации о портах из результата NWEndpoint.service?

import Foundation
import Network

let browser = NWBrowser(for: .bonjour(type: "_http._tcp", domain: ""), using: NWParameters())

browser.browseResultsChangedHandler = { (results, changes) in
    print("Results:")

    for result in results
    {
        if case .service(let service) = result.endpoint
        {
            debugPrint(service)
        }
        else
        {
            assert(false, "This nevers gets executed")
        }
    }

    print("Changes:")

    for change in changes
    {
        if case .added(let added) = change
        {
            if case .service(let service) = added.endpoint
            {
                debugPrint(service)
            }
            else
            {
                assert(false, "This nevers gets executed")
            }
        }
    }
}

browser.start(queue: DispatchQueue.main)

sleep(3)
...