예제 #1
0
파일: hub.go 프로젝트: kellegous/404
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
}