Improve service stop

This commit is contained in:
世界
2024-03-15 16:25:20 +08:00
parent 95e9bc5fb2
commit 7098a84187
5 changed files with 32 additions and 16 deletions
@@ -98,7 +98,7 @@ public struct OverviewView: View {
} }
private nonisolated func serviceReload() async throws { private nonisolated func serviceReload() async throws {
try LibboxNewStandaloneCommandClient()?.serviceReload() try LibboxNewStandaloneCommandClient()!.serviceReload()
} }
private nonisolated func setSystemProxyEnabled(_ isEnabled: Bool) async { private nonisolated func setSystemProxyEnabled(_ isEnabled: Bool) async {
@@ -1,3 +1,4 @@
import Libbox
import Library import Library
import NetworkExtension import NetworkExtension
import SwiftUI import SwiftUI
@@ -80,7 +81,16 @@ public struct StartStopButton: View {
try await profile.start() try await profile.start()
await environments.logClient.connect() await environments.logClient.connect()
} else { } else {
var err: Error?
do {
try LibboxNewStandaloneCommandClient()!.serviceClose()
} catch {
err = error
}
await profile.stop() await profile.stop()
if let err {
throw err
}
} }
} catch { } catch {
await MainActor.run { await MainActor.run {
@@ -262,6 +262,11 @@ public class ExtensionPlatformInterface: NSObject, LibboxPlatformInterfaceProtoc
} }
} }
public func postServiceClose() {
reset()
tunnel.postServiceClose()
}
public func getSystemProxyStatus() -> LibboxSystemProxyStatus? { public func getSystemProxyStatus() -> LibboxSystemProxyStatus? {
let status = LibboxSystemProxyStatus() let status = LibboxSystemProxyStatus()
guard let networkSettings else { guard let networkSettings else {
+15 -14
View File
@@ -31,7 +31,7 @@ open class ExtensionProvider: NEPacketTunnelProvider {
var error: NSError? var error: NSError?
LibboxRedirectStderr(FilePath.cacheDirectory.appendingPathComponent("stderr.log").relativePath, &error) LibboxRedirectStderr(FilePath.cacheDirectory.appendingPathComponent("stderr.log").relativePath, &error)
if let error { if let error {
writeError("(packet-tunnel) redirect stderr error: \(error.localizedDescription)") writeFatalError("(packet-tunnel) redirect stderr error: \(error.localizedDescription)")
} }
await LibboxSetMemoryLimit(!SharedPreferences.ignoreMemoryLimit.get()) await LibboxSetMemoryLimit(!SharedPreferences.ignoreMemoryLimit.get())
@@ -39,14 +39,14 @@ open class ExtensionProvider: NEPacketTunnelProvider {
if platformInterface == nil { if platformInterface == nil {
platformInterface = ExtensionPlatformInterface(self) platformInterface = ExtensionPlatformInterface(self)
} }
commandServer = try await LibboxNewCommandServer(platformInterface, Int32(SharedPreferences.maxLogLines.get())) commandServer = await LibboxNewCommandServer(platformInterface, Int32(SharedPreferences.maxLogLines.get()))
do { do {
try commandServer.start() try commandServer.start()
} catch { } catch {
writeFatalError("(packet-tunnel): log server start error: \(error.localizedDescription)") writeFatalError("(packet-tunnel): log server start error: \(error.localizedDescription)")
return return
} }
writeMessage("(packet-tunnel) log server started") writeMessage("(packet-tunnel): Here I stand")
await startService() await startService()
} }
@@ -58,17 +58,13 @@ open class ExtensionProvider: NEPacketTunnelProvider {
} }
} }
func writeError(_ message: String) {
writeMessage(message)
var error: NSError?
LibboxWriteServiceError(message, &error)
}
public func writeFatalError(_ message: String) { public func writeFatalError(_ message: String) {
#if DEBUG #if DEBUG
NSLog(message) NSLog(message)
#endif #endif
writeError(message) writeMessage(message)
var error: NSError?
LibboxWriteServiceError(message, &error)
cancelTunnelWithError(NSError(domain: message, code: 0)) cancelTunnelWithError(NSError(domain: message, code: 0))
} }
@@ -86,7 +82,7 @@ open class ExtensionProvider: NEPacketTunnelProvider {
} }
let configContent: String let configContent: String
do { do {
configContent = try await profile.read() configContent = try profile.read()
} catch { } catch {
writeFatalError("(packet-tunnel) error: read config file \(profile.path): \(error.localizedDescription)") writeFatalError("(packet-tunnel) error: read config file \(profile.path): \(error.localizedDescription)")
return return
@@ -94,7 +90,7 @@ open class ExtensionProvider: NEPacketTunnelProvider {
var error: NSError? var error: NSError?
let service = LibboxNewService(configContent, platformInterface, &error) let service = LibboxNewService(configContent, platformInterface, &error)
if let error { if let error {
writeError("(packet-tunnel) error: create service: \(error.localizedDescription)") writeFatalError("(packet-tunnel) error: create service: \(error.localizedDescription)")
return return
} }
guard let service else { guard let service else {
@@ -105,7 +101,7 @@ open class ExtensionProvider: NEPacketTunnelProvider {
try service.start() try service.start()
} catch { } catch {
commandServer.setService(nil) commandServer.setService(nil)
writeError("(packet-tunnel) error: start service: \(error.localizedDescription)") writeFatalError("(packet-tunnel) error: start service: \(error.localizedDescription)")
return return
} }
boxService = service boxService = service
@@ -119,7 +115,7 @@ open class ExtensionProvider: NEPacketTunnelProvider {
do { do {
try service.close() try service.close()
} catch { } catch {
writeError("(packet-tunnel) error: stop service: \(error.localizedDescription)") writeMessage("(packet-tunnel) error: stop service: \(error.localizedDescription)")
} }
boxService = nil boxService = nil
commandServer.setService(nil) commandServer.setService(nil)
@@ -136,9 +132,14 @@ open class ExtensionProvider: NEPacketTunnelProvider {
reasserting = false reasserting = false
} }
stopService() stopService()
commandServer.resetLog()
await startService() await startService()
} }
func postServiceClose() {
boxService = nil
}
override open func stopTunnel(with reason: NEProviderStopReason) async { override open func stopTunnel(with reason: NEProviderStopReason) async {
writeMessage("(packet-tunnel) stopping, reason: \(reason)") writeMessage("(packet-tunnel) stopping, reason: \(reason)")
stopService() stopService()
+1 -1
View File
@@ -201,7 +201,7 @@ public struct MenuView: View {
} }
private nonisolated func serviceReload() async throws { private nonisolated func serviceReload() async throws {
try LibboxNewStandaloneCommandClient()?.serviceReload() try LibboxNewStandaloneCommandClient()!.serviceReload()
} }
} }
} }