From a16ad8bf3b39d99658f306d3c065680c606e4801 Mon Sep 17 00:00:00 2001 From: Wim Date: Sat, 1 Apr 2017 17:24:19 +0200 Subject: Reuse connection when using same bridge with another gateway. See #87 --- bridge/bridge.go | 7 ++++--- bridge/config/config.go | 19 +++++++++++-------- bridge/irc/irc.go | 3 ++- 3 files changed, 17 insertions(+), 12 deletions(-) (limited to 'bridge') diff --git a/bridge/bridge.go b/bridge/bridge.go index 022e6a98..1d377951 100644 --- a/bridge/bridge.go +++ b/bridge/bridge.go @@ -31,6 +31,7 @@ type Bridge struct { Account string Protocol string Channels map[string]config.ChannelInfo + Joined map[string]bool } func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Bridge { @@ -42,6 +43,7 @@ func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Brid b.Name = name b.Protocol = protocol b.Account = bridge.Account + b.Joined = make(map[string]bool) // override config from environment config.OverrideCfgFromEnv(cfg, protocol, name) @@ -81,8 +83,7 @@ func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Brid } func (b *Bridge) JoinChannels() error { - exists := make(map[string]bool) - err := b.joinChannels(b.Channels, exists) + err := b.joinChannels(b.Channels, b.Joined) if err != nil { return err } @@ -94,7 +95,7 @@ func (b *Bridge) joinChannels(channels map[string]config.ChannelInfo, exists map for ID, channel := range channels { if !exists[ID] { mychannel = channel.Name - log.Infof("%s: joining %s %s", b.Account, channel.Name, ID) + log.Infof("%s: joining %s (%s)", b.Account, channel.Name, ID) if b.Protocol == "irc" && channel.Options.Key != "" { log.Debugf("using key %s for channel %s", channel.Options.Key, channel.Name) mychannel = mychannel + " " + channel.Options.Key diff --git a/bridge/config/config.go b/bridge/config/config.go index f48da10f..564ebddb 100644 --- a/bridge/config/config.go +++ b/bridge/config/config.go @@ -26,11 +26,13 @@ type Message struct { } type ChannelInfo struct { - Name string - Account string - Direction string - ID string - Options ChannelOptions + Name string + Account string + Direction string + ID string + GID map[string]bool + SameChannel map[string]bool + Options ChannelOptions } type Protocol struct { @@ -71,9 +73,10 @@ type ChannelOptions struct { } type Bridge struct { - Account string - Channel string - Options ChannelOptions + Account string + Channel string + Options ChannelOptions + SameChannel bool } type Gateway struct { diff --git a/bridge/irc/irc.go b/bridge/irc/irc.go index db430800..78ba2e54 100644 --- a/bridge/irc/irc.go +++ b/bridge/irc/irc.go @@ -60,6 +60,7 @@ func (b *Birc) Command(msg *config.Message) string { } func (b *Birc) Connect() error { + flog.Info("hier?") b.Local = make(chan config.Message, b.Config.MessageQueue+10) flog.Infof("Connecting %s", b.Config.Server) i := irc.IRC(b.Config.Nick, b.Config.Nick) @@ -92,7 +93,7 @@ func (b *Birc) Connect() error { } func (b *Birc) Disconnect() error { - b.i.Disconnect() + //b.i.Disconnect() close(b.Local) return nil } -- cgit v1.2.3