lib/ringcentral_sdk/subscription.rb in ringcentral_sdk-0.3.0 vs lib/ringcentral_sdk/subscription.rb in ringcentral_sdk-0.4.0
- old
+ new
@@ -1,20 +1,22 @@
require 'base64'
require 'multi_json'
require 'observer'
-require 'timers' # Also see http://ruby-doc.org/stdlib-2.2.3/libdoc/timeout/rdoc/Timeout.html
+require 'timers'
module RingCentralSdk
class Subscription
include Observable
RENEW_HANDICAP = 60
+ attr_reader :event_filters
+
def initialize(platform, pubnub_factory)
@_platform = platform
@_pubnub_factory = pubnub_factory
- @_event_filters = []
+ @event_filters = []
@_timeout = nil
@_subscription = nil_subscription()
@_pubnub = nil
end
@@ -41,31 +43,31 @@
def pubnub()
return @_pubnub
end
def register(events=nil)
- return alive() ? renew(events) : subscribe(events)
+ return alive?() ? renew(events) : subscribe(events)
end
def add_events(events)
unless events.is_a?(Array)
raise 'Events is not an array.'
end
- @_event_filters.push(events) if events.length>0
+ @event_filters.push(events) if events.length>0
end
def set_events(events)
unless events.is_a?(Array)
raise 'Events is not an array.'
end
- @_event_filters.push(*events) if events.length>0
+ @event_filters = events
end
def subscribe(events=nil)
set_events(events) if events.is_a?(Array)
- if !@_event_filters.is_a?(Array) || @_event_filters.length ==0
+ if !@event_filters.is_a?(Array) || @event_filters.length ==0
raise 'Events are undefined'
end
begin
response = @_platform.client.post do |req|
@@ -93,15 +95,15 @@
end
def renew(events=nil)
set_events(events) if events.is_a?(Array)
- unless alive()
+ unless alive?()
raise 'Subscription is not alive'
end
- if !@_event_filters.is_a?(Array) || @_event_filters.length ==0
+ if !@event_filters.is_a?(Array) || @event_filters.length ==0
raise 'Events are undefined'
end
_clear_timeout()
@@ -124,11 +126,11 @@
raise 'Renew HTTP Request Error'
end
end
def remove()
- unless alive()
+ unless alive?()
raise 'Subscription is not alive'
end
begin
response = @_platform.client.delete do |req|
@@ -143,15 +145,18 @@
changed
notify_observers(e)
end
end
- def alive()
+ def alive?()
s = @_subscription
return (s.has_key?('deliveryMode') && s['deliveryMode']) && \
(s['deliveryMode'].has_key?('subscriberKey') && s['deliveryMode']['subscriberKey']) && \
- (s['deliveryMode'].has_key?('address') && s['deliveryMode']['address'])
+ (
+ s['deliveryMode'].has_key?('address') && s['deliveryMode']['address'] && \
+ s['deliveryMode']['address'].length>0) \
+ ? true : false
end
def subscription()
return @_subscription
end
@@ -163,20 +168,19 @@
end
def reset()
_clear_timeout()
_unsubscribe_at_pubnub()
- _subscription = nil
+ @_subscription = nil_subscription()
end
def destroy()
reset()
- off()
end
def _subscribe_at_pubnub()
- unless alive()
+ if ! alive?()
raise 'Subscription is not alive'
end
s_key = @_subscription['deliveryMode']['subscriberKey']
@_pubnub = @_pubnub_factory.pubnub(s_key, false, '')
@@ -185,55 +189,33 @@
_notify(envelope.msg)
changed
notify_observers('GOT_PUBNUB_MESSAGE_NOTIFY')
}
- error = lambda { |envelope|
- puts('ERROR : ' + envelope.msg.to_s) # FIXME Handle this
- }
-
- connect = lambda { |envelope|
- puts('CONNECTED')
- }
-
- reconnect = lambda { |envelope|
- puts('RECONNECTED')
- }
-
- disconnect = lambda { |envelope|
- puts('DISCONNECTED')
- }
-
@_pubnub.subscribe(
:channel => @_subscription['deliveryMode']['address'],
:callback => callback,
- :error => error,
- :connect => connect,
- :reconnect => reconnect,
- :disconnect => disconnect
+ :error => lambda { |envelope| puts('ERROR: ' + envelope.msg.to_s) },
+ :connect => lambda { |envelope| puts('CONNECTED') },
+ :reconnect => lambda { |envelope| puts('RECONNECTED') },
+ :disconnect => lambda { |envelope| puts('DISCONNECTED') }
)
end
def _notify(message)
message = _decrypt(message)
changed
notify_observers(message)
end
def _decrypt(message)
- unless alive()
+ unless alive?()
raise 'Subscription is not alive'
end
- delivery_mode = @_subscription['deliveryMode']
-
- is_encrypted = delivery_mode.has_key?('encryption') && \
- delivery_mode['encryption'] && \
- delivery_mode.has_key?('encryptionKey') && \
- delivery_mode['encryptionKey']
-
- if is_encrypted
+ if _encrypted?()
+ delivery_mode = @_subscription['deliveryMode']
key = Base64.decode64(delivery_mode['encryptionKey'])
ciphertext = Base64.decode64(message)
decipher = OpenSSL::Cipher::AES.new(128, :ECB)
decipher.decrypt
@@ -245,18 +227,27 @@
end
return message
end
+ def _encrypted?()
+ delivery_mode = @_subscription['deliveryMode']
+ is_encrypted = delivery_mode.has_key?('encryption') && \
+ delivery_mode['encryption'] && \
+ delivery_mode.has_key?('encryptionKey') && \
+ delivery_mode['encryptionKey']
+ return is_encrypted
+ end
+
def _unsubscribe_at_pubnub()
- if @_pubnub && alive()
+ if @_pubnub && alive?()
@_pubnub.unsubscribe(@_subscription['deliveryMode']['address'])
end
end
def _get_full_events_filter()
full_events_filter = []
- @_event_filters.each do |filter|
+ @event_filters.each do |filter|
if filter.to_s
full_events_filter.push(@_platform.create_url(filter.to_s))
end
end
return full_events_filter
\ No newline at end of file