Stop message handler goroutine when connection closes
This commit is contained in:
parent
e55760a1a5
commit
f497e248f1
@ -62,6 +62,7 @@ type IRC struct {
|
|||||||
reader *bufio.Reader
|
reader *bufio.Reader
|
||||||
out chan string
|
out chan string
|
||||||
ready sync.WaitGroup
|
ready sync.WaitGroup
|
||||||
|
once sync.Once
|
||||||
nick string
|
nick string
|
||||||
nickLock sync.Mutex
|
nickLock sync.Mutex
|
||||||
|
|
||||||
@ -247,22 +248,23 @@ func (i *IRC) recv() {
|
|||||||
msg := parseMessage(line)
|
msg := parseMessage(line)
|
||||||
msg.Prefix = parseUser(msg.Prefix)
|
msg.Prefix = parseUser(msg.Prefix)
|
||||||
|
|
||||||
|
i.Messages <- msg
|
||||||
|
|
||||||
switch msg.Command {
|
switch msg.Command {
|
||||||
case PING:
|
case PING:
|
||||||
i.write("PONG :" + msg.Trailing)
|
go i.write("PONG :" + msg.Trailing)
|
||||||
|
|
||||||
case RPL_WELCOME:
|
case RPL_WELCOME:
|
||||||
i.ready.Done()
|
i.once.Do(i.ready.Done)
|
||||||
}
|
}
|
||||||
|
|
||||||
i.Messages <- msg
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *IRC) close() {
|
func (i *IRC) close() {
|
||||||
i.conn.Close()
|
i.conn.Close()
|
||||||
i.ready.Done()
|
i.once.Do(i.ready.Done)
|
||||||
close(i.out)
|
close(i.out)
|
||||||
|
close(i.Messages)
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseMessage(line string) *Message {
|
func parseMessage(line string) *Message {
|
||||||
|
@ -12,7 +12,12 @@ func handleMessages(irc *IRC, session *Session) {
|
|||||||
userBuffers := make(map[string][]string)
|
userBuffers := make(map[string][]string)
|
||||||
var motd MOTD
|
var motd MOTD
|
||||||
|
|
||||||
for msg := range irc.Messages {
|
for {
|
||||||
|
msg, ok := <-irc.Messages
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
switch msg.Command {
|
switch msg.Command {
|
||||||
case NICK:
|
case NICK:
|
||||||
session.sendJSON("nick", Nick{
|
session.sendJSON("nick", Nick{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user