mirror of
https://github.com/giongto35/cloud-game.git
synced 2026-07-21 09:08:57 +00:00
Quit room
This commit is contained in:
parent
a7e94e7007
commit
b0f4bc2836
5 changed files with 31 additions and 5 deletions
15
cws/cws.go
15
cws/cws.go
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
2
static/js/controller.js
vendored
2
static/js/controller.js
vendored
|
|
@ -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
2
static/js/ws.js
vendored
|
|
@ -156,8 +156,6 @@ function startWebRTC() {
|
|||
}
|
||||
|
||||
|
||||
//
|
||||
|
||||
pc.oniceconnectionstatechange = e => {
|
||||
log(`iceConnectionState: ${pc.iceConnectionState}`);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue