mirror of
https://github.com/giongto35/cloud-game.git
synced 2026-07-24 18:47:36 +00:00
Update save and load
This commit is contained in:
parent
c42ef403be
commit
4e316fce10
3 changed files with 84 additions and 105 deletions
|
|
@ -29,7 +29,7 @@ func (s *Session) RouteBrowser() {
|
|||
})
|
||||
|
||||
browserClient.Receive("initwebrtc", func(resp cws.WSPacket) cws.WSPacket {
|
||||
log.Println("Overlord: Received a sdp request from a browser")
|
||||
log.Println("Overlord: Received sdp request from a browser")
|
||||
log.Println("Overlord: Relay sdp request from a browser to worker")
|
||||
|
||||
// relay SDP to target worker and get back SDP of the worker
|
||||
|
|
@ -44,7 +44,7 @@ func (s *Session) RouteBrowser() {
|
|||
})
|
||||
|
||||
browserClient.Receive("quit", func(resp cws.WSPacket) (req cws.WSPacket) {
|
||||
log.Println("Overlord: Received a relay quit request from a browser")
|
||||
log.Println("Overlord: Received quit request from a browser")
|
||||
log.Println("Overlord: Relay quit request from a browser to worker")
|
||||
|
||||
// TODO: Async
|
||||
|
|
@ -57,10 +57,26 @@ func (s *Session) RouteBrowser() {
|
|||
})
|
||||
|
||||
browserClient.Receive("start", func(resp cws.WSPacket) cws.WSPacket {
|
||||
log.Println("Overlord: Received a relay start request from a browser")
|
||||
log.Println("Overlord: Received start request from a browser")
|
||||
log.Println("Overlord: Relay start request from a browser to worker")
|
||||
// TODO: Async
|
||||
resp.SessionID = s.ID
|
||||
workerResp := s.handler.workerClients[s.ServerID].SyncSend(
|
||||
resp,
|
||||
)
|
||||
// Response from worker contains initialized roomID. Set roomID to the session
|
||||
s.RoomID = workerResp.RoomID
|
||||
log.Println("Received room response from browser: ", workerResp.RoomID)
|
||||
|
||||
return workerResp
|
||||
})
|
||||
|
||||
browserClient.Receive("save", func(resp cws.WSPacket) (req cws.WSPacket) {
|
||||
log.Println("Overlord: Received save request from a browser")
|
||||
log.Println("Overlord: Relay save request from a browser to worker")
|
||||
// TODO: Async
|
||||
resp.SessionID = s.ID
|
||||
resp.RoomID = s.RoomID
|
||||
resp = s.handler.workerClients[s.ServerID].SyncSend(
|
||||
resp,
|
||||
)
|
||||
|
|
@ -68,101 +84,18 @@ func (s *Session) RouteBrowser() {
|
|||
return resp
|
||||
})
|
||||
|
||||
// TODO: Add save and load
|
||||
//browserClient.Receive("save", func(resp cws.WSPacket) (req cws.WSPacket) {
|
||||
//log.Println("Saving game state")
|
||||
//req.ID = "save"
|
||||
//req.Data = "ok"
|
||||
//if s.RoomID != "" {
|
||||
//room := s.handler.getRoom(s.RoomID)
|
||||
//if room == nil {
|
||||
//return
|
||||
//}
|
||||
//err := room.SaveGame()
|
||||
//if err != nil {
|
||||
//log.Println("[!] Cannot save game state: ", err)
|
||||
//req.Data = "error"
|
||||
//}
|
||||
//} else {
|
||||
//req.Data = "error"
|
||||
//}
|
||||
browserClient.Receive("load", func(resp cws.WSPacket) (req cws.WSPacket) {
|
||||
log.Println("Overlord: Received load request from a browser")
|
||||
log.Println("Overlord: Relay load request from a browser to worker")
|
||||
// TODO: Async
|
||||
resp.SessionID = s.ID
|
||||
resp.RoomID = s.RoomID
|
||||
resp = s.handler.workerClients[s.ServerID].SyncSend(
|
||||
resp,
|
||||
)
|
||||
|
||||
//return req
|
||||
//})
|
||||
|
||||
//browserClient.Receive("load", func(resp cws.WSPacket) (req cws.WSPacket) {
|
||||
//log.Println("Loading game state")
|
||||
//req.ID = "load"
|
||||
//req.Data = "ok"
|
||||
//if s.RoomID != "" {
|
||||
//room := s.handler.getRoom(s.RoomID)
|
||||
//err := room.LoadGame()
|
||||
//if err != nil {
|
||||
//log.Println("[!] Cannot load game state: ", err)
|
||||
//req.Data = "error"
|
||||
//}
|
||||
//} else {
|
||||
//req.Data = "error"
|
||||
//}
|
||||
|
||||
//return req
|
||||
//})
|
||||
|
||||
//browserClient.Receive("start", func(resp cws.WSPacket) (req cws.WSPacket) {
|
||||
//s.GameName = resp.Data
|
||||
//s.RoomID = resp.RoomID
|
||||
//s.PlayerIndex = resp.PlayerIndex
|
||||
|
||||
//log.Println("Starting game")
|
||||
//// If we are connecting to overlord, request corresponding serverID based on roomID
|
||||
//if s.OverlordClient != nil {
|
||||
//roomServerID := getServerIDOfRoom(s.OverlordClient, s.RoomID)
|
||||
//log.Println("Server of RoomID ", s.RoomID, " is ", roomServerID, " while current server is ", s.ServerID)
|
||||
//// If the target serverID is different from current serverID
|
||||
//if roomServerID != "" && s.ServerID != roomServerID {
|
||||
//// TODO: Re -register
|
||||
//// Bridge Connection to the target serverID
|
||||
//go s.bridgeConnection(roomServerID, s.GameName, s.RoomID, s.PlayerIndex)
|
||||
//return
|
||||
//}
|
||||
//}
|
||||
|
||||
//// Get Room in local server
|
||||
//// TODO: check if roomID is in the current server
|
||||
//room := s.handler.getRoom(s.RoomID)
|
||||
//log.Println("Got Room from local ", room, " ID: ", s.RoomID)
|
||||
//// If room is not running
|
||||
//if room == nil {
|
||||
//// Create new room
|
||||
//room = s.handler.createNewRoom(s.GameName, s.RoomID, s.PlayerIndex)
|
||||
//// Wait for done signal from room
|
||||
//go func() {
|
||||
//<-room.Done
|
||||
//s.handler.detachRoom(room.ID)
|
||||
//}()
|
||||
//}
|
||||
|
||||
//// Attach peerconnection to room. If PC is already in room, don't detach
|
||||
//log.Println("Is PC in room", room.IsPCInRoom(s.peerconnection))
|
||||
//if !room.IsPCInRoom(s.peerconnection) {
|
||||
//s.handler.detachPeerConn(s.peerconnection)
|
||||
//room.AddConnectionToRoom(s.peerconnection, s.PlayerIndex)
|
||||
//}
|
||||
//s.RoomID = room.ID
|
||||
|
||||
//// Register room to overlord if we are connecting to overlord
|
||||
//if room != nil && s.OverlordClient != nil {
|
||||
//s.OverlordClient.Send(cws.WSPacket{
|
||||
//ID: "registerRoom",
|
||||
//Data: s.RoomID,
|
||||
//}, nil)
|
||||
//}
|
||||
//req.ID = "start"
|
||||
//req.RoomID = s.RoomID
|
||||
//req.SessionID = s.ID
|
||||
|
||||
//return req
|
||||
//})
|
||||
return resp
|
||||
})
|
||||
}
|
||||
|
||||
// NewOverlordClient returns a client connecting to browser. This connection exchanges information between clients and server
|
||||
|
|
|
|||
|
|
@ -15,4 +15,5 @@ type Session struct {
|
|||
handler *Server
|
||||
|
||||
ServerID string
|
||||
RoomID string
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,19 +22,19 @@ func NewOverlordClient(oc *websocket.Conn) *OverlordClient {
|
|||
return nil
|
||||
}
|
||||
|
||||
oclient := &OverlordClient{
|
||||
oClient := &OverlordClient{
|
||||
Client: cws.NewClient(oc),
|
||||
}
|
||||
return oclient
|
||||
return oClient
|
||||
}
|
||||
|
||||
// RouteOverlord are all routes server received from overlord
|
||||
func (h *Handler) RouteOverlord() {
|
||||
iceCandidates := [][]byte{}
|
||||
oclient := h.oClient
|
||||
oClient := h.oClient
|
||||
|
||||
// Received from overlord the serverID
|
||||
oclient.Receive(
|
||||
oClient.Receive(
|
||||
"serverID",
|
||||
func(response cws.WSPacket) (request cws.WSPacket) {
|
||||
// Stick session with serverID got from overlord
|
||||
|
|
@ -45,7 +45,7 @@ func (h *Handler) RouteOverlord() {
|
|||
},
|
||||
)
|
||||
|
||||
oclient.Receive(
|
||||
oClient.Receive(
|
||||
"initwebrtc",
|
||||
func(resp cws.WSPacket) (req cws.WSPacket) {
|
||||
log.Println("Received relay SDP of a browser from overlord")
|
||||
|
|
@ -73,7 +73,7 @@ func (h *Handler) RouteOverlord() {
|
|||
},
|
||||
)
|
||||
|
||||
oclient.Receive(
|
||||
oClient.Receive(
|
||||
"start",
|
||||
func(resp cws.WSPacket) (req cws.WSPacket) {
|
||||
log.Println("Received a start request from overlord")
|
||||
|
|
@ -93,7 +93,7 @@ func (h *Handler) RouteOverlord() {
|
|||
},
|
||||
)
|
||||
|
||||
oclient.Receive(
|
||||
oClient.Receive(
|
||||
"quit",
|
||||
func(resp cws.WSPacket) (req cws.WSPacket) {
|
||||
log.Println("Received a quit request from overlord")
|
||||
|
|
@ -111,7 +111,52 @@ func (h *Handler) RouteOverlord() {
|
|||
},
|
||||
)
|
||||
|
||||
oclient.Receive(
|
||||
oClient.Receive(
|
||||
"save",
|
||||
func(resp cws.WSPacket) (req cws.WSPacket) {
|
||||
log.Println("Received a save game from overlord")
|
||||
log.Println("RoomID:", resp.RoomID)
|
||||
req.ID = "save"
|
||||
req.Data = "ok"
|
||||
if resp.RoomID != "" {
|
||||
room := h.getRoom(resp.RoomID)
|
||||
if room == nil {
|
||||
return
|
||||
}
|
||||
err := room.SaveGame()
|
||||
if err != nil {
|
||||
log.Println("[!] Cannot save game state: ", err)
|
||||
req.Data = "error"
|
||||
}
|
||||
} else {
|
||||
req.Data = "error"
|
||||
}
|
||||
|
||||
return req
|
||||
})
|
||||
|
||||
oClient.Receive(
|
||||
"load",
|
||||
func(resp cws.WSPacket) (req cws.WSPacket) {
|
||||
log.Println("Received a load game from overlord")
|
||||
log.Println("Loading game state")
|
||||
req.ID = "load"
|
||||
req.Data = "ok"
|
||||
if resp.RoomID != "" {
|
||||
room := h.getRoom(resp.RoomID)
|
||||
err := room.LoadGame()
|
||||
if err != nil {
|
||||
log.Println("[!] Cannot load game state: ", err)
|
||||
req.Data = "error"
|
||||
}
|
||||
} else {
|
||||
req.Data = "error"
|
||||
}
|
||||
|
||||
return req
|
||||
})
|
||||
|
||||
oClient.Receive(
|
||||
"terminateSession",
|
||||
func(resp cws.WSPacket) (req cws.WSPacket) {
|
||||
log.Println("Received a terminate session ", resp.SessionID)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue