Simplify channel closing ordering
This commit is contained in:
parent
cd4faa7dd6
commit
493dc78a24
20
client.go
20
client.go
@ -47,7 +47,7 @@ type Client struct {
|
|||||||
away *string
|
away *string
|
||||||
recvTimestamp time.Time
|
recvTimestamp time.Time
|
||||||
sendTimestamp time.Time
|
sendTimestamp time.Time
|
||||||
outBuf chan string
|
outBuf chan *string
|
||||||
alive bool
|
alive bool
|
||||||
sync.Mutex
|
sync.Mutex
|
||||||
}
|
}
|
||||||
@ -77,20 +77,19 @@ func NewClient(conn *proxyproto.Conn) *Client {
|
|||||||
recvTimestamp: time.Now(),
|
recvTimestamp: time.Now(),
|
||||||
sendTimestamp: time.Now(),
|
sendTimestamp: time.Now(),
|
||||||
alive: true,
|
alive: true,
|
||||||
outBuf: make(chan string, MaxOutBuf),
|
outBuf: make(chan *string, MaxOutBuf),
|
||||||
}
|
}
|
||||||
go c.MsgSender()
|
go c.MsgSender()
|
||||||
return &c
|
return &c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) SetDead() {
|
func (c *Client) SetDead() {
|
||||||
close(c.outBuf)
|
c.outBuf <- nil
|
||||||
c.alive = false
|
c.alive = false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) Close() {
|
func (c *Client) Close() {
|
||||||
c.Lock()
|
c.Lock()
|
||||||
c.conn.Close()
|
|
||||||
if c.alive {
|
if c.alive {
|
||||||
c.SetDead()
|
c.SetDead()
|
||||||
}
|
}
|
||||||
@ -134,7 +133,11 @@ func (c *Client) Processor(sink chan ClientEvent) {
|
|||||||
|
|
||||||
func (c *Client) MsgSender() {
|
func (c *Client) MsgSender() {
|
||||||
for msg := range c.outBuf {
|
for msg := range c.outBuf {
|
||||||
c.conn.Write(append([]byte(msg), CRLF...))
|
if msg == nil {
|
||||||
|
c.conn.Close()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
c.conn.Write(append([]byte(*msg), CRLF...))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,11 +150,12 @@ func (c *Client) Msg(text string) {
|
|||||||
}
|
}
|
||||||
if len(c.outBuf) == MaxOutBuf {
|
if len(c.outBuf) == MaxOutBuf {
|
||||||
log.Println(c, "output buffer size exceeded, kicking him")
|
log.Println(c, "output buffer size exceeded, kicking him")
|
||||||
go c.Close()
|
if c.alive {
|
||||||
c.SetDead()
|
c.SetDead()
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.outBuf <- text
|
c.outBuf <- &text
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send message from server. It has ": servername" prefix.
|
// Send message from server. It has ": servername" prefix.
|
||||||
|
Loading…
Reference in New Issue
Block a user