add graceful shutdown, add reconnect on connection loss

This commit is contained in:
lbenedar
2026-04-10 13:59:16 +03:00
parent fb4e371348
commit a465e6a657
8 changed files with 286 additions and 148 deletions

View File

@@ -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 {