@@ -2,6 +2,8 @@ package ipc
2
2
3
3
import (
4
4
"fmt"
5
+ "sync"
6
+ "time"
5
7
6
8
"github.com/wailsapp/wails/lib/interfaces"
7
9
"github.com/wailsapp/wails/lib/logger"
@@ -12,18 +14,20 @@ import (
12
14
type Manager struct {
13
15
renderer interfaces.Renderer // The renderer
14
16
messageQueue chan * ipcMessage
15
- // quitChannel chan struct{}
17
+ quitChannel chan struct {}
16
18
// signals chan os.Signal
17
19
log * logger.CustomLogger
18
20
eventManager interfaces.EventManager
19
21
bindingManager interfaces.BindingManager
22
+ running bool
23
+ wg sync.WaitGroup
20
24
}
21
25
22
26
// NewManager creates a new IPC Manager
23
27
func NewManager () interfaces.IPCManager {
24
28
result := & Manager {
25
29
messageQueue : make (chan * ipcMessage , 100 ),
26
- // quitChannel: make(chan struct{}),
30
+ quitChannel : make (chan struct {}),
27
31
// signals: make(chan os.Signal, 1),
28
32
log : logger .NewCustomLogger ("IPC" ),
29
33
}
@@ -44,9 +48,12 @@ func (i *Manager) Start(eventManager interfaces.EventManager, bindingManager int
44
48
45
49
i .log .Info ("Starting" )
46
50
// signal.Notify(manager.signals, os.Interrupt)
51
+ i .running = true
52
+
53
+ // Keep track of this goroutine
54
+ i .wg .Add (1 )
47
55
go func () {
48
- running := true
49
- for running {
56
+ for i .running {
50
57
select {
51
58
case incomingMessage := <- i .messageQueue :
52
59
i .log .DebugFields ("Processing message" , logger.Fields {
@@ -117,15 +124,12 @@ func (i *Manager) Start(eventManager interfaces.EventManager, bindingManager int
117
124
i .log .DebugFields ("Finished processing message" , logger.Fields {
118
125
"1D" : & incomingMessage ,
119
126
})
120
- // case <-manager.quitChannel:
121
- // Debug("[MessageQueue] Quit caught")
122
- // running = false
123
- // case <-manager.signals:
124
- // Debug("[MessageQueue] Signal caught")
125
- // running = false
127
+ default :
128
+ time .Sleep (1 * time .Millisecond )
126
129
}
127
130
}
128
131
i .log .Debug ("Stopping" )
132
+ i .wg .Done ()
129
133
}()
130
134
}
131
135
@@ -167,3 +171,11 @@ func (i *Manager) SendResponse(response *ipcResponse) error {
167
171
// Call back to the front end
168
172
return i .renderer .Callback (data )
169
173
}
174
+
175
+ // Shutdown is called when exiting the Application
176
+ func (i * Manager ) Shutdown () {
177
+ i .log .Debug ("Shutdown called" )
178
+ i .running = false
179
+ i .log .Debug ("Waiting of main loop shutdown" )
180
+ i .wg .Wait ()
181
+ }
0 commit comments