Skip to content

Commit 17dee0e

Browse files
committed
keep rooms open for a while when everyone disconnects
1 parent 2882887 commit 17dee0e

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

serve/game.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ import (
1212
"gopkg.in/edn.v1"
1313
)
1414

15+
const (
16+
closeDelay = 30 * time.Second
17+
)
18+
1519
func init() {
1620
rand.Seed(time.Now().UTC().UnixNano())
1721
}
@@ -59,9 +63,25 @@ func (rs *Rooms) release(game, room string) {
5963
}
6064
rm.count -= 1
6165
if rm.count <= 0 {
62-
delete(rs.rooms, key)
63-
rm.close()
66+
go rs.maybeClose(key)
67+
}
68+
}
69+
70+
// maybeClose closes an empty room after a delay,
71+
// assuming it is still empty (or accidentally again empty).
72+
func (rs *Rooms) maybeClose(key [2]string) {
73+
time.Sleep(closeDelay)
74+
rs.mu.Lock()
75+
defer rs.mu.Unlock()
76+
rm := rs.rooms[key]
77+
if rm == nil {
78+
return
79+
}
80+
if rm.count > 0 {
81+
return
6482
}
83+
delete(rs.rooms, key)
84+
rm.close()
6585
}
6686

6787
type Room struct {

0 commit comments

Comments
 (0)