8 "golang.org/x/net/websocket"
11 type handlerV0 struct {
15 func (h *handlerV0) debugLogf(ws *websocket.Conn, s string, args ...interface{}) {
16 args = append([]interface{}{ws.Request().RemoteAddr}, args...)
17 debugLogf("%s "+s, args...)
20 func (h *handlerV0) Handle(ws *websocket.Conn, events <-chan *event) {
21 done := make(chan struct{}, 3)
22 queue := make(chan *event, h.QueueSize)
24 subscribed := make(map[string]bool)
26 buf := make([]byte, 2<<20)
28 n, err := ws.Read(buf)
29 h.debugLogf(ws, "received frame: %q", buf[:n])
30 if err != nil || n == len(buf) {
33 msg := make(map[string]interface{})
34 err = json.Unmarshal(buf[:n], &msg)
38 h.debugLogf(ws, "received message: %+v", msg)
39 h.debugLogf(ws, "subscribing to *")
40 subscribed["*"] = true
44 go func(queue <-chan *event) {
45 for e := range queue {
46 detail := e.Detail(nil)
50 // FIXME: check permission
51 buf, err := json.Marshal(map[string]interface{}{
55 "object_uuid": detail.ObjectUUID,
56 "object_owner_uuid": detail.ObjectOwnerUUID,
57 "event_type": detail.EventType,
60 log.Printf("error encoding: ", err)
63 _, err = ws.Write(append(buf, byte('\n')))
65 h.debugLogf(ws, "handlerV0: write: %s", err)
72 send := func(e *event) {
84 for e := range events {
85 detail := e.Detail(nil)
91 case subscribed[detail.ObjectUUID]:
93 case subscribed[detail.ObjectOwnerUUID]: