entropy/pool.go

51 lines
784 B
Go

package main
import (
"io"
"io/ioutil"
"sync"
"github.com/gorilla/websocket"
)
type Pool struct {
conns *sync.Map //map[string]*websocket.Conn
}
func NewPool() *Pool {
return &Pool{
conns: &sync.Map{}, //map[string]*websocket.Conn{},
}
}
func (p *Pool) Broadcast(mt int, r io.Reader) error {
// io.MultiWriter exists but I like this
b, err := ioutil.ReadAll(r)
if err != nil {
return err
}
n := 1000000
cnt := 0
p.conns.Range(func(k, v interface{}) bool {
k = k.(string)
conn := v.(*websocket.Conn)
cnt += 1
w, err := conn.NextWriter(mt)
if err != nil {
p.conns.Delete(k)
return true
}
defer w.Close()
m, err := w.Write(b)
if err != nil {
p.conns.Delete(k)
return true
}
if m < n {
n = m
}
return true
})
return nil
}