class PubNub
Attributes
events[RW]
Public Class Methods
new(ringcentral, events, message_callback, status_callback = nil, presence_callback = nil)
click to toggle source
# File lib/subscription.rb, line 9 def initialize(ringcentral, events, message_callback, status_callback = nil, presence_callback = nil) @rc = ringcentral @events = events @callback = Pubnub::SubscribeCallback.new( message: lambda { |envelope| message = envelope.result[:data][:message] cipher = OpenSSL::Cipher::AES.new(128, :ECB) cipher.decrypt cipher.key = Base64.decode64(@subscription['deliveryMode']['encryptionKey']) ciphertext = Base64.decode64(message) plaintext = cipher.update(ciphertext) + cipher.final message_callback.call(JSON.parse(plaintext)) }, presence: lambda { |envelope| presence_callback != nil && presence_callback.call(envelope) }, status: lambda { |envelope| status_callback != nil && status_callback.call(envelope) } ) @subscription = nil @timer = nil @pubnub = nil end
Public Instance Methods
refresh()
click to toggle source
# File lib/subscription.rb, line 56 def refresh return if @subscription == nil r = @rc.put("/restapi/v1.0/subscription/#{@subscription['id']}", payload: request_body) self.subscription = r.body end
revoke()
click to toggle source
# File lib/subscription.rb, line 62 def revoke return if @subscription == nil @pubnub.unsubscribe(channel: @subscription['deliveryMode']['address']) @pubnub.remove_listener(name: 'default') @pubnub = nil @rc.delete("/restapi/v1.0/subscription/#{@subscription['id']}") self.subscription = nil end
subscribe()
click to toggle source
# File lib/subscription.rb, line 48 def subscribe r = @rc.post('/restapi/v1.0/subscription', payload: request_body) self.subscription = r.body @pubnub = Pubnub.new(subscribe_key: @subscription['deliveryMode']['subscriberKey']) @pubnub.add_listener(name: 'default', callback: @callback) @pubnub.subscribe(channels: @subscription['deliveryMode']['address']) end
subscription=(value)
click to toggle source
# File lib/subscription.rb, line 34 def subscription=(value) @subscription = value if @timer != nil @timer.shutdown @timer = nil end if value != nil @timer = Concurrent::TimerTask.new(execution_interval: value['expiresIn'] - 120, timeout_interval: 60) do self.refresh end @timer.execute end end
Private Instance Methods
request_body()
click to toggle source
# File lib/subscription.rb, line 73 def request_body { 'deliveryMode': { 'transportType': 'PubNub', 'encryption': true }, 'eventFilters': @events } end