fix ui
This commit is contained in:
parent
5e40f5b7a7
commit
e2cbaff567
@ -10,12 +10,11 @@ import NetworkExtension
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
// vpn管理类
|
// vpn管理类
|
||||||
class VPNManager: ObservableObject {
|
class VPNManager {
|
||||||
static let shared = VPNManager()
|
static let shared = VPNManager()
|
||||||
|
|
||||||
@Published var vpnStatus: VPNStatus = .disconnected
|
private var observation: NSKeyValueObservation?
|
||||||
@Published var title: String = "启动"
|
var vpnStatus: VPNStatus = .disconnected
|
||||||
@Published var color: Color = .white
|
|
||||||
|
|
||||||
enum VPNStatus {
|
enum VPNStatus {
|
||||||
case connected
|
case connected
|
||||||
@ -46,23 +45,17 @@ class VPNManager: ObservableObject {
|
|||||||
|
|
||||||
// 监控系统VPN的状态的变化
|
// 监控系统VPN的状态的变化
|
||||||
private func addVPNStatusObserver(_ manager: NETunnelProviderManager) {
|
private func addVPNStatusObserver(_ manager: NETunnelProviderManager) {
|
||||||
NotificationCenter.default.removeObserver(self)
|
self.observation = manager.connection.observe(\.status, options: [.initial, .new]) {[weak self] connection, change in
|
||||||
|
guard let status = change.newValue else {
|
||||||
NotificationCenter.default.addObserver(forName: .NEVPNStatusDidChange, object: manager.connection, queue: .main) { [unowned self] (notification) -> Void in
|
return
|
||||||
// 更新vpn的状态
|
}
|
||||||
switch manager.connection.status {
|
switch status {
|
||||||
case .invalid, .disconnected, .disconnecting:
|
case .invalid, .disconnected, .disconnecting:
|
||||||
self.vpnStatus = .disconnected
|
self?.vpnStatus = .disconnected
|
||||||
self.title = "启动"
|
|
||||||
self.color = .white
|
|
||||||
case .connecting, .connected, .reasserting:
|
case .connecting, .connected, .reasserting:
|
||||||
self.vpnStatus = .connected
|
self?.vpnStatus = .connected
|
||||||
self.title = "停止"
|
|
||||||
self.color = .red
|
|
||||||
@unknown default:
|
@unknown default:
|
||||||
self.vpnStatus = .disconnected
|
self?.vpnStatus = .disconnected
|
||||||
self.title = "启动"
|
|
||||||
self.color = .red
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,7 +33,6 @@ struct punchnetApp: App {
|
|||||||
@AppStorage("token") var token: String = ""
|
@AppStorage("token") var token: String = ""
|
||||||
@AppStorage("network_code") var networkCode: String = ""
|
@AppStorage("network_code") var networkCode: String = ""
|
||||||
@AppStorage("hostname") var hostname: String = ""
|
@AppStorage("hostname") var hostname: String = ""
|
||||||
@ObservedObject var vpnManager = VPNManager.shared
|
|
||||||
|
|
||||||
private var noticeServer: UDPNoticeCenterServer
|
private var noticeServer: UDPNoticeCenterServer
|
||||||
@State private var appContext: AppContext
|
@State private var appContext: AppContext
|
||||||
@ -96,7 +95,7 @@ struct punchnetApp: App {
|
|||||||
Button(action: {
|
Button(action: {
|
||||||
self.menuClick()
|
self.menuClick()
|
||||||
}, label: {
|
}, label: {
|
||||||
Text(vpnManager.title)
|
Text("启动")
|
||||||
})
|
})
|
||||||
|
|
||||||
Divider()
|
Divider()
|
||||||
@ -111,18 +110,7 @@ struct punchnetApp: App {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func menuClick() {
|
private func menuClick() {
|
||||||
switch self.vpnManager.vpnStatus {
|
|
||||||
case .disconnected:
|
|
||||||
// Task {
|
|
||||||
// let clientId = SystemConfig.getClientId()
|
|
||||||
// try await vpnManager.enableVpn(options: SystemConfig.getOptions(networkCode: self.networkCode, token: self.token, clientId: clientId, hostname: self.hostname, noticePort: self.noticeServer.port)!)
|
|
||||||
// }
|
|
||||||
()
|
|
||||||
case .connected:
|
|
||||||
Task {
|
|
||||||
try await vpnManager.disableVpn()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user