Skip to content

Commit

Permalink
feat(swiftui): wait and show client error message after the client is…
Browse files Browse the repository at this point in the history
… started

After th swiftui client is started, we call Go API `WaitClientWrapper` to wait error and show error
message dialog if there is some error while running.
  • Loading branch information
genshen committed Jan 22, 2023
1 parent be8f0de commit 47465e9
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 1 deletion.
9 changes: 9 additions & 0 deletions extra/go-api/wssocks_client_wrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,15 @@ func StartClientWrapper(handlesPtr uintptr, localAddr, remoteAddr, httpLocalAddr
return C.CString("")
}

//export WaitClientWrapper
func WaitClientWrapper(handlesPtr uintptr) *C.char {
var hp = (*extra.TaskHandles)(unsafe.Pointer(handlesPtr))
if err := hp.Wait(); err != nil {
return C.CString(err.Error())
}
return C.CString("")
}

//export StopClientWrapper
func StopClientWrapper(handlesPtr uintptr) *C.char {
var hp = (*extra.TaskHandles)(unsafe.Pointer(handlesPtr))
Expand Down
19 changes: 18 additions & 1 deletion swiftui-client/wssocks-ustb-client/menu/MenuBarView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ struct MenuBarView: View {

var statusItem: NSStatusItem! // ref of status item
var configsInView: Configs! // ref of config values in ContentView


@State var ignoreWaitErr = true
private let defaults = UserDefaults.standard
@State var wssocksStatus = 0
var client = WssocksClient()
Expand Down Expand Up @@ -210,10 +211,26 @@ end tell
self.setWssocksStatusUI(status: 1)
}
}
if msg != "" { // starting has error, skip waiting
return
}

self.ignoreWaitErr = false // now we can accept wait error
let errorMsg = self.client.waitClient() ?? ""
DispatchQueue.main.sync {
// we only log error when it task is finished with error (not button clicking by user).
if errorMsg != "" && !ignoreWaitErr {
self.noticeFailed(message: errorMsg)
}
// waiting finished, set the status as "stopped".
self.setWssocksStatusUI(status: 0)
self.ignoreWaitErr = true
}
}
} else {
statusDesc = "正在停止wssocks..."
btnInProgress = true
self.ignoreWaitErr = true
DispatchQueue.global().async {
let msg = self.client.stopClient() ?? ""
DispatchQueue.main.sync {
Expand Down
5 changes: 5 additions & 0 deletions swiftui-client/wssocks-ustb-client/wssocksClientApi.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ struct WssocksClient {
return String(bytesNoCopy: v, length: strlen(v), encoding: .utf8, freeWhenDone: true)
}

public func waitClient() -> String? {
guard let v = WaitClientWrapper(self.handle) else { return nil }
return String(bytesNoCopy: v, length: strlen(v), encoding: .utf8, freeWhenDone: true)
}

public func stopClient() -> String? {
guard let v = StopClientWrapper(self.handle) else { return nil }
return String(bytesNoCopy: v, length: strlen(v), encoding: .utf8, freeWhenDone: true)
Expand Down

0 comments on commit 47465e9

Please sign in to comment.