From 1adcfb55cb82e3ce953f0ca3501c9a50e1bafdfc Mon Sep 17 00:00:00 2001 From: giongto35 Date: Wed, 23 Oct 2019 03:49:25 +0800 Subject: [PATCH] Save room to online storage when the room is closed (#122) * save game when room end * Only save room when there is existed room --- pkg/worker/room/room.go | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/pkg/worker/room/room.go b/pkg/worker/room/room.go index 8d620c1f..5751e9ba 100644 --- a/pkg/worker/room/room.go +++ b/pkg/worker/room/room.go @@ -253,8 +253,13 @@ func (r *Room) Close() { } r.IsRunning = false - log.Println("Closing room", r.ID) - log.Println("Closing director of room ", r.ID) + log.Println("Closing room and director of room ", r.ID) + + // Save game before quit. Only save for game which was previous saved to avoid flooding database + if r.isRoomExisted() { + log.Println("Saved Game before closing room") + r.SaveGame() + } r.director.Close() log.Println("Closing input of room ", r.ID) close(r.inputChannel) @@ -265,6 +270,22 @@ func (r *Room) Close() { //close(r.audioChannel) } +func (r *Room) isRoomExisted() bool { + // Check if room is in online storage + _, err := r.onlineStorage.LoadFile(r.ID) + if err == nil { + return true + } + + // Check if room is in local + savepath := util.GetSavePath(r.ID) + if r.isGameOnLocal(savepath) { + return true + } + + return false +} + // SaveGame will save game to local and trigger a callback to store game on onlineStorage, so the game can be accessed later func (r *Room) SaveGame() error { onlineSaveFunc := func() error {