2016-09-30 21:19:47 +00:00
|
|
|
package samechannelgateway
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/42wim/matterbridge/bridge/config"
|
2017-02-17 21:08:30 +00:00
|
|
|
"github.com/42wim/matterbridge/gateway"
|
2016-09-30 21:19:47 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type SameChannelGateway struct {
|
|
|
|
*config.Config
|
2017-02-17 21:08:30 +00:00
|
|
|
MyConfig *config.SameChannelGateway
|
|
|
|
Channels []string
|
|
|
|
Name string
|
2016-09-30 21:19:47 +00:00
|
|
|
}
|
|
|
|
|
2017-02-17 21:08:30 +00:00
|
|
|
func New(cfg *config.Config, gatewayCfg *config.SameChannelGateway) *SameChannelGateway {
|
|
|
|
return &SameChannelGateway{
|
|
|
|
MyConfig: gatewayCfg,
|
|
|
|
Channels: gatewayCfg.Channels,
|
|
|
|
Name: gatewayCfg.Name,
|
|
|
|
Config: cfg}
|
2016-09-30 21:19:47 +00:00
|
|
|
}
|
|
|
|
|
2017-02-17 21:08:30 +00:00
|
|
|
func (sgw *SameChannelGateway) Start() error {
|
|
|
|
gw := gateway.New(sgw.Config, &config.Gateway{Name: sgw.Name})
|
|
|
|
gw.DestChannelFunc = sgw.getDestChannel
|
|
|
|
for _, account := range sgw.MyConfig.Accounts {
|
|
|
|
for _, channel := range sgw.Channels {
|
|
|
|
br := config.Bridge{Account: account, Channel: channel}
|
|
|
|
gw.MyConfig.InOut = append(gw.MyConfig.InOut, br)
|
2016-09-30 21:19:47 +00:00
|
|
|
}
|
|
|
|
}
|
2017-02-17 21:08:30 +00:00
|
|
|
return gw.Start()
|
2016-09-30 21:19:47 +00:00
|
|
|
}
|
|
|
|
|
2017-02-17 21:08:30 +00:00
|
|
|
func (sgw *SameChannelGateway) validChannel(channel string) bool {
|
|
|
|
for _, c := range sgw.Channels {
|
|
|
|
if c == channel {
|
2017-01-21 20:00:40 +00:00
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2017-02-17 21:08:30 +00:00
|
|
|
func (sgw *SameChannelGateway) getDestChannel(msg *config.Message, dest string) []string {
|
|
|
|
if sgw.validChannel(msg.Channel) {
|
|
|
|
return []string{msg.Channel}
|
2016-11-11 14:23:22 +00:00
|
|
|
}
|
2017-02-17 21:08:30 +00:00
|
|
|
return []string{}
|
2016-11-11 14:23:22 +00:00
|
|
|
}
|