Prioritizes AltServer that originally installed AltStore over others

This commit is contained in:
Riley Testut
2019-09-03 23:47:47 -07:00
parent d03f963d9b
commit 0c1f469dfa
6 changed files with 90 additions and 9 deletions

View File

@@ -44,8 +44,20 @@ enum ConnectionError: LocalizedError
struct Server: Equatable
{
var identifier: String
var service: NetService
var isPreferred = false
init?(service: NetService, txtData: Data)
{
let txtDictionary = NetService.dictionary(fromTXTRecord: txtData)
guard let identifierData = txtDictionary["serverID"], let identifier = String(data: identifierData, encoding: .utf8) else { return nil }
self.identifier = identifier
self.service = service
}
func send<T: Encodable>(_ payload: T, via connection: NWConnection, prependSize: Bool = true, completionHandler: @escaping (Result<Void, Error>) -> Void)
{
do

View File

@@ -20,6 +20,8 @@ class ServerManager: NSObject
private let serviceBrowser = NetServiceBrowser()
private var services = Set<NetService>()
private override init()
{
super.init()
@@ -45,10 +47,24 @@ extension ServerManager
self.isDiscovering = false
self.discoveredServers.removeAll()
self.services.removeAll()
self.serviceBrowser.stop()
}
}
private extension ServerManager
{
func addDiscoveredServer(_ server: Server)
{
var server = server
server.isPreferred = (server.identifier == UserDefaults.standard.preferredServerID)
guard !self.discoveredServers.contains(server) else { return }
self.discoveredServers.append(server)
}
}
extension ServerManager: NetServiceBrowserDelegate
{
func netServiceBrowserWillSearch(_ browser: NetServiceBrowser)
@@ -68,19 +84,46 @@ extension ServerManager: NetServiceBrowserDelegate
func netServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool)
{
let server = Server(service: service)
guard !self.discoveredServers.contains(server) else { return }
service.delegate = self
self.discoveredServers.append(server)
if let txtData = service.txtRecordData(), let server = Server(service: service, txtData: txtData)
{
self.addDiscoveredServer(server)
}
else
{
service.resolve(withTimeout: 3)
self.services.insert(service)
}
}
func netServiceBrowser(_ browser: NetServiceBrowser, didRemove service: NetService, moreComing: Bool)
{
let server = Server(service: service)
if let index = self.discoveredServers.firstIndex(of: server)
if let index = self.discoveredServers.firstIndex(where: { $0.service == service })
{
self.discoveredServers.remove(at: index)
}
self.services.remove(service)
}
}
extension ServerManager: NetServiceDelegate
{
func netServiceDidResolveAddress(_ service: NetService)
{
guard let data = service.txtRecordData(), let server = Server(service: service, txtData: data) else { return }
self.addDiscoveredServer(server)
}
func netService(_ sender: NetService, didNotResolve errorDict: [String : NSNumber])
{
print("Error resolving net service \(sender).", errorDict)
}
func netService(_ sender: NetService, didUpdateTXTRecord data: Data)
{
let txtDict = NetService.dictionary(fromTXTRecord: data)
print("Service \(sender) updated TXT Record:", txtDict)
}
}