Rejoin channels after reconnecting
This commit is contained in:
parent
90b74ee022
commit
875f5fafe3
@ -22,7 +22,8 @@ type Client struct {
|
|||||||
Messages chan *Message
|
Messages chan *Message
|
||||||
ConnectionChanged chan bool
|
ConnectionChanged chan bool
|
||||||
|
|
||||||
nick string
|
nick string
|
||||||
|
channels []string
|
||||||
|
|
||||||
conn net.Conn
|
conn net.Conn
|
||||||
connected bool
|
connected bool
|
||||||
@ -149,3 +150,18 @@ func (c *Client) register() {
|
|||||||
c.writeNick(c.nick)
|
c.writeNick(c.nick)
|
||||||
c.writeUser(c.Username, c.Realname)
|
c.writeUser(c.Username, c.Realname)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) addChannel(channel string) {
|
||||||
|
c.lock.Lock()
|
||||||
|
c.channels = append(c.channels, channel)
|
||||||
|
c.lock.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) flushChannels() {
|
||||||
|
c.lock.Lock()
|
||||||
|
if len(c.channels) > 0 {
|
||||||
|
c.Join(c.channels...)
|
||||||
|
c.channels = []string{}
|
||||||
|
}
|
||||||
|
c.lock.Unlock()
|
||||||
|
}
|
||||||
|
@ -152,3 +152,14 @@ func TestRegister(t *testing.T) {
|
|||||||
assert.Equal(t, "NICK nick\r\n", <-out)
|
assert.Equal(t, "NICK nick\r\n", <-out)
|
||||||
assert.Equal(t, "USER user 0 * :rn\r\n", <-out)
|
assert.Equal(t, "USER user 0 * :rn\r\n", <-out)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFlushChannels(t *testing.T) {
|
||||||
|
c, out := testClientSend()
|
||||||
|
c.addChannel("#chan1")
|
||||||
|
c.flushChannels()
|
||||||
|
assert.Equal(t, <-out, "JOIN #chan1\r\n")
|
||||||
|
c.addChannel("#chan2")
|
||||||
|
c.addChannel("#chan3")
|
||||||
|
c.flushChannels()
|
||||||
|
assert.Equal(t, <-out, "JOIN #chan2,#chan3\r\n")
|
||||||
|
}
|
||||||
|
@ -93,6 +93,8 @@ func (c *Client) tryConnect() {
|
|||||||
err := c.connect()
|
err := c.connect()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
c.backoff.Reset()
|
c.backoff.Reset()
|
||||||
|
|
||||||
|
c.flushChannels()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,6 +181,11 @@ func (c *Client) recv() {
|
|||||||
case Ping:
|
case Ping:
|
||||||
go c.write("PONG :" + msg.Trailing)
|
go c.write("PONG :" + msg.Trailing)
|
||||||
|
|
||||||
|
case Join:
|
||||||
|
if msg.Nick == c.GetNick() {
|
||||||
|
c.addChannel(msg.Params[0])
|
||||||
|
}
|
||||||
|
|
||||||
case ReplyWelcome:
|
case ReplyWelcome:
|
||||||
c.once.Do(c.ready.Done)
|
c.once.Do(c.ready.Done)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user