Close room signal overlord (#140)

This commit is contained in:
giongto35 2019-11-26 23:06:22 +08:00 committed by GitHub
parent 3bd63fdc2c
commit e8fbd28b2f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 2 deletions

View file

@ -17,16 +17,29 @@ type WorkerClient struct {
// RouteWorker are all routes server received from worker
func (o *Server) RouteWorker(workerClient *WorkerClient) {
// registerRoom event from a server, when server created a new room.
// registerRoom event from a worker, when worker created a new room.
// RoomID is global so it is managed by overlord.
workerClient.Receive("registerRoom", func(resp cws.WSPacket) cws.WSPacket {
log.Println("Overlord: Received registerRoom ", resp.Data, workerClient.ServerID)
log.Printf("Overlord: Received registerRoom room %s from worker %s", resp.Data, workerClient.ServerID)
o.roomToServer[resp.Data] = workerClient.ServerID
log.Printf("Overlord: Current room list is: %+v", o.roomToServer)
return cws.WSPacket{
ID: "registerRoom",
}
})
// closeRoom event from a worker, when worker close a room
workerClient.Receive("closeRoom", func(resp cws.WSPacket) cws.WSPacket {
log.Printf("Overlord: Received closeRoom room %s from worker %s", resp.Data, workerClient.ServerID)
delete(o.roomToServer, resp.Data)
log.Printf("Overlord: Current room list is: %+v", o.roomToServer)
return cws.WSPacket{
ID: "closeRoom",
}
})
// getRoom returns the server ID based on requested roomID.
workerClient.Receive("getRoom", func(resp cws.WSPacket) cws.WSPacket {
log.Println("Overlord: Received a getroom request")

View file

@ -229,6 +229,11 @@ func (h *Handler) startGameHandler(gameName, roomID string, playerIndex int, pee
go func() {
<-room.Done
h.detachRoom(room.ID)
// send signal to overlord that the room is closed, overlord will remove that room
h.oClient.Send(cws.WSPacket{
ID: "closeRoom",
Data: roomID,
}, nil)
}()
}