diff --git a/chatManager.go b/chatManager.go index dfcb738..cffe9a1 100644 --- a/chatManager.go +++ b/chatManager.go @@ -524,11 +524,15 @@ func (cm *ChatsManager) createPeerConnection(target string, from string, chatId }) dc.OnClose(func() { fmt.Println("closing gracefully event dc...") - close(reqChan) + if _, closed := <-reqChan; !closed { + close(reqChan) + } }) dc.OnError(func(err error) { // logger.Println("--------------- error in dc:", err) - close(reqChan) + if _, closed := <-reqChan; !closed { + close(reqChan) + } }) dc.OnMessage(func(msg webrtc.DataChannelMessage) { var req ChatRequest diff --git a/squadGrpcMiddleware.go b/squadGrpcMiddleware.go index 9ff7097..381288c 100644 --- a/squadGrpcMiddleware.go +++ b/squadGrpcMiddleware.go @@ -104,7 +104,11 @@ func (zm *SquadGrpcMiddleware) Process(ctx context.Context, req *SignalingMessag reqChan := make(chan *SquadRequest) d, e := zm.Manager.Squads[payload["squadId"]].SquadRequestScheduler.Schedule(reqChan) go func() { - defer close(reqChan) + defer func() { + if _, closed := <-reqChan; !closed { + close(reqChan) + } + }() reqChan <- &SquadRequest{ ReqType: string(REMOVED_SQUAD_AUTHORIZED_MEMBER), From: payload["userId"], @@ -131,7 +135,11 @@ func (zm *SquadGrpcMiddleware) Process(ctx context.Context, req *SignalingMessag reqChan := make(chan *SquadRequest) d, e := zm.Manager.Squads[payload["squadId"]].SquadRequestScheduler.Schedule(reqChan) go func() { - defer close(reqChan) + defer func() { + if _, closed := <-reqChan; !closed { + close(reqChan) + } + }() reqChan <- &SquadRequest{ ReqType: string(NEW_AUTHORIZED_SQUAD_MEMBER), From: payload["userId"], diff --git a/squadManager.go b/squadManager.go index 43784cd..c46f77f 100644 --- a/squadManager.go +++ b/squadManager.go @@ -442,11 +442,15 @@ func (zm *SquadManager) createPeerConnection(target string, from string, squadId } }) channel.OnClose(func() { - close(reqChan) + if _, closed := <-reqChan; !closed { + close(reqChan) + } //_ = zm.HandleLeavingMember(target, squadId, true) }) channel.OnError(func(err error) { - close(reqChan) + if _, closed := <-reqChan; !closed { + close(reqChan) + } //_ = zm.HandleLeavingMember(target, squadId, true) }) channel.OnMessage(func(msg webrtc.DataChannelMessage) { diff --git a/zoneGrpcMiddleware.go b/zoneGrpcMiddleware.go index e060b5f..0dd0ae6 100644 --- a/zoneGrpcMiddleware.go +++ b/zoneGrpcMiddleware.go @@ -104,7 +104,11 @@ func (zm *ZoneGrpcMiddleware) Process(ctx context.Context, req *SignalingMessage } done, e := zm.Manager.Zones[payload["zoneId"]].ZoneRequestScheduler.Schedule(reqChan) go func() { - defer close(reqChan) + defer func() { + if _, closed := <-reqChan; !closed { + close(reqChan) + } + }() reqChan <- &ZoneRequest{ ReqType: string(REMOVED_ZONE_AUTHORIZED_MEMBER), From: payload["userId"], @@ -138,7 +142,11 @@ func (zm *ZoneGrpcMiddleware) Process(ctx context.Context, req *SignalingMessage reqChan := make(chan *ZoneRequest) done, e := zm.Manager.Zones[payload["zoneId"]].ZoneRequestScheduler.Schedule(reqChan) go func() { - defer close(reqChan) + defer func() { + if _, closed := <-reqChan; !closed { + close(reqChan) + } + }() // reqChan <- &ZoneRequest{ // ReqType: string(ADD_USER), // From: payload["userId"], diff --git a/zoneManager.go b/zoneManager.go index 6138143..bd4108e 100644 --- a/zoneManager.go +++ b/zoneManager.go @@ -458,11 +458,15 @@ func (zm *ZoneManager) createPeerConnection(target string, from string, zoneId s } }) channel.OnClose(func() { - close(reqChan) + if _, closed := <-reqChan; !closed { + close(reqChan) + } //_ = zm.HandleLeavingMember(target, zoneId, true) }) channel.OnError(func(err error) { - close(reqChan) + if _, closed := <-reqChan; !closed { + close(reqChan) + } //_ = zm.HandleLeavingMember(target, zoneId, true) }) channel.OnMessage(func(msg webrtc.DataChannelMessage) {