9 type handlerV0 struct {
13 func (h *handlerV0) debugLogf(ws wsConn, s string, args ...interface{}) {
14 args = append([]interface{}{ws.Request().RemoteAddr}, args...)
15 debugLogf("%s "+s, args...)
18 func (h *handlerV0) Handle(ws wsConn, events <-chan *event) {
19 done := make(chan struct{}, 3)
20 queue := make(chan *event, h.QueueSize)
22 subscribed := make(map[string]bool)
24 buf := make([]byte, 2<<20)
26 n, err := ws.Read(buf)
27 h.debugLogf(ws, "received frame: %q", buf[:n])
28 if err != nil || n == len(buf) {
31 msg := make(map[string]interface{})
32 err = json.Unmarshal(buf[:n], &msg)
36 h.debugLogf(ws, "received message: %+v", msg)
37 h.debugLogf(ws, "subscribing to *")
38 subscribed["*"] = true
42 go func(queue <-chan *event) {
43 for e := range queue {
44 detail := e.Detail(nil)
48 // FIXME: check permission
49 buf, err := json.Marshal(map[string]interface{}{
53 "object_uuid": detail.ObjectUUID,
54 "object_owner_uuid": detail.ObjectOwnerUUID,
55 "event_type": detail.EventType,
58 log.Printf("error encoding: ", err)
61 _, err = ws.Write(append(buf, byte('\n')))
63 h.debugLogf(ws, "handlerV0: write: %s", err)
70 send := func(e *event) {
82 for e := range events {
83 detail := e.Detail(nil)
89 case subscribed[detail.ObjectUUID]:
91 case subscribed[detail.ObjectOwnerUUID]: