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{}
closeOnce sync.Once
closeFunc func()
done chan struct{}
err error
}
func NewClient(conn net.Conn) *Client {
c := &Client{
codec: codec{},
conn: conn,
channel: newChannel(conn),
calls: make(chan *callRequest),
closed: make(chan struct{}),
done: make(chan struct{}),
codec: codec{},
conn: conn,
channel: newChannel(conn),
calls: make(chan *callRequest),
closed: make(chan struct{}),
done: make(chan struct{}),
closeFunc: func() {},
}
go c.run()
@ -113,6 +115,11 @@ func (c *Client) Close() error {
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 {
messageHeader
p []byte
@ -158,6 +165,7 @@ func (c *Client) run() {
defer c.conn.Close()
defer close(c.done)
defer c.closeFunc()
for {
select {