fix hanging goroutine
This commit is contained in:
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user