Instead of refcount, close watch channel when we delete client
This commit is contained in:
13
main.go
13
main.go
@@ -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{
|
||||||
|
|||||||
Reference in New Issue
Block a user