From 2ffd03aabfd3fd5b2779d40cf33a6b0e96d31460 Mon Sep 17 00:00:00 2001 From: giongto35 Date: Mon, 20 May 2019 16:00:09 +0800 Subject: [PATCH] use for to wait channel --- emulator/gameview.go | 8 +------- vpx-encoder/encoder.go | 8 +++----- webrtc/webrtc.go | 21 +++++---------------- worker/overlord.go | 1 + worker/room/media.go | 16 ++-------------- worker/room/room.go | 9 ++------- 6 files changed, 14 insertions(+), 49 deletions(-) diff --git a/emulator/gameview.go b/emulator/gameview.go index 0be6c22b..8c7113e2 100644 --- a/emulator/gameview.go +++ b/emulator/gameview.go @@ -85,13 +85,7 @@ func NewGameView(console *nes.Console, title, saveFile string, imageChannel chan // ListenToInputChannel listen from input channel streamm, which is exposed to WebRTC session func (view *GameView) ListenToInputChannel() { - for { - // Adding ok here make thing slowdown - // TODO: Investigate slow - keysInBinary, ok := <-view.inputChannel - if !ok { - return - } + for keysInBinary := range view.inputChannel { for i := 0; i < NumKeys*2; i++ { b := ((keysInBinary & 1) == 1) view.keyPressed[i] = (view.keyPressed[i] && b) || b diff --git a/vpx-encoder/encoder.go b/vpx-encoder/encoder.go index d295bceb..3f85f816 100644 --- a/vpx-encoder/encoder.go +++ b/vpx-encoder/encoder.go @@ -126,15 +126,13 @@ func (v *VpxEncoder) startLooping() { } }() - for { - beginEncoding := time.Now() - - yuv, ok := <-v.Input - if !ok || v.Done == true { + for yuv := range v.Input { + if v.Done == true { // The first time we see IsRunning set to false, we release and return v.Release() return } + beginEncoding := time.Now() // Add Image v.vpxCodexIter = nil diff --git a/webrtc/webrtc.go b/webrtc/webrtc.go index d6dabc93..4d416673 100644 --- a/webrtc/webrtc.go +++ b/webrtc/webrtc.go @@ -274,10 +274,8 @@ func (w *WebRTC) startStreaming(vp8Track *webrtc.Track, audioTrack *webrtc.DataC }() // TODO: Use same yuv - for w.isConnected { - yuv, ok := <-w.ImageChannel - if !ok { - log.Println("Screenshot from emulator closed") + for yuv := range w.ImageChannel { + if !w.isConnected { return } if len(w.encoder.Input) < cap(w.encoder.Input) { @@ -294,13 +292,7 @@ func (w *WebRTC) startStreaming(vp8Track *webrtc.Track, audioTrack *webrtc.DataC } }() - for w.isConnected { - bs, ok := <-w.encoder.Output - if !ok { - log.Println("WebRTC Video sending Closed") - return - } - + for bs := range w.encoder.Output { if *config.IsMonitor { log.Println("Encoding FPS : ", w.calculateFPS()) } @@ -316,13 +308,10 @@ func (w *WebRTC) startStreaming(vp8Track *webrtc.Track, audioTrack *webrtc.DataC } }() - for w.isConnected { - data, ok := <-w.AudioChannel - if !ok { - log.Println("WebRTC Audio sending Closed") + for data := range w.AudioChannel { + if !w.isConnected { return } - audioTrack.Send(data) } }() diff --git a/worker/overlord.go b/worker/overlord.go index 00c5e8d6..13c0253f 100644 --- a/worker/overlord.go +++ b/worker/overlord.go @@ -165,6 +165,7 @@ func (h *Handler) RouteOverlord() { if ok { session.Close() delete(h.sessions, resp.SessionID) + h.detachPeerConn(session.peerconnection) } return cws.EmptyPacket diff --git a/worker/room/media.go b/worker/room/media.go index 24fe7083..27a354df 100644 --- a/worker/room/media.go +++ b/worker/room/media.go @@ -26,13 +26,7 @@ func (r *Room) startAudio() { var count byte = 0 // fanout Audio - for { - sample, ok := <-r.audioChannel - if !ok { - // Just for guarding - log.Println("Warn: Room ", r.ID, " audio channel closed unexpectedly") - return - } + for sample := range r.audioChannel { if !r.IsRunning { log.Println("Room ", r.ID, " audio channel closed") return @@ -81,13 +75,7 @@ func (r *Room) startVideo() { size := int(float32(config.Width*config.Height) * 1.5) yuv := make([]byte, size, size) // fanout Screen - for { - image, ok := <-r.imageChannel - if !ok { - // Just for guarding, should not reached - log.Println("Warn: Room ", r.ID, " video channel closed unexpectedly") - return - } + for image := range r.imageChannel { if !r.IsRunning { log.Println("Room ", r.ID, " video channel closed") return diff --git a/worker/room/room.go b/worker/room/room.go index 0aa40a32..1e45e0bb 100644 --- a/worker/room/room.go +++ b/worker/room/room.go @@ -121,13 +121,7 @@ func (r *Room) startWebRTCSession(peerconnection *webrtc.WebRTC, playerIndex int }() go func() { - for { - input, ok := <-peerconnection.InputChannel - if !ok { - return - // might consider continue here - } - + for input := range peerconnection.InputChannel { if peerconnection.Done || !peerconnection.IsConnected() || !r.IsRunning { return } @@ -198,6 +192,7 @@ func (r *Room) Close() { close(r.inputChannel) close(r.Done) // Close here is a bit wrong because this read channel + // Just dont close it, let it be gc //close(r.imageChannel) //close(r.audioChannel) }