mirror of
https://github.com/gin-gonic/gin.git
synced 2026-06-13 00:59:29 +08:00
Compare commits
2 Commits
1dbcfca2bc
...
46c4d7ccf1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
46c4d7ccf1 | ||
|
|
2591a34c1d |
@ -1314,10 +1314,9 @@ func (c *Context) SSEvent(name string, message any) {
|
||||
// indicates "Is client disconnected in middle of stream"
|
||||
func (c *Context) Stream(step func(w io.Writer) bool) bool {
|
||||
w := c.Writer
|
||||
clientGone := w.CloseNotify()
|
||||
for {
|
||||
select {
|
||||
case <-clientGone:
|
||||
case <-c.Request.Context().Done():
|
||||
return true
|
||||
default:
|
||||
keepOpen := step(w)
|
||||
|
||||
@ -2974,10 +2974,6 @@ func (r *TestResponseRecorder) CloseNotify() <-chan bool {
|
||||
return r.closeChannel
|
||||
}
|
||||
|
||||
func (r *TestResponseRecorder) closeClient() {
|
||||
r.closeChannel <- true
|
||||
}
|
||||
|
||||
func CreateTestResponseRecorder() *TestResponseRecorder {
|
||||
return &TestResponseRecorder{
|
||||
httptest.NewRecorder(),
|
||||
@ -2988,6 +2984,7 @@ func CreateTestResponseRecorder() *TestResponseRecorder {
|
||||
func TestContextStream(t *testing.T) {
|
||||
w := CreateTestResponseRecorder()
|
||||
c, _ := CreateTestContext(w)
|
||||
c.Request, _ = http.NewRequest(http.MethodGet, "", nil)
|
||||
|
||||
stopStream := true
|
||||
c.Stream(func(w io.Writer) bool {
|
||||
@ -3007,10 +3004,12 @@ func TestContextStream(t *testing.T) {
|
||||
func TestContextStreamWithClientGone(t *testing.T) {
|
||||
w := CreateTestResponseRecorder()
|
||||
c, _ := CreateTestContext(w)
|
||||
done, cancel := context.WithCancel(context.Background())
|
||||
c.Request, _ = http.NewRequestWithContext(done, http.MethodGet, "", nil)
|
||||
|
||||
c.Stream(func(writer io.Writer) bool {
|
||||
defer func() {
|
||||
w.closeClient()
|
||||
cancel()
|
||||
}()
|
||||
|
||||
_, err := writer.Write([]byte("test"))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user