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