fix view
This commit is contained in:
parent
58507e2f06
commit
ef99a81d76
@ -29,7 +29,9 @@ class VPNManager {
|
||||
private var vpnStatusCont: AsyncStream<VPNStatus>.Continuation
|
||||
|
||||
enum VPNStatus {
|
||||
case connecting
|
||||
case connected
|
||||
case disconnecting
|
||||
case disconnected
|
||||
}
|
||||
|
||||
@ -93,11 +95,19 @@ class VPNManager {
|
||||
self.statusObserver = NotificationCenter.default.addObserver(forName: .NEVPNStatusDidChange, object: manager.connection, queue: .main) {[weak self] _ in
|
||||
NSLog("status channge: \(manager.connection.status)")
|
||||
switch manager.connection.status {
|
||||
case .invalid, .disconnected, .disconnecting:
|
||||
case .invalid, .disconnected:
|
||||
self?.vpnStatusCont.yield(.disconnected)
|
||||
self?.vpnStatus = .disconnected
|
||||
self?.isConnected = false
|
||||
case .connecting, .connected, .reasserting:
|
||||
case .disconnecting:
|
||||
self?.vpnStatusCont.yield(.disconnecting)
|
||||
self?.vpnStatus = .disconnecting
|
||||
self?.isConnected = false
|
||||
case .connecting, .reasserting:
|
||||
self?.vpnStatusCont.yield(.connecting)
|
||||
self?.vpnStatus = .connecting
|
||||
self?.isConnected = true
|
||||
case .connected:
|
||||
self?.vpnStatusCont.yield(.connected)
|
||||
self?.vpnStatus = .connected
|
||||
self?.isConnected = true
|
||||
|
||||
@ -146,6 +146,7 @@ class AppContext {
|
||||
// 断开网络连接
|
||||
func stopTun() async throws {
|
||||
try await self.vpnManager.disableVpn()
|
||||
self.networkContext = nil
|
||||
}
|
||||
|
||||
// 退出登陆
|
||||
|
||||
@ -18,11 +18,23 @@ struct MainMenuBar: View {
|
||||
case .connected:
|
||||
Button(action: {
|
||||
Task { @MainActor in
|
||||
try await vpnManager.disableVpn()
|
||||
try await appContext.stopTun()
|
||||
}
|
||||
}, label: {
|
||||
Text("停止")
|
||||
})
|
||||
case .connecting:
|
||||
Button(action: {
|
||||
}, label: {
|
||||
Text("连接中...")
|
||||
})
|
||||
.disabled(true)
|
||||
case .disconnecting:
|
||||
Button(action: {
|
||||
}, label: {
|
||||
Text("断开中...")
|
||||
})
|
||||
.disabled(true)
|
||||
case .disconnected:
|
||||
Button(action: {
|
||||
Task { @MainActor in
|
||||
@ -55,8 +67,13 @@ struct MainMenuBar: View {
|
||||
}
|
||||
|
||||
private func startVPN() async {
|
||||
if let options = appContext.vpnOptions {
|
||||
try? await vpnManager.enableVpn(options: options)
|
||||
do {
|
||||
if appContext.networkContext == nil {
|
||||
try await appContext.connectNetwork()
|
||||
}
|
||||
try await appContext.startTun()
|
||||
} catch {
|
||||
NSLog("menu start vpn failed: \(error)")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user