@@ -18,6 +18,11 @@ type HandlerConfig func(h Handler) error
18
18
// in the socket.
19
19
type MountHandler func (ctx context.Context , c Socket ) (interface {}, error )
20
20
21
+ // UnmountHandler the func that is called by a handler to report that a connection
22
+ // is closed. This is called on websocket close. Can be used to track number of
23
+ // connected users.
24
+ type UnmountHandler func (c Socket ) error
25
+
21
26
// RenderHandler the func that is called to render the current state of the
22
27
// data for the socket.
23
28
type RenderHandler func (ctx context.Context , rc * RenderContext ) (io.Reader , error )
@@ -39,6 +44,8 @@ type Handler interface {
39
44
// HandleMount handles initial setup on first request, and then later when
40
45
// the socket first connets.
41
46
HandleMount (handler MountHandler )
47
+ // HandleUnmount used to track webcocket disconnections.
48
+ HandleUnmount (handler UnmountHandler )
42
49
// HandleRender used to set the render method for the handler.
43
50
HandleRender (handler RenderHandler )
44
51
// HandleError for when an error occurs.
@@ -54,6 +61,7 @@ type Handler interface {
54
61
HandleParams (handler EventHandler )
55
62
56
63
getMount () MountHandler
64
+ getUnmount () UnmountHandler
57
65
getRender () RenderHandler
58
66
getError () ErrorHandler
59
67
getEvent (t string ) (EventHandler , error )
@@ -67,6 +75,8 @@ type BaseHandler struct {
67
75
// is called on initial GET request and later when the websocket connects.
68
76
// Data to render the handler should be fetched here and returned.
69
77
mountHandler MountHandler
78
+ // unmountHandler used to track webcocket disconnections.
79
+ unmountHandler UnmountHandler
70
80
// Render is called to generate the HTML of a Socket. It is defined
71
81
// by default and will render any template provided.
72
82
renderHandler RenderHandler
@@ -90,6 +100,9 @@ func NewHandler(configs ...HandlerConfig) *BaseHandler {
90
100
mountHandler : func (ctx context.Context , s Socket ) (interface {}, error ) {
91
101
return nil , nil
92
102
},
103
+ unmountHandler : func (s Socket ) error {
104
+ return nil
105
+ },
93
106
renderHandler : func (ctx context.Context , rc * RenderContext ) (io.Reader , error ) {
94
107
return nil , ErrNoRenderer
95
108
},
@@ -112,6 +125,9 @@ func NewHandler(configs ...HandlerConfig) *BaseHandler {
112
125
func (h * BaseHandler ) HandleMount (f MountHandler ) {
113
126
h .mountHandler = f
114
127
}
128
+ func (h * BaseHandler ) HandleUnmount (f UnmountHandler ) {
129
+ h .unmountHandler = f
130
+ }
115
131
func (h * BaseHandler ) HandleRender (f RenderHandler ) {
116
132
h .renderHandler = f
117
133
}
@@ -140,6 +156,9 @@ func (h *BaseHandler) HandleParams(handler EventHandler) {
140
156
func (h * BaseHandler ) getMount () MountHandler {
141
157
return h .mountHandler
142
158
}
159
+ func (h * BaseHandler ) getUnmount () UnmountHandler {
160
+ return h .unmountHandler
161
+ }
143
162
func (h * BaseHandler ) getRender () RenderHandler {
144
163
return h .renderHandler
145
164
}
0 commit comments