示例#1
0
文件: main.go 项目: kienhung/gohome
func apiHeatingStatus(w http.ResponseWriter, r *http.Request) {
	w.Header().Add("Content-Type", "application/json; charset=utf-8")
	ch := services.QueryChannel("heating/status", 100*time.Millisecond)
	ev := <-ch
	ret := ev.Fields["json"]
	jsonResponse(w, ret)
}
示例#2
0
文件: main.go 项目: kienhung/gohome
func query(endpoint string, q string, timeout int64, responses int64, w http.ResponseWriter) {
	w.Header().Add("Content-Type", "application/json; charset=utf-8")

	ch := services.QueryChannel(endpoint+" "+q, time.Duration(timeout)*time.Millisecond)

	var n int64 = 0
	for ev := range ch {
		fmt.Fprintf(w, ev.String()+"\r\n")
		w.(http.Flusher).Flush()
		n++
		if n >= responses {
			break
		}
	}
}
示例#3
0
文件: main.go 项目: kienhung/gohome
func slacker(rtm *slack.RTM) {
	go rtm.ManageConnection()

	greeted := false
	userId := ""
Loop:
	for {
		select {
		case msg := <-rtm.IncomingEvents:
			switch event := msg.Data.(type) {
			case *slack.ConnectedEvent:
				// say hello in the first channel we're in
				if len(event.Info.Channels) > 0 {
					if !greeted {
						channel := event.Info.Channels[0]
						rtm.SendMessage(rtm.NewOutgoingMessage("gohome bot reporting for duty!", channel.ID))
					}
					greeted = true
				}
				// remember our id
				userId = event.Info.User.ID

			case *slack.MessageEvent:
				if event.User == userId || event.BotID != "" {
					// ignore messages from self or bots
					continue
				}
				// send the message as a query
				log.Println("Querying:", event.Text)
				ch := services.QueryChannel(event.Text, time.Duration(5)*time.Second)

				gotResponse := false
				for ev := range ch {
					// send back responses
					message := ev.StringField("message")
					if message == "" {
						message = ev.String()
					}
					rtm.SendMessage(rtm.NewOutgoingMessage(message, event.Channel))
					gotResponse = true
				}

				if !gotResponse {
					rtm.SendMessage(rtm.NewOutgoingMessage("Sorry, nothing answered!", event.Channel))
				}

			case *slack.RTMError:
				fmt.Printf("Error: %s\n", event.Error())

			case *slack.InvalidAuthEvent:
				fmt.Printf("Invalid credentials")
				break Loop

			default:
				// Ignore other events..
				// case *slack.HelloEvent:
				// case *slack.PresenceChangeEvent:
				// case *slack.LatencyReport:
				// fmt.Printf("Unexpected: %v\n", msg.Data)
			}
		}
	}
}