summaryrefslogtreecommitdiffstats
path: root/gateway/router.go
diff options
context:
space:
mode:
authorWim <wim@42.be>2019-01-18 18:35:31 +0100
committerGitHub <noreply@github.com>2019-01-18 18:35:31 +0100
commitfb713ed91bfb48c0037e489f80be85c54e69953a (patch)
treee82901d1a604b02bbb5e3a2c4712f20e61d0513b /gateway/router.go
parentd99eacc2e1b0deadc7368b35adf0818493fd2fb9 (diff)
downloadmatterbridge-msglm-fb713ed91bfb48c0037e489f80be85c54e69953a.tar.gz
matterbridge-msglm-fb713ed91bfb48c0037e489f80be85c54e69953a.tar.bz2
matterbridge-msglm-fb713ed91bfb48c0037e489f80be85c54e69953a.zip
Add initial support for getting ChannelMember info of all bridges (#678)
* Add initial support for getting ChannelMember info of all bridges. Adds an EventGetChannelMembers event, which gets send every x time to all bridges. Bridges should respond on this event with a Message containing ChannelMembers in the EventGetChannelMembers key in the Extra field. handleEventGetChannelMembers will handle this Message and sets the contained ChannelMembers to the Bridge struct. * Add ChannelMembers support to the slack bridge
Diffstat (limited to 'gateway/router.go')
-rw-r--r--gateway/router.go22
1 files changed, 22 insertions, 0 deletions
diff --git a/gateway/router.go b/gateway/router.go
index a7181b96..d3c33b2a 100644
--- a/gateway/router.go
+++ b/gateway/router.go
@@ -2,6 +2,7 @@ package gateway
import (
"fmt"
+ "sync"
"time"
"github.com/42wim/matterbridge/bridge"
@@ -16,6 +17,7 @@ type Router struct {
Gateways map[string]*Gateway
Message chan config.Message
MattermostPlugin chan config.Message
+ sync.RWMutex
}
func NewRouter(cfg config.Config, bridgeMap map[string]bridge.Factory) (*Router, error) {
@@ -81,6 +83,7 @@ func (r *Router) Start() error {
}
}
go r.handleReceive()
+ go r.updateChannelMembers()
return nil
}
@@ -108,6 +111,7 @@ func (r *Router) getBridge(account string) *bridge.Bridge {
func (r *Router) handleReceive() {
for msg := range r.Message {
msg := msg // scopelint
+ r.handleEventGetChannelMembers(&msg)
r.handleEventFailure(&msg)
r.handleEventRejoinChannels(&msg)
for _, gw := range r.Gateways {
@@ -129,3 +133,21 @@ func (r *Router) handleReceive() {
}
}
}
+
+// updateChannelMembers sends every minute an GetChannelMembers event to all bridges.
+func (r *Router) updateChannelMembers() {
+ // TODO sleep a minute because slack can take a while
+ // fix this by having actually connectionDone events send to the router
+ time.Sleep(time.Minute)
+ for {
+ for _, gw := range r.Gateways {
+ for _, br := range gw.Bridges {
+ flog.Debugf("sending %s to %s", config.EventGetChannelMembers, br.Account)
+ if _, err := br.Send(config.Message{Event: config.EventGetChannelMembers}); err != nil {
+ flog.Errorf("updateChannelMembers: %s", err)
+ }
+ }
+ }
+ time.Sleep(time.Minute)
+ }
+}