From d52df47366fc32a0fd2fa7028d4b285a9ddb345f Mon Sep 17 00:00:00 2001 From: giongto35 Date: Thu, 23 May 2019 23:51:50 +0800 Subject: [PATCH] Fix panic when load (#35) * Change join to start * Unorder data channel * Add guard --- cws/cws.go | 10 +++++----- overlord/browser.go | 30 +++++++++++++++++++++++++----- overlord/handlers.go | 3 --- webrtc/webrtc.go | 4 ++-- 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/cws/cws.go b/cws/cws.go index d2f75342..f99e5dbf 100644 --- a/cws/cws.go +++ b/cws/cws.go @@ -93,11 +93,11 @@ func (c *Client) Send(request WSPacket, callback func(response WSPacket)) { // Receive receive and response back func (c *Client) Receive(id string, f func(response WSPacket) (request WSPacket)) { c.recvCallback[id] = func(response WSPacket) { - //defer func() { - //if err := recover(); err != nil { - //log.Println("Recovered from err", err) - //} - //}() + defer func() { + if err := recover(); err != nil { + log.Println("Recovered from err ", err) + } + }() req := f(response) // Add Meta data diff --git a/overlord/browser.go b/overlord/browser.go index add428a0..33eea0ed 100644 --- a/overlord/browser.go +++ b/overlord/browser.go @@ -36,7 +36,11 @@ func (s *Session) RouteBrowser() { // TODO: Async log.Println("Overlord: serverID: ", s.ServerID, resp.SessionID) resp.SessionID = s.ID - sdp := s.handler.workerClients[s.ServerID].SyncSend( + wc, ok := s.handler.workerClients[s.ServerID] + if !ok { + return cws.EmptyPacket + } + sdp := wc.SyncSend( resp, ) @@ -52,7 +56,11 @@ func (s *Session) RouteBrowser() { // TODO: Async resp.SessionID = s.ID - resp = s.handler.workerClients[s.ServerID].SyncSend( + wc, ok := s.handler.workerClients[s.ServerID] + if !ok { + return cws.EmptyPacket + } + resp = wc.SyncSend( resp, ) @@ -64,7 +72,11 @@ func (s *Session) RouteBrowser() { log.Println("Overlord: Relay start request from a browser to worker") // TODO: Async resp.SessionID = s.ID - workerResp := s.handler.workerClients[s.ServerID].SyncSend( + wc, ok := s.handler.workerClients[s.ServerID] + if !ok { + return cws.EmptyPacket + } + workerResp := wc.SyncSend( resp, ) // Response from worker contains initialized roomID. Set roomID to the session @@ -80,7 +92,11 @@ func (s *Session) RouteBrowser() { // TODO: Async resp.SessionID = s.ID resp.RoomID = s.RoomID - resp = s.handler.workerClients[s.ServerID].SyncSend( + wc, ok := s.handler.workerClients[s.ServerID] + if !ok { + return cws.EmptyPacket + } + resp = wc.SyncSend( resp, ) @@ -93,7 +109,11 @@ func (s *Session) RouteBrowser() { // TODO: Async resp.SessionID = s.ID resp.RoomID = s.RoomID - resp = s.handler.workerClients[s.ServerID].SyncSend( + wc, ok := s.handler.workerClients[s.ServerID] + if !ok { + return cws.EmptyPacket + } + resp = wc.SyncSend( resp, ) diff --git a/overlord/handlers.go b/overlord/handlers.go index 21d6c52d..bd715faa 100644 --- a/overlord/handlers.go +++ b/overlord/handlers.go @@ -136,9 +136,6 @@ func (o *Server) WS(w http.ResponseWriter, r *http.Request) { }, nil, ) - - //log.Println("Socket terminated, detach connection") - //h.detachPeerConn(wssession.peerconnection) }() wssession.BrowserClient.Listen() diff --git a/webrtc/webrtc.go b/webrtc/webrtc.go index 4d416673..a47274eb 100644 --- a/webrtc/webrtc.go +++ b/webrtc/webrtc.go @@ -145,8 +145,8 @@ func (w *WebRTC) StartClient(remoteSession string, iceCandidates [][]byte, width // input channel inputTrack, err := w.connection.CreateDataChannel("a", &webrtc.DataChannelInit{ - Ordered: &dtrue, - Negotiated: &dtrue, + Ordered: &dfalse, + Negotiated: &dfalse, ID: &d0, })