Skip to content

Commit 262bd6e

Browse files
authored
Merge pull request #10 from launchdarkly/eb/ch81268/sse-retry
add optional SSE retry field
2 parents 5eb4489 + 26f711a commit 262bd6e

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

httphelpers/handlers_sse.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ type SSEEvent struct {
1616

1717
// Data is the message data.
1818
Data string
19+
20+
// RetryMillis is an optional field that changes the client's reconnection delay to the specified number
21+
// of milliseconds. If zero or negative, the field will not be sent.
22+
RetryMillis int
1923
}
2024

2125
// Bytes returns the stream data for the event.
@@ -27,6 +31,9 @@ func (e SSEEvent) Bytes() []byte {
2731
if e.Event != "" {
2832
buf.WriteString(fmt.Sprintf("event: %s\n", e.Event))
2933
}
34+
if e.RetryMillis > 0 {
35+
buf.WriteString(fmt.Sprintf("retry: %d\n", e.RetryMillis))
36+
}
3037
buf.WriteString(fmt.Sprintf("data: %s\n\n", e.Data))
3138
return buf.Bytes()
3239
}

httphelpers/handlers_sse_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ import (
1111
)
1212

1313
func TestSSEHandler(t *testing.T) {
14-
initialEvent := SSEEvent{"id1", "event1", "data1"}
14+
initialEvent := SSEEvent{"id1", "event1", "data1", 0}
1515
handler, stream := SSEHandler(&initialEvent)
1616
defer stream.Close()
1717

18-
stream.Enqueue(SSEEvent{"", "event2", "data2"})
18+
stream.Enqueue(SSEEvent{"", "event2", "data2", 0})
1919
stream.EnqueueComment("comment1")
20-
stream.Send(SSEEvent{"", "", "this isn't sent becauset here are no connections"})
20+
stream.Send(SSEEvent{"", "", "this isn't sent because there are no connections", 0})
2121

2222
WithServer(handler, func(server *httptest.Server) {
2323
resp1, err := http.DefaultClient.Get(server.URL)
@@ -28,7 +28,7 @@ func TestSSEHandler(t *testing.T) {
2828
assert.Equal(t, "text/event-stream; charset=utf-8", resp1.Header.Get("Content-Type"))
2929

3030
stream.SendComment("comment2")
31-
stream.Enqueue(SSEEvent{"", "event3", "data3"})
31+
stream.Enqueue(SSEEvent{"", "event3", "data3", 500})
3232
stream.EndAll()
3333

3434
data, err := ioutil.ReadAll(resp1.Body)
@@ -44,6 +44,7 @@ data: data2
4444
:comment1
4545
:comment2
4646
event: event3
47+
retry: 500
4748
data: data3
4849
4950
`, string(data))

0 commit comments

Comments
 (0)