mirror of
https://github.com/42wim/matterbridge.git
synced 2024-11-25 12:12:05 -08:00
Wait until the welcome message before connection is ok (irc). Fixes #62
This commit is contained in:
parent
4a336a6bba
commit
5249568b8e
@ -2,6 +2,7 @@ package birc
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
|
"fmt"
|
||||||
"github.com/42wim/matterbridge/bridge/config"
|
"github.com/42wim/matterbridge/bridge/config"
|
||||||
log "github.com/Sirupsen/logrus"
|
log "github.com/Sirupsen/logrus"
|
||||||
ircm "github.com/sorcix/irc"
|
ircm "github.com/sorcix/irc"
|
||||||
@ -21,6 +22,7 @@ type Birc struct {
|
|||||||
origin string
|
origin string
|
||||||
protocol string
|
protocol string
|
||||||
Remote chan config.Message
|
Remote chan config.Message
|
||||||
|
connected chan struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
var flog *log.Entry
|
var flog *log.Entry
|
||||||
@ -38,6 +40,7 @@ func New(config config.Protocol, origin string, c chan config.Message) *Birc {
|
|||||||
b.names = make(map[string][]string)
|
b.names = make(map[string][]string)
|
||||||
b.origin = origin
|
b.origin = origin
|
||||||
b.protocol = protocol
|
b.protocol = protocol
|
||||||
|
b.connected = make(chan struct{})
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,9 +73,14 @@ func (b *Birc) Connect() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
flog.Info("Connection succeeded")
|
|
||||||
i.Debug = false
|
|
||||||
b.i = i
|
b.i = i
|
||||||
|
select {
|
||||||
|
case <-b.connected:
|
||||||
|
flog.Info("Connection succeeded")
|
||||||
|
case <-time.After(time.Second * 30):
|
||||||
|
return fmt.Errorf("connection timed out")
|
||||||
|
}
|
||||||
|
i.Debug = false
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,6 +151,8 @@ func (b *Birc) handleNewConnection(event *irc.Event) {
|
|||||||
flog.Debugf("PING/PONG")
|
flog.Debugf("PING/PONG")
|
||||||
})
|
})
|
||||||
i.AddCallback("*", b.handleOther)
|
i.AddCallback("*", b.handleOther)
|
||||||
|
// we are now fully connected
|
||||||
|
b.connected <- struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Birc) handleNotice(event *irc.Event) {
|
func (b *Birc) handleNotice(event *irc.Event) {
|
||||||
|
Loading…
Reference in New Issue
Block a user