Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0d607c7

Browse files
committed
Return new_topic in open message when a fresh topic is subscribed to
Associated tests
1 parent9bbb1ac commit0d607c7

File tree

2 files changed

+60
-3
lines changed

2 files changed

+60
-3
lines changed

‎server/server.go‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,16 +1218,19 @@ func (s *Server) handleSubscribeHTTP(w http.ResponseWriter, r *http.Request, v *
12181218
}
12191219
ctx,cancel:=context.WithCancel(context.Background())
12201220
defercancel()
1221+
1222+
createdNewTopics:=false
12211223
subscriberIDs:=make([]int,0)
12221224
for_,t:=rangetopics {
1225+
createdNewTopics=createdNewTopics||t.NeverSubscribed()
12231226
subscriberIDs=append(subscriberIDs,t.Subscribe(sub,v.MaybeUserID(),cancel))
12241227
}
12251228
deferfunc() {
12261229
fori,subscriberID:=rangesubscriberIDs {
12271230
topics[i].Unsubscribe(subscriberID)// Order!
12281231
}
12291232
}()
1230-
iferr:=sub(v,newOpenMessage(topicsStr));err!=nil {// Send out open message
1233+
iferr:=sub(v,newOpenMessage(topicsStr,createdNewTopics));err!=nil {// Send out open message
12311234
returnerr
12321235
}
12331236
iferr:=s.sendOldMessages(topics,since,scheduled,v,sub);err!=nil {
@@ -1367,16 +1370,20 @@ func (s *Server) handleSubscribeWS(w http.ResponseWriter, r *http.Request, v *vi
13671370
}
13681371
returns.sendOldMessages(topics,since,scheduled,v,sub)
13691372
}
1373+
1374+
createdNewTopic:=false
13701375
subscriberIDs:=make([]int,0)
13711376
for_,t:=rangetopics {
1377+
createdNewTopic=createdNewTopic||t.NeverSubscribed()
13721378
subscriberIDs=append(subscriberIDs,t.Subscribe(sub,v.MaybeUserID(),cancel))
13731379
}
13741380
deferfunc() {
13751381
fori,subscriberID:=rangesubscriberIDs {
13761382
topics[i].Unsubscribe(subscriberID)// Order!
13771383
}
13781384
}()
1379-
iferr:=sub(v,newOpenMessage(topicsStr));err!=nil {// Send out open message
1385+
1386+
iferr:=sub(v,newOpenMessage(topicsStr,createdNewTopic));err!=nil {// Send out open message
13801387
returnerr
13811388
}
13821389
iferr:=s.sendOldMessages(topics,since,scheduled,v,sub);err!=nil {

‎server/server_test.go‎

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ func TestServer_SubscribeOpenAndKeepalive(t *testing.T) {
136136

137137
require.Equal(t,openEvent,messages[0].Event)
138138
require.Equal(t,"mytopic",messages[0].Topic)
139-
require.Equal(t,"",messages[0].Message)
139+
require.Equal(t,"new_topic",messages[0].Message)
140140
require.Equal(t,"",messages[0].Title)
141141
require.Equal(t,0,messages[0].Priority)
142142
require.Nil(t,messages[0].Tags)
@@ -147,6 +147,56 @@ func TestServer_SubscribeOpenAndKeepalive(t *testing.T) {
147147
require.Equal(t,"",messages[1].Title)
148148
require.Equal(t,0,messages[1].Priority)
149149
require.Nil(t,messages[1].Tags)
150+
151+
// The next time subscribing to the same topic will not result in new_topic on open
152+
rr=httptest.NewRecorder()
153+
ctx,cancel=context.WithCancel(context.Background())
154+
req,err=http.NewRequestWithContext(ctx,"GET","/mytopic/json",nil)
155+
iferr!=nil {
156+
t.Fatal(err)
157+
}
158+
gofunc() {
159+
s.handle(rr,req)
160+
doneChan<-true
161+
}()
162+
time.Sleep(300*time.Millisecond)
163+
cancel()
164+
<-doneChan
165+
166+
messages=toMessages(t,rr.Body.String())
167+
require.Equal(t,1,len(messages))
168+
169+
require.Equal(t,openEvent,messages[0].Event)
170+
require.Equal(t,"mytopic",messages[0].Topic)
171+
require.Equal(t,"",messages[0].Message)
172+
require.Equal(t,"",messages[0].Title)
173+
require.Equal(t,0,messages[0].Priority)
174+
require.Nil(t,messages[0].Tags)
175+
176+
// Subscribing to any new topic again will result in new_topic being sent
177+
rr=httptest.NewRecorder()
178+
ctx,cancel=context.WithCancel(context.Background())
179+
req,err=http.NewRequestWithContext(ctx,"GET","/mytopic,topic2/json",nil)
180+
iferr!=nil {
181+
t.Fatal(err)
182+
}
183+
gofunc() {
184+
s.handle(rr,req)
185+
doneChan<-true
186+
}()
187+
time.Sleep(300*time.Millisecond)
188+
cancel()
189+
<-doneChan
190+
191+
messages=toMessages(t,rr.Body.String())
192+
require.Equal(t,1,len(messages))
193+
194+
require.Equal(t,openEvent,messages[0].Event)
195+
require.Equal(t,"mytopic,topic2",messages[0].Topic)
196+
require.Equal(t,"new_topic",messages[0].Message)
197+
require.Equal(t,"",messages[0].Title)
198+
require.Equal(t,0,messages[0].Priority)
199+
require.Nil(t,messages[0].Tags)
150200
}
151201

152202
funcTestServer_PublishAndSubscribe(t*testing.T) {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp