From 12389d602eecf4adab0e394da19b2b808cb489b1 Mon Sep 17 00:00:00 2001 From: Wim Date: Sun, 4 Sep 2016 20:03:07 +0200 Subject: Add Gitter support --- vendor/github.com/sromku/go-gitter/faye.go | 70 ++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 vendor/github.com/sromku/go-gitter/faye.go (limited to 'vendor/github.com/sromku/go-gitter/faye.go') diff --git a/vendor/github.com/sromku/go-gitter/faye.go b/vendor/github.com/sromku/go-gitter/faye.go new file mode 100644 index 00000000..dcd3e210 --- /dev/null +++ b/vendor/github.com/sromku/go-gitter/faye.go @@ -0,0 +1,70 @@ +package gitter + +import ( + "encoding/json" + "fmt" + + "github.com/mrexodia/wray" +) + +type Faye struct { + endpoint string + Event chan Event + client *wray.FayeClient + gitter *Gitter +} + +func (gitter *Gitter) Faye(roomID string) *Faye { + wray.RegisterTransports([]wray.Transport{ + &wray.HttpTransport{ + SendHook: func(data map[string]interface{}) { + if channel, ok := data["channel"]; ok && channel == "/meta/handshake" { + data["ext"] = map[string]interface{}{"token": gitter.config.token} + } + }, + }, + }) + return &Faye{ + endpoint: "/api/v1/rooms/" + roomID + "/chatMessages", + Event: make(chan Event), + client: wray.NewFayeClient(fayeBaseURL), + gitter: gitter, + } +} + +func (faye *Faye) Listen() { + defer faye.destroy() + + faye.client.Subscribe(faye.endpoint, false, func(message wray.Message) { + dataBytes, err := json.Marshal(message.Data["model"]) + if err != nil { + fmt.Printf("JSON Marshal error: %v\n", err) + return + } + var gitterMessage Message + err = json.Unmarshal(dataBytes, &gitterMessage) + if err != nil { + fmt.Printf("JSON Unmarshal error: %v\n", err) + return + } + faye.Event <- Event{ + Data: &MessageReceived{ + Message: gitterMessage, + }, + } + }) + + //TODO: this might be needed in the future + /*go func() { + for { + faye.client.Publish("/api/v1/ping2", map[string]interface{}{"reason": "ping"}) + time.Sleep(60 * time.Second) + } + }()*/ + + faye.client.Listen() +} + +func (faye *Faye) destroy() { + close(faye.Event) +} -- cgit v1.2.3