Instead of refcount, close watch channel when we delete client

This commit is contained in:
Ian Gulliver
2020-11-25 22:03:43 +00:00
parent 462159c606
commit d5bfc59ab8

13
main.go
View File

@@ -176,7 +176,7 @@ func scan() {
mu.Lock() mu.Lock()
defer mu.Unlock() defer mu.Unlock()
grace := 30 * time.Second grace := 10 * time.Second
for _, rm := range roomById { for _, rm := range roomById {
for _, c := range rm.clientById { for _, c := range rm.clientById {
@@ -351,7 +351,7 @@ func present(w http.ResponseWriter, r *http.Request) {
} }
closeChan := w.(http.CloseNotifier).CloseNotify() closeChan := w.(http.CloseNotifier).CloseNotify()
ticker := time.NewTicker(15 * time.Second) ticker := time.NewTicker(5 * time.Second)
for { for {
select { select {
@@ -424,11 +424,8 @@ func watch(w http.ResponseWriter, r *http.Request) {
return return
} }
// TODO: refcount client so it stays alive from just a watch
// add in registerwatch, sub in defer here
closeChan := w.(http.CloseNotifier).CloseNotify() closeChan := w.(http.CloseNotifier).CloseNotify()
ticker := time.NewTicker(15 * time.Second) ticker := time.NewTicker(5 * time.Second)
writeInitial(client, w, flusher) writeInitial(client, w, flusher)
@@ -463,6 +460,10 @@ func (c *client) sendEvent(e *event) {
} }
func (c *client) remove() { func (c *client) remove() {
if c.eventChan != nil {
close(c.eventChan)
}
delete(c.room.clientById, c.ClientId) delete(c.room.clientById, c.ClientId)
c.room.sendAdminEvent(&adminEvent{ c.room.sendAdminEvent(&adminEvent{