Skip to content

Instantly share code, notes, and snippets.

@jessehao
Created May 23, 2019 09:06
Show Gist options
  • Save jessehao/14682325835465e5c017715092b4f758 to your computer and use it in GitHub Desktop.
Save jessehao/14682325835465e5c017715092b4f758 to your computer and use it in GitHub Desktop.
A simple example for Bonjour
//
// BonjourClient.swift
// BonjourClient
//
// Created by Jesse Hao on 2019/5/23.
// Copyright © 2019 ONES. All rights reserved.
//
import Foundation
class ServiceAgent : NSObject, NetServiceDelegate {
func netServiceDidResolveAddress(_ sender: NetService) {
if let data = sender.txtRecordData() {
let dict = NetService.dictionary(fromTXTRecord: data)
print("Resolved: \(dict)")
print(dict.mapValues { String(data: $0, encoding: .utf8) })
}
}
}
class BrowserAgent : NSObject, NetServiceBrowserDelegate {
var currentService:NetService?
let serviceAgent = ServiceAgent()
func netServiceBrowser(_ browser: NetServiceBrowser, didFindDomain domainString: String, moreComing: Bool) {
print("domain found: \(domainString)")
}
func netServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool) {
print("service found: \(service.name)")
self.currentService = service
service.delegate = self.serviceAgent
service.resolve(withTimeout: 5)
}
}
let agent = BrowserAgent()
let browser = NetServiceBrowser()
browser.delegate = agent
browser.searchForServices(ofType: "_dragon._tcp", inDomain: "local.")
browser.schedule(in: RunLoop.main, forMode: .common)
RunLoop.main.run()
//
// BonjourService.swift
// BonjourService
//
// Created by Jesse Hao on 2019/5/23.
// Copyright © 2019 Snoware. All rights reserved.
//
import Foundation
class ServiceAgent : NSObject, NetServiceDelegate {
func netServiceDidPublish(_ sender: NetService) {
print("Bonjour Service published!")
}
func netService(_ sender: NetService, didNotPublish errorDict: [String : NSNumber]) {
print("Failed to publish Bonjour Service. error: \(errorDict)")
}
}
let agent = ServiceAgent()
let runloop = RunLoop.main
let service = NetService(domain: "local.", type: "_dragon._tcp", name: "dragon", port: 2333)
service.schedule(in: runloop, forMode: .common)
service.delegate = agent
let dictData = "Hi".data(using: String.Encoding.utf8)
let data = NetService.data(fromTXTRecord: ["key":dictData!])
print("set data: \(service.setTXTRecord(data))")
service.publish()
runloop.run()
@mendaparadarshit
Copy link

How to use this code? @jessehao

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment