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 {