punchnet-macos/Tun/Punchnet/SDLTunnelAppNotifier.swift

52 lines
1.4 KiB
Swift

//
// SDLTunnelAppNotifier.swift
// Tun
//
// Created by on 2026/4/15.
//
import Foundation
final class SDLTunnelAppNotifier {
static let shared = SDLTunnelAppNotifier()
private let suiteName: String
private let eventKey: String
init(suiteName: String = SDLNotificationCenter.Configuration.appGroupSuiteName,
eventKey: String = SDLNotificationCenter.Configuration.latestEventKey) {
self.suiteName = suiteName
self.eventKey = eventKey
}
func publish(code: Int? = nil, message: String) {
var event = TunnelEvent()
event.id = UUID().uuidString
event.timestampMs = UInt64(Date().timeIntervalSince1970 * 1000)
event.code = Int32(clamping: code ?? 0)
event.message = message
self.publish(event)
}
func publish(_ event: TunnelEvent) {
guard let shared = UserDefaults(suiteName: self.suiteName),
let data = try? event.serializedData() else {
return
}
shared.set(data, forKey: self.eventKey)
shared.synchronize()
SDLNotificationCenter.shared.post(.tunnelEventChanged)
}
func clear() {
guard let shared = UserDefaults(suiteName: self.suiteName) else {
return
}
shared.removeObject(forKey: self.eventKey)
shared.synchronize()
SDLNotificationCenter.shared.post(.tunnelEventChanged)
}
}