From 2261bf55f431f2d25acc343391d31d77eb0c802e Mon Sep 17 00:00:00 2001 From: benyamin Date: Mon, 16 Oct 2023 17:38:11 +0330 Subject: [PATCH] fix: change the way goldgorilla reconnection to greatape was handled --- app.go | 65 ++++++++++++++++++++++++++++++++------------ models/config.go | 1 + models/error.go | 4 +-- repositories/room.go | 21 ++------------ 4 files changed, 53 insertions(+), 38 deletions(-) diff --git a/app.go b/app.go index 8c29605..7438f94 100644 --- a/app.go +++ b/app.go @@ -36,6 +36,7 @@ func (a *App) Init(srcListenAddr string, svcAddr string, logjamBaseUrl string, t panic("[E] can't parse ice.servers.json: " + err.Error()) } } + startRejoinCH := make(chan bool, 2) a.conf = &models.ConfigModel{ LogjamBaseUrl: logjamBaseUrl + "/auxiliary-node", TargetRoom: targetRoom, @@ -43,6 +44,7 @@ func (a *App) Init(srcListenAddr string, svcAddr string, logjamBaseUrl string, t ICEServers: iceServers, ICETCPMUXListenPort: iceTCPMUXListenPort, CustomICEHostCandidateIP: customICEHostCandidateIP, + StartRejoinCH: &startRejoinCH, } roomRepo := repositories.NewRoomRepository(a.conf) a.router = &routers.Router{} @@ -63,23 +65,52 @@ func (a *App) Init(srcListenAddr string, svcAddr string, logjamBaseUrl string, t func (a *App) Run() { go func() { - start: - buffer, _ := json.Marshal(map[string]any{"roomId": a.conf.TargetRoom, "svcAddr": a.conf.ServiceAddress}) - body := bytes.NewReader(buffer) - c := &http.Client{ - Timeout: 8 * time.Second, - } - res, err := c.Post(a.conf.LogjamBaseUrl+"/join", "application/json", body) - if err != nil { - println(err.Error()) - time.Sleep(4 * time.Second) - goto start - } - if res.StatusCode > 204 { - resbody, _ := io.ReadAll(res.Body) - println("get /join "+res.Status, string(resbody)) - time.Sleep(4 * time.Second) - goto start + *a.conf.StartRejoinCH <- true + for simplyJoin := range *a.conf.StartRejoinCH { + if simplyJoin { + buffer, _ := json.Marshal(map[string]any{"roomId": a.conf.TargetRoom, "svcAddr": a.conf.ServiceAddress}) + body := bytes.NewReader(buffer) + c := &http.Client{ + Timeout: 8 * time.Second, + } + res, err := c.Post(a.conf.LogjamBaseUrl+"/join", "application/json", body) + if err != nil { + println(err.Error()) + time.Sleep(4 * time.Second) + *a.conf.StartRejoinCH <- true + continue + } + if res.StatusCode > 204 { + resbody, _ := io.ReadAll(res.Body) + println("get /join "+res.Status, string(resbody)) + time.Sleep(4 * time.Second) + *a.conf.StartRejoinCH <- true + continue + } + } else { + reqModel := struct { + RoomId string `json:"roomId"` + }{ + RoomId: a.conf.TargetRoom, + } + serializedReqBody, err := json.Marshal(reqModel) + if err != nil { + println(err.Error()) + *a.conf.StartRejoinCH <- true + continue + } + + resp, err := http.Post(a.conf.LogjamBaseUrl+"/rejoin", "application/json", bytes.NewReader(serializedReqBody)) + if err != nil { + println(err.Error()) + *a.conf.StartRejoinCH <- true + continue + } + if resp.StatusCode > 204 { + println("/rejoin", resp.Status) + *a.conf.StartRejoinCH <- true + } + } } }() err := a.router.Serve(a.src) diff --git a/models/config.go b/models/config.go index 9343de6..8c5269c 100644 --- a/models/config.go +++ b/models/config.go @@ -9,4 +9,5 @@ type ConfigModel struct { ICETCPMUXListenPort uint `json:"ice_tcpmux_listenPort"` CustomICEHostCandidateIP string `json:"customICEHostCandidateIP"` ICEServers []webrtc.ICEServer `json:"iceServers"` + StartRejoinCH *chan bool } diff --git a/models/error.go b/models/error.go index 497172a..2a907dc 100644 --- a/models/error.go +++ b/models/error.go @@ -18,7 +18,7 @@ func (err BigError) Meta() any { return err.metaData } -func NewError(msg string, errCode int, meta any) BigError { +func NewError(msg string, errCode int, meta any) error { if meta == nil { meta = struct { }{} @@ -30,7 +30,7 @@ func NewError(msg string, errCode int, meta any) BigError { } } -func (BigError) FromErr(err error, errCode int, meta any) BigError { +func (BigError) FromErr(err error, errCode int, meta any) error { if meta == nil { meta = err } diff --git a/repositories/room.go b/repositories/room.go index a865252..7b1a42e 100644 --- a/repositories/room.go +++ b/repositories/room.go @@ -209,28 +209,11 @@ func (r *RoomRepository) CreatePeer(roomId string, id uint64, canPublish bool, i } func (r *RoomRepository) onCallerDisconnected(roomId string) { - reqModel := struct { - RoomId string `json:"roomId"` - }{ - RoomId: roomId, - } - serializedReqBody, err := json.Marshal(reqModel) - if err != nil { + if err := r.ResetRoom(roomId); err != nil { println(err.Error()) return } - if err = r.ResetRoom(roomId); err != nil { - println(err.Error()) - return - } - resp, err := http.Post(r.conf.LogjamBaseUrl+"/rejoin", "application/json", bytes.NewReader(serializedReqBody)) - if err != nil { - println(err.Error()) - return - } - if resp.StatusCode > 204 { - println("/rejoin", resp.Status) - } + *r.conf.StartRejoinCH <- false } func (r *RoomRepository) onPeerICECandidate(roomId string, id uint64, ic *webrtc.ICECandidate) {