Quit room

This commit is contained in:
giongto35 2019-05-18 02:50:25 +08:00
parent a7e94e7007
commit b0f4bc2836
5 changed files with 31 additions and 5 deletions

View file

@ -68,6 +68,12 @@ func (c *Client) Send(request WSPacket, callback func(response WSPacket)) {
// Wrap callback with sessionID and packetID
if callback != nil {
wrapperCallback := func(resp WSPacket) {
defer func() {
if err := recover(); err != nil {
log.Println("Recovered from err", err)
}
}()
resp.PacketID = request.PacketID
resp.SessionID = request.SessionID
callback(resp)
@ -76,8 +82,6 @@ func (c *Client) Send(request WSPacket, callback func(response WSPacket)) {
c.sendCallback[request.PacketID] = wrapperCallback
c.sendCallbackLock.Unlock()
}
//log.Println("Registered requested callback", "ID :", request.ID, "PacketID: ", request.PacketID)
//log.Println("Callback waiting list:", c.id, c.sendCallback)
c.sendLock.Lock()
c.conn.WriteMessage(websocket.TextMessage, data)
@ -87,11 +91,16 @@ 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)
}
}()
req := f(response)
// Add Meta data
req.PacketID = response.PacketID
req.SessionID = response.SessionID
//log.Println("Sending back request", req, "PacketID: ", req.PacketID, "SessionID: ", req.SessionID)
// Skip rqeuest if it is EmptyPacket
if req == EmptyPacket {

View file

@ -85,6 +85,20 @@ func (s *Session) RouteBrowser() {
return req
})
browserClient.Receive("quit", func(resp cws.WSPacket) (req cws.WSPacket) {
log.Println("Received quit", req)
s.GameName = resp.Data
s.RoomID = resp.RoomID
s.PlayerIndex = resp.PlayerIndex
room := s.handler.getRoom(s.RoomID)
if room.IsPCInRoom(s.peerconnection) {
s.handler.detachPeerConn(s.peerconnection)
}
return cws.EmptyPacket
})
browserClient.Receive("start", func(resp cws.WSPacket) (req cws.WSPacket) {
s.GameName = resp.Data
s.RoomID = resp.RoomID

View file

@ -176,6 +176,9 @@ func (r *Room) removeSession(w *webrtc.WebRTC) {
// TODO: Reuse for remove Session
func (r *Room) IsPCInRoom(w *webrtc.WebRTC) bool {
if r == nil {
return false
}
for _, s := range r.rtcSessions {
if s.ID == w.ID {
return true

View file

@ -142,6 +142,8 @@ function doButtonUp(name) {
showMenuScreen();
// TODO: Stop game
screen = document.getElementById("game-screen");
room_id = $("#room-txt").val()
conn.send(JSON.stringify({ "id": "quit", "data": "", "room_id": room_id}));
$("#room-txt").val("");
}
}

2
static/js/ws.js vendored
View file

@ -156,8 +156,6 @@ function startWebRTC() {
}
//
pc.oniceconnectionstatechange = e => {
log(`iceConnectionState: ${pc.iceConnectionState}`);