Skip to content

Commit

Permalink
Handle events after initialization use buffered channel (#383)
Browse files Browse the repository at this point in the history
This change is needed for matrix bridge and also makes more sense.
  • Loading branch information
42wim authored Jan 31, 2021
1 parent e98b846 commit 2c3883a
Showing 1 changed file with 12 additions and 9 deletions.
21 changes: 12 additions & 9 deletions mm-go-irckit/userbridge.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ import (
type UserBridge struct {
Srv Server
Credentials bridge.Credentials
br bridge.Bridger //nolint:structcheck
inprogress bool //nolint:structcheck
br bridge.Bridger //nolint:structcheck
inprogress bool //nolint:structcheck
eventChan chan *bridge.Event //nolint:structcheck

lastViewedAtMutex sync.RWMutex //nolint:structcheck
lastViewedAt map[string]int64 //nolint:structcheck
Expand Down Expand Up @@ -57,6 +58,7 @@ func NewUserBridge(c net.Conn, srv Server, cfg *viper.Viper) *User {
u.msgMap = make(map[string]map[string]int)
u.msgCounter = make(map[string]int)
u.updateCounter = make(map[string]time.Time)
u.eventChan = make(chan *bridge.Event, 1000)

// used for login
u.createService("mattermost", "loginservice")
Expand All @@ -65,8 +67,8 @@ func NewUserBridge(c net.Conn, srv Server, cfg *viper.Viper) *User {
return u
}

func (u *User) handleEventChan(events chan *bridge.Event) {
for event := range events {
func (u *User) handleEventChan() {
for event := range u.eventChan {
logger.Tracef("eventchan %s", spew.Sdump(event))
switch e := event.Data.(type) {
case *bridge.ChannelMessageEvent:
Expand Down Expand Up @@ -518,6 +520,9 @@ func (u *User) addUsersToChannels() {
}

close(channels)

// we did all the initialization, now listen for events
go u.handleEventChan()
}

func (u *User) createSpoof(mmchannel *bridge.ChannelInfo) func(string, string) {
Expand Down Expand Up @@ -768,13 +773,11 @@ func (u *User) isValidServer(server, protocol string) bool {
func (u *User) loginTo(protocol string) error {
var err error

eventChan := make(chan *bridge.Event)

switch protocol {
case "slack":
u.br, err = slack.New(u.v, u.Credentials, eventChan, u.addUsersToChannels)
u.br, err = slack.New(u.v, u.Credentials, u.eventChan, u.addUsersToChannels)
case "mattermost":
u.br, _, err = mattermost.New(u.v, u.Credentials, eventChan, u.addUsersToChannels)
u.br, _, err = mattermost.New(u.v, u.Credentials, u.eventChan, u.addUsersToChannels)
}

if err != nil {
Expand All @@ -791,7 +794,7 @@ func (u *User) loginTo(protocol string) error {
u.User = info.User
u.MentionKeys = info.MentionKeys

go u.handleEventChan(eventChan)
go u.handleEventChan()

return nil
}
Expand Down

0 comments on commit 2c3883a

Please sign in to comment.