From e8fbd28b2fb3bd8db4b043bfa36e30001ebc30a1 Mon Sep 17 00:00:00 2001 From: giongto35 Date: Tue, 26 Nov 2019 23:06:22 +0800 Subject: [PATCH] Close room signal overlord (#140) --- pkg/overlord/worker.go | 17 +++++++++++++++-- pkg/worker/overlord.go | 5 +++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/pkg/overlord/worker.go b/pkg/overlord/worker.go index ef10464a..e303fc8a 100644 --- a/pkg/overlord/worker.go +++ b/pkg/overlord/worker.go @@ -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") diff --git a/pkg/worker/overlord.go b/pkg/worker/overlord.go index fb3bb370..841a3537 100644 --- a/pkg/worker/overlord.go +++ b/pkg/worker/overlord.go @@ -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) }() }