// // NearbyConnectionManager.swift // NearDrop // // Created by Grishka on 08.04.2023. // import Foundation import Network import UserNotifications class NearbyConnectionManager : NSObject, NetServiceDelegate, InboundNearbyConnectionDelegate, UNUserNotificationCenterDelegate{ private var tcpListener:NWListener; private let endpointID:[UInt8]=generateEndpointID() private var mdnsService:NetService? private var activeConnections:[String:InboundNearbyConnection]=[:] override init() { tcpListener=try! NWListener(using: NWParameters(tls: .none)) super.init() UNUserNotificationCenter.current().delegate=self startTCPListener() } private func startTCPListener(){ tcpListener.stateUpdateHandler={(state:NWListener.State) in if case .ready = state { self.initMDNS() } } tcpListener.newConnectionHandler={(connection:NWConnection) in let id=UUID().uuidString let conn=InboundNearbyConnection(connection: connection, id: id) self.activeConnections[id]=conn conn.delegate=self conn.start() } tcpListener.start(queue: .global(qos: .utility)) } private static func generateEndpointID()->[UInt8]{ var id:[UInt8]=[] let alphabet="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".compactMap {UInt8($0.asciiValue!)} for _ in 0...3{ id.append(alphabet[Int.random(in: 0.. Void) { activeConnections[response.notification.request.content.userInfo["transferID"]! as! String]?.submitUserConsent(accepted: response.actionIdentifier=="ACCEPT") completionHandler() } }