add graceful shutdown, add reconnect on connection loss
This commit is contained in:
@@ -8,6 +8,27 @@ type ExchangeChannels struct {
|
||||
ProgressMutex sync.Mutex
|
||||
}
|
||||
|
||||
func CloseMapChannel[K comparable, V any](channel map[K]chan V) {
|
||||
for _, v := range channel {
|
||||
select {
|
||||
case _, ok := <-v:
|
||||
if ok {
|
||||
close(v)
|
||||
}
|
||||
default:
|
||||
close(v)
|
||||
}
|
||||
}
|
||||
for k := range channel {
|
||||
delete(channel, k)
|
||||
}
|
||||
}
|
||||
|
||||
func (channels *ExchangeChannels) Close() {
|
||||
CloseMapChannel(channels.Msgs)
|
||||
CloseMapChannel(channels.ProgressMsg)
|
||||
}
|
||||
|
||||
type ReadChannels struct {
|
||||
done chan struct{}
|
||||
msg chan *WsMessage
|
||||
@@ -26,10 +47,21 @@ func (channels ReadChannels) Done() chan struct{} {
|
||||
return channels.done
|
||||
}
|
||||
|
||||
func CloseChannel[V any](channel chan V) {
|
||||
select {
|
||||
case _, ok := <-channel:
|
||||
if ok {
|
||||
close(channel)
|
||||
}
|
||||
default:
|
||||
close(channel)
|
||||
}
|
||||
}
|
||||
|
||||
func (channels *ReadChannels) Close() {
|
||||
close(channels.done)
|
||||
close(channels.err)
|
||||
close(channels.msg)
|
||||
CloseChannel(channels.done)
|
||||
CloseChannel(channels.err)
|
||||
CloseChannel(channels.msg)
|
||||
}
|
||||
|
||||
func InitWsChannels() *ReadChannels {
|
||||
Reference in New Issue
Block a user