diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-04-30 14:01:42 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-04-30 20:19:50 +0200 |
commit | 508d45a6f7195970d0bc68a1223a3282ce666010 (patch) | |
tree | 456e11464978e66542d98def6b8e1374bbec34d8 /service/ipc_client.go | |
parent | ui: pick more windowsy colors (diff) | |
download | wireguard-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.go | 19 |
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) +} |