Представляет записи служб, которые обнаруживаются или публикуются модулем hs.bonjour.
Этот модуль позволяет вам изучить подробности обнаруженных служб, включая IP-адреса и текстовые записи, а также опубликовать свои собственные объявления многоадресной рассылки DNS для служб на вашем компьютере. Это может быть полезно для рекламы сетевых служб, предоставляемых другими модулями Hammerspoon или другими приложениями на вашем компьютере, которые еще не публикуют свои собственные объявления.
Этот модуль не позволит вам публиковать записи прокси для других хостов в вашей локальной сети. Рассматриваются дополнительные подмодули, которые могут решить эту ограничение, а также предоставить дополнительные функции, доступные с библиотекой dns-sd от Apple, но в настоящее время нет оценочного срока.
Обзор API
Константы - полезные значения, которые нельзя изменить
Список распространенных типов служб, которые могут использоваться для обнаружения с помощью этого модуля.
Примечания
Этот список был сгенерирован из вывода avahi-browse -b и avahi-browse -bk из пакета avahi-daemon/stable,now 0.7-4+b1 armhf в Raspbian GNU/Linux 10.
Этот список никоим образом не является полным и предоставляется только для примера. Дополнительные типы служб можно довольно легко обнаружить с помощью Google или других поисковых систем.
Вы можете просмотреть содержимое этой таблицы в консоли Hammerspoon, введя require("hs.bonjour").serviceTypes в поле ввода.
Возвращает новый serviceObject для рекламы службы, предоставляемой вашим компьютером.
Параметры
name - имя рекламируемой службы. Оно не обязательно должно совпадать с именем хоста машины. Однако, если вы укажете пустую строку, будет использовано имя хоста компьютера.
service - строка, определяющая рекламируемую службу. Эта строка должна быть указана в формате '_service._protocol.', где _protocol — это '_tcp' или '_udp'. Примеры распространённых типов служб можно найти в hs.bonjour.serviceTypes.
port - целое число, определяющее tcp или udp порт, на котором предоставляется служба
domain - необязательная строка, определяющая домен, в котором вы хотите рекламировать эту службу.
Возвращает
созданный объект службы, или nil, если произошла ошибка
Примечания
Если указанное имя не уникально в сети для указанного типа службы, к концу имени будет добавлено число. Это поведение не может быть переопределено и может быть обнаружено только путем проверки hs.bonjour.service:name после вызова hs.bonjour.service:publish для того, чтобы увидеть, было ли имя изменено с того, что вы изначально присвоили.
Служба не будет рекламироваться до тех пор, пока не будет вызван hs.bonjour.service:publish для serviceObject, который был возвращён.
Если вы не укажете параметр domain, будет использован ваш домен по умолчанию, обычно "local".
Возвращает новый serviceObject для удаленной машины (т.е. не компьютера пользователя) в вашей сети, предлагающей указанную службу.
Параметры
name - строка, определяющая имя рекламируемой службы в сети для поиска. Часто, но не всегда, это будет имя хоста машины, предоставляющей желаемую службу.
service - строка, определяющая тип службы. Эта строка должна быть указана в формате '_service._protocol.', где _protocol — это '_tcp' или '_udp'. Примеры распространённых типов служб можно найти в hs.bonjour.serviceTypes.
domain - необязательная строка, определяющая домен, к которому относится служба.
Возвращает
созданный объект службы, или nil, если произошла ошибка
Примечания
В общем случае вам не нужно использовать этот конструктор, так как они будут создаваться автоматически для вас в обратных вызовах к hs.bonjour:findServices.
Однако этот метод может быть использован, когда вы уже знаете, что определенная служба должна существовать в сети, и хотите разрешить её текущие IP-адреса или текстовые записи.
Разрешение IP-адреса, имени хоста, порта и текущих текстовых записей службы не произойдёт до тех пор, пока не будет вызван hs.bonjour.service:publish для возвращённого serviceObject.
API macOS указывает, что пустая строка домена (т.е. указание параметра domain как "" или его полное отсутствие) должно привести к использованию домена по умолчанию для компьютера; на мой опыт, это приводит к ошибке при попытке разрешить IP-адреса serviceObject, если я не укажу "local" явно. В целом, это не должно быть проблемой, если вы ограничиваете использование remote serviceObjects объектами, возвращаемыми hs.bonjour:findServices, так как домен обнаружения будет включён в объект автоматически. Если вы попытаетесь создать эти объекты самостоятельно, имейте в виду, что попытка использовать "домен по умолчанию" вместо явного указания его, вероятно, не будет работать так, как ожидается.
Получить или установить, следует ли публиковать или разрешать доступ к службе, представленной объектом службы, по протоколам peer-to-peer Bluetooth и Wi-Fi, если они доступны.
Parameters
value - необязательный булев параметр, по умолчанию false, указывающий, следует ли проводить рекламу и разрешение доступа по протоколам peer-to-peer Bluetooth и Wi-Fi, если они доступны.
Returns
если value предоставлен, возвращает serviceObject; в противном случае возвращает текущее значение.
Notes
если вы изменяете значение этого свойства, необходимо вызвать этот метод перед вызовом [hs.bonjour.service:publish](#publish] или hs.bonjour.service:resolve, или после остановки публикации или разрешения с помощью hs.bonjour.service:stop.
для удаленных serviceObjects этот флаг определяет, следует ли выполнять разрешение и мониторинг текстовых записей по peer-to-peer сетевым интерфейсам.
для локальных (опубликованных) serviceObjects этот флаг определяет, следует ли проводить рекламу по peer-to-peer сетевым интерфейсам.
Мониторить службу на предмет изменений связанных текстовых записей.
Parameters
callback - необязательная функция обратного вызова, которая должна принимать 3 аргумента:
данные пользователя serviceObject
строка "txtRecord"
таблица, содержащая пары ключ-значение, определяющие новые текстовые записи для службы
Returns
объект serviceObject
Notes
При активном мониторинге hs.bonjour.service:txtRecord вернёт самые последние наблюдаемые текстовые записи. Если это единственный метод, которым вы проверяете текстовые записи, но хотите убедиться, что у вас есть самые последние значения, вы должны вызвать этот метод без указания обратного вызова.
Вы можете отслеживать изменения текстовых записей для локальных serviceObjects, созданных с помощью hs.bonjour.service.new и публикуемых вами. Это может быть использовано для вызова обратного вызова, когда одна часть вашего кода вносит изменения в текстовые записи, которые вы публикуете, и вам нужно, чтобы другая часть кода знала об этом изменении.
для локальных (опубликованных) serviceObjects этот метод всегда возвращает число, указанное при создании serviceObject с конструктором hs.bonjour.service.new.
allowRename - необязательный булев параметр, по умолчанию true, указывающий, следует ли автоматически переименовать службу, если сочетание имени и типа уже публикуется в домене службы. Если переименование разрешено и конфликт возникает, имя службы будет дополнено -#, где # - это увеличивающееся целое число, начинающееся с 2.
callback - необязательная функция обратного вызова, которая должна принимать 2 или 3 аргумента и не возвращать ничего. Аргументы функции обратного вызова будут одним из следующих наборов:
при успешной публикации: * данные пользователя serviceObject * строка "published"
если при публикации возникает ошибка: * данные пользователя serviceObject * строка "error" * строка, указывающая на конкретную ошибку
Returns
объект serviceObject
Notes
Этот метод должен вызываться только для serviceObjects, созданных с помощью hs.bonjour.service.new.
Разрешить доступ к адресу и данным обнаруженной службы.
Parameters
timeout - необязательное число, по умолчанию 0.0, указывающее максимальное количество секунд для попытки разрешить данные для этой службы. Значение 0.0 означает, что разрешение не должно ограничиться по времени и должно продолжаться неограниченно.
callback - необязательная функция обратного вызова, которая должна принимать 2 или 3 аргумента и не возвращать ничего.
при успешном разрешении: * данные пользователя serviceObject * строка "resolved"
если при разрешении возникает ошибка: * данные пользователя serviceObject * строка "error" * строка, указывающая на конкретную ошибку
если timeout указан и имеет любое число отличное от 0.0, следующее будет отправлено в обратный вызов, когда таймаут достигнут: * данные пользователя serviceObject * строка "stop"
Returns
объект serviceObject
Notes
Этот метод следует вызывать только для serviceObjects, возвращенных объектом браузера hs.bonjour или созданных с помощью hs.bonjour.service.remote.
Для снижения использования системных ресурсов, как правило, следует указывать значение таймаута или убедиться, что вы вызываете hs.bonjour.service:stop после того, как вы подтвердили, что получили необходимые данные.
Для снижения использования системных ресурсов, убедитесь, что используете этот метод при разрешении доступа к удаленной службе, если вы не указали таймаут для hs.bonjour.service:resolve или указали таймаут 0.0, после того, как вы подтвердили, что у вас есть необходимые данные.
Получение или установка текстовых записей, связанных с serviceObject.
Параметры
records - необязательная таблица, определяющая текстовую запись для рекламируемой службы в виде набора пар ключ-значение. Все ключи и значения должны быть указаны как строки.
Возвращаемое значение
если в метод переданы аргументы, возвращает serviceObject или false, если возникла проблема при установке текстовой записи для этой службы. Если аргументы не переданы, возвращает текущую таблицу текстовых записей.
установка текстовой записи для службы заменяет существующие записи для serviceObject. Если serviceObject удалённый, это изменение видно только на локальной машине. Для службы, которую вы рекламируете, это изменение будет рекламироваться другим машинам.
Текстовые записи обычно используются для предоставления дополнительной информации о службе, а их назначение и значение зависят от службы; например, при рекламе _http._tcp. службы вы можете указать определённый путь на сервере, указав таблицу текстовых записей, содержащих ключ "path".