Skip to content

Commit 2eec771

Browse files
authored
[patch] refactored SSE to cleanup and organize better (#55)
1 parent b6d2a2c commit 2eec771

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

extensions/sse/client.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,20 @@ func (cs *Clients) listener(events <-chan event) {
6767
ev.Response <- &eventResponse{
6868
Clients: copied,
6969
}
70+
7071
case eTypeRemoveClient:
72+
cli := cs.clients[ev.ClientID]
73+
if cli == nil {
74+
ev.Response <- nil
75+
return
76+
}
77+
78+
close(cli.Msg)
79+
cli.Ctx.Done()
80+
7181
delete(cs.clients, ev.ClientID)
7282
ev.Response <- nil
83+
7384
case eTypeClient:
7485
ev.Response <- &eventResponse{
7586
Client: cs.clients[ev.ClientID],
@@ -86,6 +97,7 @@ func (cs *Clients) New(ctx context.Context, w http.ResponseWriter, clientID stri
8697
ResponseWriter: w,
8798
Ctx: ctx,
8899
}
100+
89101
cs.events <- event{
90102
Type: eTypeNewClient,
91103
Client: cli,
@@ -149,11 +161,12 @@ func (cs *Clients) Client(clientID string) *Client {
149161
}
150162

151163
func NewClientManager() ClientManager {
152-
events := make(chan event, 10)
164+
const buffer = 10
165+
events := make(chan event, buffer)
153166
cli := &Clients{
154167
clients: make(map[string]*Client),
155168
events: events,
156-
MsgBuffer: 10,
169+
MsgBuffer: buffer,
157170
}
158171
go cli.listener(events)
159172
return cli

extensions/sse/sse.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ type SSE struct {
2424

2525
// OnSend is a hook, which is called *after* a message is sent to a client
2626
OnSend func(ctx context.Context, client *Client, err error)
27-
// BeforeSend is a hook, which is called right before a message is sent to a client
27+
// BeforeSend is a hook, which is called before starting to listen for messages to send
2828
BeforeSend func(ctx context.Context, client *Client)
2929

3030
Clients ClientManager
@@ -101,12 +101,6 @@ func (sse *SSE) ActiveClients() int {
101101
}
102102

103103
func (sse *SSE) RemoveClient(ctx context.Context, clientID string) {
104-
cli := sse.Clients.Client(clientID)
105-
if cli != nil {
106-
close(cli.Msg)
107-
cli.Ctx.Done()
108-
}
109-
110104
sse.OnRemoveClient(
111105
ctx,
112106
clientID,

0 commit comments

Comments
 (0)