pubnub 3.7.5 → 3.7.7
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of pubnub might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.txt +6 -0
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/VERSION +1 -0
- data/fixtures/vcr_cassettes/wc-sub-ssl-false-1.yml +126 -0
- data/fixtures/vcr_cassettes/wc-sub-ssl-false-2.yml +86 -0
- data/fixtures/vcr_cassettes/wc-sub-ssl-false-3.yml +212 -0
- data/fixtures/vcr_cassettes/wc-sub-ssl-false-4.yml +168 -0
- data/fixtures/vcr_cassettes/wc-sub-ssl-true-1.yml +126 -0
- data/fixtures/vcr_cassettes/wc-sub-ssl-true-2.yml +86 -0
- data/fixtures/vcr_cassettes/wc-sub-ssl-true-3.yml +212 -0
- data/fixtures/vcr_cassettes/wc-sub-ssl-true-4.yml +168 -0
- data/lib/pubnub/envelope.rb +1 -0
- data/lib/pubnub/event.rb +112 -25
- data/lib/pubnub/events/leave.rb +12 -0
- data/lib/pubnub/events/presence.rb +2 -1
- data/lib/pubnub/events/subscribe.rb +2 -0
- data/lib/pubnub/version.rb +1 -1
- data/spec/lib/integration/wildcard_subscribe_spec.rb +150 -0
- metadata +26 -14
@@ -0,0 +1,168 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://pubsub.pubnub.com/subscribe/ds/foo,foo.*/0/0?channel-group=group&pnsdk=PubNub-Ruby/3.7.5&uuid=rubytests
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- '*/*'
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
Connection:
|
17
|
+
- keep-alive
|
18
|
+
Keep-Alive:
|
19
|
+
- 30
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 200
|
23
|
+
message: OK
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Thu, 23 Jul 2015 15:10:20 GMT
|
27
|
+
Content-Type:
|
28
|
+
- text/javascript; charset="UTF-8"
|
29
|
+
Content-Length:
|
30
|
+
- '30'
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Cache-Control:
|
34
|
+
- no-cache
|
35
|
+
Access-Control-Allow-Origin:
|
36
|
+
- '*'
|
37
|
+
Access-Control-Allow-Methods:
|
38
|
+
- GET
|
39
|
+
body:
|
40
|
+
encoding: UTF-8
|
41
|
+
string: '[[],"14376642203952013","",""]'
|
42
|
+
http_version:
|
43
|
+
recorded_at: Thu, 23 Jul 2015 15:10:20 GMT
|
44
|
+
- request:
|
45
|
+
method: get
|
46
|
+
uri: https://pubsub.pubnub.com/subscribe/ds/foo,foo.*/0/14376642203952013?channel-group=group&pnsdk=PubNub-Ruby/3.7.5&uuid=rubytests
|
47
|
+
body:
|
48
|
+
encoding: US-ASCII
|
49
|
+
string: ''
|
50
|
+
headers:
|
51
|
+
Accept-Encoding:
|
52
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
53
|
+
Accept:
|
54
|
+
- '*/*'
|
55
|
+
User-Agent:
|
56
|
+
- Ruby
|
57
|
+
Connection:
|
58
|
+
- keep-alive
|
59
|
+
Keep-Alive:
|
60
|
+
- 30
|
61
|
+
response:
|
62
|
+
status:
|
63
|
+
code: 200
|
64
|
+
message: OK
|
65
|
+
headers:
|
66
|
+
Date:
|
67
|
+
- Thu, 23 Jul 2015 15:10:24 GMT
|
68
|
+
Content-Type:
|
69
|
+
- text/javascript; charset="UTF-8"
|
70
|
+
Content-Length:
|
71
|
+
- '56'
|
72
|
+
Connection:
|
73
|
+
- keep-alive
|
74
|
+
Cache-Control:
|
75
|
+
- no-cache
|
76
|
+
Access-Control-Allow-Origin:
|
77
|
+
- '*'
|
78
|
+
Access-Control-Allow-Methods:
|
79
|
+
- GET
|
80
|
+
body:
|
81
|
+
encoding: UTF-8
|
82
|
+
string: '[[{"text":"hey"}],"14376642242988715","foo.*","foo.foo"]'
|
83
|
+
http_version:
|
84
|
+
recorded_at: Thu, 23 Jul 2015 15:10:24 GMT
|
85
|
+
- request:
|
86
|
+
method: get
|
87
|
+
uri: https://pubsub.pubnub.com/subscribe/ds/foo,foo.*/0/14376642242988715?channel-group=group&pnsdk=PubNub-Ruby/3.7.5&uuid=rubytests
|
88
|
+
body:
|
89
|
+
encoding: US-ASCII
|
90
|
+
string: ''
|
91
|
+
headers:
|
92
|
+
Accept-Encoding:
|
93
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
94
|
+
Accept:
|
95
|
+
- '*/*'
|
96
|
+
User-Agent:
|
97
|
+
- Ruby
|
98
|
+
Connection:
|
99
|
+
- keep-alive
|
100
|
+
Keep-Alive:
|
101
|
+
- 30
|
102
|
+
response:
|
103
|
+
status:
|
104
|
+
code: 200
|
105
|
+
message: OK
|
106
|
+
headers:
|
107
|
+
Date:
|
108
|
+
- Thu, 23 Jul 2015 15:10:27 GMT
|
109
|
+
Content-Type:
|
110
|
+
- text/javascript; charset="UTF-8"
|
111
|
+
Content-Length:
|
112
|
+
- '157'
|
113
|
+
Connection:
|
114
|
+
- keep-alive
|
115
|
+
Cache-Control:
|
116
|
+
- no-cache
|
117
|
+
Access-Control-Allow-Origin:
|
118
|
+
- '*'
|
119
|
+
Access-Control-Allow-Methods:
|
120
|
+
- GET
|
121
|
+
body:
|
122
|
+
encoding: UTF-8
|
123
|
+
string: '[[{"action": "leave", "timestamp": 1437664227, "uuid": "c7769435-68b3-48b0-9065-08cafce285df",
|
124
|
+
"occupancy": 0}],"14376642278720422","foo.*","foo.foo-pnpres"]'
|
125
|
+
http_version:
|
126
|
+
recorded_at: Thu, 23 Jul 2015 15:10:28 GMT
|
127
|
+
- request:
|
128
|
+
method: get
|
129
|
+
uri: https://pubsub.pubnub.com/subscribe/ds/foo,foo.*/0/14376642278720422?channel-group=group&pnsdk=PubNub-Ruby/3.7.5&uuid=rubytests
|
130
|
+
body:
|
131
|
+
encoding: US-ASCII
|
132
|
+
string: ''
|
133
|
+
headers:
|
134
|
+
Accept-Encoding:
|
135
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
136
|
+
Accept:
|
137
|
+
- '*/*'
|
138
|
+
User-Agent:
|
139
|
+
- Ruby
|
140
|
+
Connection:
|
141
|
+
- keep-alive
|
142
|
+
Keep-Alive:
|
143
|
+
- 30
|
144
|
+
response:
|
145
|
+
status:
|
146
|
+
code: 200
|
147
|
+
message: OK
|
148
|
+
headers:
|
149
|
+
Date:
|
150
|
+
- Thu, 23 Jul 2015 15:10:30 GMT
|
151
|
+
Content-Type:
|
152
|
+
- text/javascript; charset="UTF-8"
|
153
|
+
Content-Length:
|
154
|
+
- '50'
|
155
|
+
Connection:
|
156
|
+
- keep-alive
|
157
|
+
Cache-Control:
|
158
|
+
- no-cache
|
159
|
+
Access-Control-Allow-Origin:
|
160
|
+
- '*'
|
161
|
+
Access-Control-Allow-Methods:
|
162
|
+
- GET
|
163
|
+
body:
|
164
|
+
encoding: UTF-8
|
165
|
+
string: '[[{"text":"hey"}],"14376642302336303","foo","foo"]'
|
166
|
+
http_version:
|
167
|
+
recorded_at: Thu, 23 Jul 2015 15:10:30 GMT
|
168
|
+
recorded_with: VCR 2.9.2
|
data/lib/pubnub/envelope.rb
CHANGED
data/lib/pubnub/event.rb
CHANGED
@@ -10,13 +10,14 @@ module Pubnub
|
|
10
10
|
@message = options[:message]
|
11
11
|
@http_sync = options[:http_sync]
|
12
12
|
@callback = options[:callback]
|
13
|
-
@error_callback = options[:error_callback]
|
14
|
-
@
|
15
|
-
@
|
13
|
+
@error_callback = options[:error_callback] || app.env[:error_callback]
|
14
|
+
@presence_callback= options[:presence_callback] || app.env[:presence_callback]
|
15
|
+
@connect_callback = options[:connect_callback] || app.env[:connect_callback]
|
16
|
+
@ssl = options[:ssl] || app.env[:ssl]
|
16
17
|
|
17
18
|
@cipher_key = app.env[:cipher_key]
|
18
19
|
@secret_key = app.env[:secret_key]
|
19
|
-
@auth_key = options[:auth_key]
|
20
|
+
@auth_key = options[:auth_key] || app.env[:auth_key]
|
20
21
|
@publish_key = app.env[:publish_key]
|
21
22
|
@subscribe_key = app.env[:subscribe_key]
|
22
23
|
|
@@ -42,6 +43,7 @@ module Pubnub
|
|
42
43
|
end
|
43
44
|
|
44
45
|
def send_request(app)
|
46
|
+
Pubnub.logger.debug(:pubnub){'Pubnub::Event#send_request'}
|
45
47
|
if app.disabled_persistent_connection?
|
46
48
|
@response = Net::HTTP.get_response uri(app)
|
47
49
|
else
|
@@ -51,6 +53,7 @@ module Pubnub
|
|
51
53
|
|
52
54
|
def start_event(app, count = 0)
|
53
55
|
begin
|
56
|
+
@response = nil
|
54
57
|
if count <= app.env[:max_retries]
|
55
58
|
Pubnub.logger.debug(:pubnub){'Event#start_event | sending request'}
|
56
59
|
Pubnub.logger.debug(:pubnub){"Event#start_event | tt: #{@timetoken}; ctt #{app.env[:timetoken]}"}
|
@@ -59,7 +62,7 @@ module Pubnub
|
|
59
62
|
|
60
63
|
error = response_error(@response, app)
|
61
64
|
|
62
|
-
if ![error].flatten.include?(:json) || count > app.env[:max_retries]
|
65
|
+
if ![error].flatten.include?(:json) || count > app.env[:max_retries] || app.env[:max_retries] == 0
|
63
66
|
handle_response(@response, app, error)
|
64
67
|
else
|
65
68
|
start_event(app, count + 1)
|
@@ -331,6 +334,15 @@ module Pubnub
|
|
331
334
|
end
|
332
335
|
end
|
333
336
|
|
337
|
+
@wildcard_channel.each do |wc|
|
338
|
+
if app.env[:subscriptions][@origin].get_wildcard_channels.include?(wc)
|
339
|
+
@wildcard_channel.delete(wc)
|
340
|
+
Pubnub.logger.error(:pubnub){"Already subscribed to wildcard channel #{wc}, you have to leave that channel first"}
|
341
|
+
else
|
342
|
+
app.env[:subscriptions][@origin].add_wildcard_channel(wc, app)
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
334
346
|
if @channel.empty?
|
335
347
|
false
|
336
348
|
else
|
@@ -340,17 +352,21 @@ module Pubnub
|
|
340
352
|
end
|
341
353
|
|
342
354
|
if app.env[:subscriptions][@origin].nil?
|
343
|
-
app.env[:subscriptions][@origin]
|
344
|
-
app.env[:callbacks_pool]
|
345
|
-
app.env[:callbacks_pool][:channel]
|
346
|
-
app.env[:callbacks_pool][:channel_group]
|
347
|
-
app.env[:callbacks_pool][:
|
348
|
-
app.env[:callbacks_pool][:
|
349
|
-
app.env[:
|
350
|
-
app.env[:
|
351
|
-
app.env[:error_callbacks_pool]
|
352
|
-
app.env[:error_callbacks_pool][:
|
353
|
-
app.env[:error_callbacks_pool][:
|
355
|
+
app.env[:subscriptions][@origin] = self if app.env[:subscriptions][@origin].nil?
|
356
|
+
app.env[:callbacks_pool] = Hash.new if app.env[:callbacks_pool].nil?
|
357
|
+
app.env[:callbacks_pool][:channel] = Hash.new if app.env[:callbacks_pool][:channel].nil?
|
358
|
+
app.env[:callbacks_pool][:channel_group] = Hash.new if app.env[:callbacks_pool][:channel_group].nil?
|
359
|
+
app.env[:callbacks_pool][:wildcard_channel] = Hash.new if app.env[:callbacks_pool][:wildcard_channel].nil?
|
360
|
+
app.env[:callbacks_pool][:channel][@origin] = Hash.new if app.env[:callbacks_pool][:channel][@origin].nil?
|
361
|
+
app.env[:callbacks_pool][:channel_group][@origin] = Hash.new if app.env[:callbacks_pool][:channel_group][@origin].nil?
|
362
|
+
app.env[:callbacks_pool][:wildcard_channel][@origin] = Hash.new if app.env[:callbacks_pool][:wildcard_channel][@origin].nil?
|
363
|
+
app.env[:error_callbacks_pool] = Hash.new if app.env[:error_callbacks_pool].nil?
|
364
|
+
app.env[:error_callbacks_pool][:channel] = Hash.new if app.env[:error_callbacks_pool][:channel].nil?
|
365
|
+
app.env[:error_callbacks_pool][:channel][@origin] = @error_callback if app.env[:error_callbacks_pool][:channel][@origin].nil?
|
366
|
+
app.env[:error_callbacks_pool][:channel_group] = Hash.new if app.env[:error_callbacks_pool][:channel_group].nil?
|
367
|
+
app.env[:error_callbacks_pool][:channel_group][@origin] = @error_callback if app.env[:error_callbacks_pool][:channel_group][@origin].nil?
|
368
|
+
app.env[:error_callbacks_pool][:wildcard_channel] = Hash.new if app.env[:error_callbacks_pool][:wildcard_channel].nil?
|
369
|
+
app.env[:error_callbacks_pool][:wildcard_channel][@origin] = @error_callback if app.env[:error_callbacks_pool][:wildcard_channel][@origin].nil?
|
354
370
|
|
355
371
|
@channel.each do |channel|
|
356
372
|
app.env[:callbacks_pool][:channel][@origin][channel] = Hash.new
|
@@ -362,10 +378,16 @@ module Pubnub
|
|
362
378
|
app.env[:callbacks_pool][:channel_group][@origin][channel_group][:callback] = @callback unless app.env[:callbacks_pool][:channel_group][@origin][:callback]
|
363
379
|
end
|
364
380
|
|
381
|
+
@wildcard_channel.each do |wildcard_channel|
|
382
|
+
app.env[:callbacks_pool][:wildcard_channel][@origin][wildcard_channel] = Hash.new
|
383
|
+
|
384
|
+
app.env[:callbacks_pool][:wildcard_channel][@origin][wildcard_channel][:callback] = @callback unless app.env[:callbacks_pool][:wildcard_channel][@origin][:callback]
|
385
|
+
app.env[:callbacks_pool][:wildcard_channel][@origin][wildcard_channel][:presence_callback] = @presence_callback unless app.env[:callbacks_pool][:wildcard_channel][@origin][wildcard_channel][:presence_callback]
|
386
|
+
end
|
387
|
+
|
365
388
|
else
|
366
389
|
@channel.each do |channel|
|
367
390
|
app.env[:callbacks_pool][:channel][@origin][channel] = Hash.new
|
368
|
-
app.env[:callbacks_pool][:channel][@origin][channel] = Hash.new
|
369
391
|
|
370
392
|
app.env[:callbacks_pool][:channel][@origin][channel][:callback] = @callback unless app.env[:callbacks_pool][:channel][@origin][:callback]
|
371
393
|
app.env[:callbacks_pool][:channel][@origin][channel][:error_callback] = @error_callback unless app.env[:callbacks_pool][:channel][@origin][:error_callback]
|
@@ -373,11 +395,18 @@ module Pubnub
|
|
373
395
|
|
374
396
|
@channel_group.each do |channel_group|
|
375
397
|
app.env[:callbacks_pool][:channel_group][@origin][channel_group] = Hash.new
|
376
|
-
app.env[:callbacks_pool][:channel_group][@origin][channel_group] = Hash.new
|
377
398
|
|
378
399
|
app.env[:callbacks_pool][:channel_group][@origin][channel_group][:callback] = @callback unless app.env[:callbacks_pool][:channel_group][@origin][:callback]
|
379
400
|
app.env[:callbacks_pool][:channel_group][@origin][channel_group][:error_callback] = @error_callback unless app.env[:callbacks_pool][:channel_group][@origin][:error_callback]
|
380
401
|
end
|
402
|
+
|
403
|
+
@wildcard_channel.each do |wildcard_channel|
|
404
|
+
app.env[:callbacks_pool][:wildcard_channel][@origin][wildcard_channel] = Hash.new
|
405
|
+
|
406
|
+
app.env[:callbacks_pool][:wildcard_channel][@origin][wildcard_channel][:callback] = @callback unless app.env[:callbacks_pool][:wildcard_channel][@origin][:callback]
|
407
|
+
app.env[:callbacks_pool][:wildcard_channel][@origin][wildcard_channel][:error_callback] = @error_callback unless app.env[:callbacks_pool][:wildcard_channel][@origin][:error_callback]
|
408
|
+
app.env[:callbacks_pool][:wildcard_channel][@origin][wildcard_channel][:presence_callback] = @presence_callback unless app.env[:callbacks_pool][:wildcard_channel][@origin][wildcard_channel][:presence_callback]
|
409
|
+
end
|
381
410
|
end
|
382
411
|
|
383
412
|
app.start_subscribe
|
@@ -394,7 +423,7 @@ module Pubnub
|
|
394
423
|
|
395
424
|
def add_channel_group(cg, app)
|
396
425
|
@channel_group << cg
|
397
|
-
Pubnub.logger.debug(:pubnub){'SubscribeEvent#
|
426
|
+
Pubnub.logger.debug(:pubnub){'SubscribeEvent#add_channel_group | Added channel'}
|
398
427
|
end
|
399
428
|
|
400
429
|
def add_channel(channel, app)
|
@@ -402,11 +431,16 @@ module Pubnub
|
|
402
431
|
Pubnub.logger.debug(:pubnub){'SubscribeEvent#add_channel | Added channel'}
|
403
432
|
end
|
404
433
|
|
434
|
+
def add_wildcard_channel(wc, app)
|
435
|
+
@wildcard_channel << wc
|
436
|
+
Pubnub.logger.debug(:pubnub){'SubscribeEvent#add_wildcard_channel | Added channel'}
|
437
|
+
end
|
438
|
+
|
405
439
|
def remove_channel(channel, app)
|
406
440
|
@channel = @channel - format_channels(channel)
|
407
441
|
Pubnub.logger.debug(:pubnub){'SubscribeEvent#remove_channel | Removed channel'}
|
408
442
|
begin
|
409
|
-
shutdown_subscribe(app) if @channel.empty? && @channel_group.empty?
|
443
|
+
shutdown_subscribe(app) if @channel.empty? && @channel_group.empty? && @wildcard_channel.empty?
|
410
444
|
rescue => e
|
411
445
|
Pubnub.logger.error(:pubnub){e.message}
|
412
446
|
Pubnub.logger.error(:pubnub){e.backtrace}
|
@@ -415,9 +449,20 @@ module Pubnub
|
|
415
449
|
|
416
450
|
def remove_channel_group(channel_group, app)
|
417
451
|
@channel_group = @channel_group - format_channel_group(channel_group, false)
|
418
|
-
Pubnub.logger.debug(:pubnub){'SubscribeEvent#
|
452
|
+
Pubnub.logger.debug(:pubnub){'SubscribeEvent#remove_channel_group | Removed channel'}
|
453
|
+
begin
|
454
|
+
shutdown_subscribe(app) if @channel.empty? && @channel_group.empty? && @wildcard_channel.empty?
|
455
|
+
rescue => e
|
456
|
+
Pubnub.logger.error(:pubnub){e.message}
|
457
|
+
Pubnub.logger.error(:pubnub){e.backtrace}
|
458
|
+
end
|
459
|
+
end
|
460
|
+
|
461
|
+
def remove_wildcard_channel(wc, app)
|
462
|
+
@wildcard_channel -= [wc]
|
463
|
+
Pubnub.logger.debug(:pubnub){'SubscribeEvent#remove_wildcard_channel | Removed channel'}
|
419
464
|
begin
|
420
|
-
shutdown_subscribe(app) if @channel.empty? && @channel_group.empty?
|
465
|
+
shutdown_subscribe(app) if @channel.empty? && @channel_group.empty? && @wildcard_channel.empty?
|
421
466
|
rescue => e
|
422
467
|
Pubnub.logger.error(:pubnub){e.message}
|
423
468
|
Pubnub.logger.error(:pubnub){e.backtrace}
|
@@ -432,6 +477,10 @@ module Pubnub
|
|
432
477
|
@channel_group
|
433
478
|
end
|
434
479
|
|
480
|
+
def get_wildcard_channels
|
481
|
+
@wildcard_channel
|
482
|
+
end
|
483
|
+
|
435
484
|
private
|
436
485
|
|
437
486
|
def parameters(app)
|
@@ -473,10 +522,14 @@ module Pubnub
|
|
473
522
|
begin
|
474
523
|
Pubnub.logger.debug(:pubnub){'Event#fire_callbacks async'}
|
475
524
|
envelopes.each do |envelope|
|
476
|
-
if envelope
|
525
|
+
if group_envelope?(envelope, app) # WITH GROUP
|
477
526
|
app.env[:callbacks_pool][:channel_group][@origin][envelope.channel_group][:callback].call(envelope) if !envelope.error && !envelope.timetoken_update
|
478
|
-
|
527
|
+
elsif channel_envelope?(envelope, app) # CHANNEL SUBSCRIBE
|
479
528
|
app.env[:callbacks_pool][:channel][@origin][encode_channel(envelope.channel)][:callback].call(envelope) if !envelope.error && !envelope.timetoken_update
|
529
|
+
elsif wc_pnpres_envelope(envelope, app) # wildcard pnpres
|
530
|
+
app.env[:callbacks_pool][:wildcard_channel][@origin][encode_channel(envelope.wildcard_channel)][:presence_callback].call(envelope) if !envelope.error && !envelope.timetoken_update
|
531
|
+
elsif wc_envelope?(envelope, app) # wildcard
|
532
|
+
app.env[:callbacks_pool][:wildcard_channel][@origin][encode_channel(envelope.wildcard_channel)][:callback].call(envelope) if !envelope.error && !envelope.timetoken_update
|
480
533
|
end
|
481
534
|
end
|
482
535
|
Pubnub.logger.debug(:pubnub){'We can send next request now'}
|
@@ -491,6 +544,30 @@ module Pubnub
|
|
491
544
|
|
492
545
|
end
|
493
546
|
|
547
|
+
def group_envelope?(envelope, app)
|
548
|
+
envelope.channel_group && app.env[:callbacks_pool][:channel_group][@origin][envelope.channel_group]
|
549
|
+
rescue
|
550
|
+
false
|
551
|
+
end
|
552
|
+
|
553
|
+
def channel_envelope?(envelope, app)
|
554
|
+
app.env[:callbacks_pool][:channel][@origin][encode_channel(envelope.channel)]
|
555
|
+
rescue
|
556
|
+
false
|
557
|
+
end
|
558
|
+
|
559
|
+
def wc_pnpres_envelope(envelope, app)
|
560
|
+
app.env[:callbacks_pool][:wildcard_channel][@origin][envelope.wildcard_channel][:presence_callback] && (envelope.channel.index('-pnpres') || envelope.wildcard_channel.index('-pnpres'))
|
561
|
+
rescue
|
562
|
+
false
|
563
|
+
end
|
564
|
+
|
565
|
+
def wc_envelope?(envelope, app)
|
566
|
+
app.env[:callbacks_pool][:wildcard_channel][@origin][envelope.wildcard_channel][:callback]
|
567
|
+
rescue
|
568
|
+
false
|
569
|
+
end
|
570
|
+
|
494
571
|
def setup_connection(app)
|
495
572
|
app.subscribe_event_connections_pool[@origin] = new_connection(app)
|
496
573
|
end
|
@@ -504,7 +581,7 @@ module Pubnub
|
|
504
581
|
end
|
505
582
|
|
506
583
|
def path(app)
|
507
|
-
path = "/subscribe/#{@subscribe_key}/#{channels_for_url(@channel)}/0/#{@timetoken}".gsub(/\?/,'%3F')
|
584
|
+
path = "/subscribe/#{@subscribe_key}/#{channels_for_url(@channel + @wildcard_channel)}/0/#{@timetoken}".gsub(/\?/,'%3F')
|
508
585
|
end
|
509
586
|
|
510
587
|
def timetoken(parsed_response)
|
@@ -534,6 +611,7 @@ module Pubnub
|
|
534
611
|
envelopes << Envelope.new(
|
535
612
|
{
|
536
613
|
:channel => @channel,
|
614
|
+
:parsed_response => parsed_response,
|
537
615
|
:timetoken => timetoken(parsed_response)
|
538
616
|
},
|
539
617
|
app
|
@@ -544,6 +622,7 @@ module Pubnub
|
|
544
622
|
{
|
545
623
|
:channel => @channel.first,
|
546
624
|
:response_message => parsed_response,
|
625
|
+
:parsed_response => parsed_response,
|
547
626
|
:timetoken => timetoken(parsed_response),
|
548
627
|
:timetoken_update => true
|
549
628
|
},
|
@@ -573,6 +652,7 @@ module Pubnub
|
|
573
652
|
:message => message(parsed_response, i, channel, app),
|
574
653
|
:channel => channel,
|
575
654
|
:response_message => parsed_response,
|
655
|
+
:parsed_response => parsed_response,
|
576
656
|
:timetoken => timetoken(parsed_response)
|
577
657
|
},
|
578
658
|
app
|
@@ -588,6 +668,11 @@ module Pubnub
|
|
588
668
|
channel = parsed_response[3].split(',')[i]
|
589
669
|
channel_group = parsed_response[2].split(',')[i]
|
590
670
|
|
671
|
+
if channel_group.index('.*')
|
672
|
+
wildcard_channel = channel_group
|
673
|
+
channel_group = nil
|
674
|
+
end
|
675
|
+
|
591
676
|
Pubnub.logger.debug(:pubnub){"#{parsed_response}"}
|
592
677
|
|
593
678
|
envelopes << Envelope.new(
|
@@ -595,7 +680,9 @@ module Pubnub
|
|
595
680
|
:message => message(parsed_response, i, channel, app),
|
596
681
|
:channel => channel,
|
597
682
|
:channel_group => channel_group,
|
683
|
+
:wildcard_channel => wildcard_channel,
|
598
684
|
:response_message => parsed_response,
|
685
|
+
:parsed_response => parsed_response,
|
599
686
|
:timetoken => timetoken(parsed_response)
|
600
687
|
},
|
601
688
|
app
|