Merge pull request #22 from crosbymichael/onclose

Add onclose func
This commit is contained in:
Stephen Day 2018-02-05 14:44:48 -08:00 committed by GitHub
commit d452837986
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -27,18 +27,20 @@ type Client struct {
closed chan struct{} closed chan struct{}
closeOnce sync.Once closeOnce sync.Once
closeFunc func()
done chan struct{} done chan struct{}
err error err error
} }
func NewClient(conn net.Conn) *Client { func NewClient(conn net.Conn) *Client {
c := &Client{ c := &Client{
codec: codec{}, codec: codec{},
conn: conn, conn: conn,
channel: newChannel(conn), channel: newChannel(conn),
calls: make(chan *callRequest), calls: make(chan *callRequest),
closed: make(chan struct{}), closed: make(chan struct{}),
done: make(chan struct{}), done: make(chan struct{}),
closeFunc: func() {},
} }
go c.run() go c.run()
@ -113,6 +115,11 @@ func (c *Client) Close() error {
return nil return nil
} }
// OnClose allows a close func to be called when the server is closed
func (c *Client) OnClose(closer func()) {
c.closeFunc = closer
}
type message struct { type message struct {
messageHeader messageHeader
p []byte p []byte
@ -158,6 +165,7 @@ func (c *Client) run() {
defer c.conn.Close() defer c.conn.Close()
defer close(c.done) defer close(c.done)
defer c.closeFunc()
for { for {
select { select {