fix hanging goroutine

This commit is contained in:
2024-01-26 16:27:16 +08:00
parent 03539164e5
commit 86f4adca3f

View File

@ -119,59 +119,65 @@ func (signalingServer SignalingServer) handleRedisPubSub(ctx context.Context, na
} }
ch := pubsub.Channel() ch := pubsub.Channel()
for msg := range ch { for {
switch msg.Channel { select {
case signalingServer.redisKeyPrefix + ":" + room + ":discover": case <-ctx.Done():
if err := stream.Send(&proto.SignalingMessage{ return nil
Room: room, case msg := <-ch:
Sender: msg.Payload,
Message: &proto.SignalingMessage_DiscoverRequest{},
}); err != nil {
return err
}
case signalingServer.redisKeyPrefix + ":" + room + ":discover:" + name:
if msg.Payload == name {
continue
}
if err := stream.Send(&proto.SignalingMessage{
Room: room,
Sender: msg.Payload,
Receiver: &name,
Message: &proto.SignalingMessage_DiscoverResponse{},
}); err != nil {
return err
}
case signalingServer.redisKeyPrefix + ":" + room + ":offer:" + name:
sdpMessage := &proto.SDPMessage{}
if err := json.NewDecoder(strings.NewReader(msg.Payload)).Decode(sdpMessage); err != nil {
return err
}
if err := stream.Send(&proto.SignalingMessage{ switch msg.Channel {
Room: room, case signalingServer.redisKeyPrefix + ":" + room + ":discover":
Sender: sdpMessage.Sender, if err := stream.Send(&proto.SignalingMessage{
Receiver: &name, Room: room,
Message: &proto.SignalingMessage_SessionOffer{ Sender: msg.Payload,
SessionOffer: sdpMessage, Message: &proto.SignalingMessage_DiscoverRequest{},
}, }); err != nil {
}); err != nil { return err
return err }
} case signalingServer.redisKeyPrefix + ":" + room + ":discover:" + name:
case signalingServer.redisKeyPrefix + ":" + room + ":answer:" + name: if msg.Payload == name {
sdpMessage := &proto.SDPMessage{} continue
if err := json.NewDecoder(strings.NewReader(msg.Payload)).Decode(sdpMessage); err != nil { }
return err if err := stream.Send(&proto.SignalingMessage{
} Room: room,
Sender: msg.Payload,
Receiver: &name,
Message: &proto.SignalingMessage_DiscoverResponse{},
}); err != nil {
return err
}
case signalingServer.redisKeyPrefix + ":" + room + ":offer:" + name:
sdpMessage := &proto.SDPMessage{}
if err := json.NewDecoder(strings.NewReader(msg.Payload)).Decode(sdpMessage); err != nil {
return err
}
if err := stream.Send(&proto.SignalingMessage{ if err := stream.Send(&proto.SignalingMessage{
Room: room, Room: room,
Sender: sdpMessage.Sender, Sender: sdpMessage.Sender,
Receiver: &name, Receiver: &name,
Message: &proto.SignalingMessage_SessionAnswer{ Message: &proto.SignalingMessage_SessionOffer{
SessionAnswer: sdpMessage, SessionOffer: sdpMessage,
}, },
}); err != nil { }); err != nil {
return err return err
}
case signalingServer.redisKeyPrefix + ":" + room + ":answer:" + name:
sdpMessage := &proto.SDPMessage{}
if err := json.NewDecoder(strings.NewReader(msg.Payload)).Decode(sdpMessage); err != nil {
return err
}
if err := stream.Send(&proto.SignalingMessage{
Room: room,
Sender: sdpMessage.Sender,
Receiver: &name,
Message: &proto.SignalingMessage_SessionAnswer{
SessionAnswer: sdpMessage,
},
}); err != nil {
return err
}
} }
} }
} }