aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/service/ipc_client.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-04-30 14:01:42 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2019-04-30 20:19:50 +0200
commit508d45a6f7195970d0bc68a1223a3282ce666010 (patch)
tree456e11464978e66542d98def6b8e1374bbec34d8 /service/ipc_client.go
parentui: pick more windowsy colors (diff)
downloadwireguard-windows-508d45a6f7195970d0bc68a1223a3282ce666010.tar.xz
wireguard-windows-508d45a6f7195970d0bc68a1223a3282ce666010.zip
service: inform UIs it is time to quit so they can kill tray
Diffstat (limited to '')
-rw-r--r--service/ipc_client.go19
1 files changed, 19 insertions, 0 deletions
diff --git a/service/ipc_client.go b/service/ipc_client.go
index a6241af2..41e71f22 100644
--- a/service/ipc_client.go
+++ b/service/ipc_client.go
@@ -32,6 +32,7 @@ type NotificationType int
const (
TunnelChangeNotificationType NotificationType = iota
TunnelsChangeNotificationType
+ ManagerStoppingNotificationType
)
var rpcClient *rpc.Client
@@ -48,6 +49,12 @@ type TunnelsChangeCallback struct {
var tunnelsChangeCallbacks = make(map[*TunnelsChangeCallback]bool)
+type ManagerStoppingCallback struct {
+ cb func()
+}
+
+var managerStoppingCallbacks = make(map[*ManagerStoppingCallback]bool)
+
func InitializeIPCClient(reader *os.File, writer *os.File, events *os.File) {
rpcClient = rpc.NewClient(&pipeRWC{reader, writer})
go func() {
@@ -95,6 +102,10 @@ func InitializeIPCClient(reader *os.File, writer *os.File, events *os.File) {
for cb := range tunnelsChangeCallbacks {
cb.cb()
}
+ case ManagerStoppingNotificationType:
+ for cb := range managerStoppingCallbacks {
+ cb.cb()
+ }
}
}
}()
@@ -181,3 +192,11 @@ func IPCClientRegisterTunnelsChange(cb func()) *TunnelsChangeCallback {
func (cb *TunnelsChangeCallback) Unregister() {
delete(tunnelsChangeCallbacks, cb)
}
+func IPCClientRegisterManagerStopping(cb func()) *ManagerStoppingCallback {
+ s := &ManagerStoppingCallback{cb}
+ managerStoppingCallbacks[s] = true
+ return s
+}
+func (cb *ManagerStoppingCallback) Unregister() {
+ delete(managerStoppingCallbacks, cb)
+}