summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/realtime/client.go
diff options
context:
space:
mode:
authorWim <wim@42.be>2019-02-10 17:00:11 +0100
committerWim <wim@42.be>2019-02-15 18:19:34 +0100
commit6ebd5cbbd8a941e0bc5f99f0d8e99cfd1d8ac0d7 (patch)
tree47070e58e7802afd80fce53f0048a87a014a7c0d /vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/realtime/client.go
parent2cfd880cdb0df29771bf8f31df8d990ab897889d (diff)
downloadmatterbridge-msglm-6ebd5cbbd8a941e0bc5f99f0d8e99cfd1d8ac0d7.tar.gz
matterbridge-msglm-6ebd5cbbd8a941e0bc5f99f0d8e99cfd1d8ac0d7.tar.bz2
matterbridge-msglm-6ebd5cbbd8a941e0bc5f99f0d8e99cfd1d8ac0d7.zip
Refactor and update RocketChat bridge
* Add support for editing/deleting messages * Add support for uploading files * Add support for avatars * Use the Rocket.Chat.Go.SDK * Use the rest and streaming api
Diffstat (limited to 'vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/realtime/client.go')
-rw-r--r--vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/realtime/client.go96
1 files changed, 96 insertions, 0 deletions
diff --git a/vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/realtime/client.go b/vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/realtime/client.go
new file mode 100644
index 00000000..1dde80bf
--- /dev/null
+++ b/vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/realtime/client.go
@@ -0,0 +1,96 @@
+// Provides access to Rocket.Chat's realtime API via ddp
+package realtime
+
+import (
+ "fmt"
+ "math/rand"
+ "net/url"
+ "strconv"
+ "time"
+
+ "github.com/gopackage/ddp"
+)
+
+type Client struct {
+ ddp *ddp.Client
+}
+
+// Creates a new instance and connects to the websocket.
+func NewClient(serverURL *url.URL, debug bool) (*Client, error) {
+ rand.Seed(time.Now().UTC().UnixNano())
+
+ wsURL := "ws"
+ port := 80
+
+ if serverURL.Scheme == "https" {
+ wsURL = "wss"
+ port = 443
+ }
+
+ if len(serverURL.Port()) > 0 {
+ port, _ = strconv.Atoi(serverURL.Port())
+ }
+
+ wsURL = fmt.Sprintf("%s://%v:%v%s/websocket", wsURL, serverURL.Hostname(), port, serverURL.Path)
+
+ // log.Println("About to connect to:", wsURL, port, serverURL.Scheme)
+
+ c := new(Client)
+ c.ddp = ddp.NewClient(wsURL, serverURL.String())
+
+ if debug {
+ c.ddp.SetSocketLogActive(true)
+ }
+
+ if err := c.ddp.Connect(); err != nil {
+ return nil, err
+ }
+
+ return c, nil
+}
+
+type statusListener struct {
+ listener func(int)
+}
+
+func (s statusListener) Status(status int) {
+ s.listener(status)
+}
+
+func (c *Client) AddStatusListener(listener func(int)) {
+ c.ddp.AddStatusListener(statusListener{listener: listener})
+}
+
+func (c *Client) Reconnect() {
+ c.ddp.Reconnect()
+}
+
+// ConnectionAway sets connection status to away
+func (c *Client) ConnectionAway() error {
+ _, err := c.ddp.Call("UserPresence:away")
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// ConnectionOnline sets connection status to online
+func (c *Client) ConnectionOnline() error {
+ _, err := c.ddp.Call("UserPresence:online")
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// Close closes the ddp session
+func (c *Client) Close() {
+ c.ddp.Close()
+}
+
+// Some of the rocketchat objects need unique IDs specified by the client
+func (c *Client) newRandomId() string {
+ return fmt.Sprintf("%f", rand.Float64())
+}