Update save and load

This commit is contained in:
giongto35 2019-05-19 20:00:24 +08:00
parent c42ef403be
commit 4e316fce10
3 changed files with 84 additions and 105 deletions

View file

@ -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

View file

@ -15,4 +15,5 @@ type Session struct {
handler *Server
ServerID string
RoomID string
}

View file

@ -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)