implement ws reconnect

This commit is contained in:
2024-05-29 09:47:52 +08:00
parent 7ab9485cb0
commit fd67534ff3
2 changed files with 38 additions and 16 deletions

View File

@ -223,21 +223,22 @@ func (client *SignalClient) ConnectServer(ctx context.Context) {
panic(err)
}
client.Program.Send(systemMsg("Connecting to room..."))
signal_server := proto.NewSignalingClient(grpcClient)
stream, err := signal_server.Biu(context.Background())
if err != nil {
panic(err)
}
client.Program.Send(systemMsg("Connected."))
go client.HandleConnection(ctx, grpcClient, stream)
go client.HandleConnection(ctx, grpcClient)
}
func (client *SignalClient) HandleConnection(ctx context.Context, grpcClient *grpc.ClientConn, stream proto.Signaling_BiuClient) {
func (client *SignalClient) HandleConnection(ctx context.Context, grpcClient *grpc.ClientConn) {
defer grpcClient.Close()
room := client.Room
signal_client := proto.NewSignalingClient(grpcClient)
client.Program.Send(systemMsg("Connecting to room..."))
stream, err := signal_client.Biu(context.Background())
if err != nil {
return
}
client.Program.Send(systemMsg("Connected."))
client.Program.Send(systemMsg("Waiting for server to be bootstrapped."))
stream.Send(&proto.SignalingMessage{
@ -248,12 +249,29 @@ func (client *SignalClient) HandleConnection(ctx context.Context, grpcClient *gr
client.Program.Send(systemMsg("Bootstrapped."))
for {
if stream == nil {
var err error
client.Program.Send(systemMsg("Connecting to room..."))
stream, err = signal_client.Biu(context.Background())
if err != nil {
continue
}
client.Program.Send(systemMsg("Connected."))
stream.Send(&proto.SignalingMessage{
Sender: client.Name,
Room: room,
Message: &proto.SignalingMessage_Bootstrap{},
})
}
msg, err := stream.Recv()
if err == io.EOF {
break
}
if err != nil {
panic(err)
stream.CloseSend()
stream = nil
client.Program.Send(systemMsg("Reconnecting"))
continue
}
switch inner := msg.Message.(type) {
case *proto.SignalingMessage_Bootstrap:
@ -449,7 +467,7 @@ func (client *SignalClient) OnAnswer(ctx context.Context, sender, sdp string) {
func (client SignalClient) OnIceCandidate(ctx context.Context, sender, candidate string) {
peerConnection, ok := client.PeerConns[sender]
if !ok {
if !ok || peerConnection == nil {
return
}
candidateInit := webrtc.ICECandidateInit{}