func Setup(r pork.Router, ctx *context.Context) error { var h hub h.start() hand := sockjs.NewHandler("/api/sock", sockjs.DefaultOptions, func(s sockjs.Session) { sess, err := authenticate(s, ctx) if err != nil { accessDenied(s) return } user, err := sess.User(ctx) if err != nil { accessDenied(s) return } h.enter(s, user) defer h.leave(s, user) for { msg, err := s.Recv() if err != nil { log.Printf("recv: %s", err) return } if err := h.dispatch(s, user, msg); err != nil { log.Printf("disp: %s", err) return } } }) r.RespondWith("/api/sock/", pork.ResponderFor(hand)) return nil }