Реализация SSDP (Simple Service Discovery Protocol) для Squeak/Pharo Smalltalk. Чтобы загрузить:
Metacello new
baseline: ' SSDP ' ;
repository: ' github://rydier/SSDP/repository ' ;
load.
Хотя SSDP является базовым протоколом обнаружения, используемым uPnP, он никогда не был полностью стандартизирован. Эта реализация была основана на http://quimby.gnus.org/internet-drafts/draft-cai-ssdp-v1-02.txt за исключением функции прокси, которая была удалена в более поздней черновой версии. Так что, по сути, реализована последняя версия проекта. Более поздняя версия содержит гораздо расширенные разделы, посвященные обоснованию конструкции, что делает ее гораздо более удобной для чтения для тех, кто хочет узнать, что такое протокол обнаружения и какие компромиссы с ним связаны, но с гораздо меньшей плотностью информации с точки зрения того, кто его реализует. протокол.
SSDP-сервер:
| server |
server := SSDPServer v4SiteLocal.
server
offerServiceType: ' ssdp:testService '
atLocation: ' http:/test.local/ ' .
server shutDown.
Клиент SSDP:
| client |
client := SSDPClient v4SiteLocal.
client filter: ' ssdp:all '
whenAvailable: [ :resource |
resource printOn: Transcript .
' is available ' printOn: Transcript .
Transcript nextPut: Character cr. ]
whenUnavailable: [ :resource |
resource printOn: Transcript .
' is becoming unavailable ' printOn: Transcript .
Transcript nextPut: Character cr. ].
Более подробную документацию можно найти в комментариях к классу.
Если вы прочитаете более поздний черновик и обнаружите, что что-то не соответствует, откройте проблему или отправьте запрос на включение.
Если вы реализуете лучший способ обнаружения доступных локальных интерфейсов (что является худшей частью кода) для запуска прослушивателей SSDP, я буду особенно признателен за уведомление!
Миграция с http://smalltalkhub.com/#!/~henriksp/SSDP с использованием https://github.com/peteruhnak/git-migration.