コード例 #1
0
ファイル: eventsrv.go プロジェクト: vsysoev/goeventstore
func clientHandler(ctx context.Context, c *wsock.Client, evStore evstore.Connection) {
	var (
		err error
	)
	//	state := make(ScalarState)
	log.Println("clientProcessor Client connected. ", c.Request())
	id := c.Request().FormValue("id")
	tag := c.Request().FormValue("tag")
	_, toWS, doneCh := c.GetChannels()
	if tag != "" {
		err = evStore.Listenner2().Subscribe2(tag, messageHandler)
		if err != nil {
			log.Println("Can't subscribe to evStore", err)
			return
		}
		ctx2 := context.WithValue(ctx, "toWS", toWS)
		ctx3, cancel := context.WithCancel(ctx2)
		defer cancel()
		go evStore.Listenner2().Listen(ctx3, id)
	} else {
		js := wsock.MessageT{}
		js["response"] = "ERROR: No tag to subscribe"
		toWS <- &js
	}

	log.Println("Enter main loop serving client")
Loop:
	for {
		select {
		case <-doneCh:
			log.Println("Client disconnected. Exit goroutine")
			break Loop
		}
	}
	log.Println("Exit clientProcessor")
}