amf_socket 0.1.4 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +2 -2
 - data/README.md +21 -7
 - data/Rakefile +21 -7
 - data/amf_socket.gemspec +1 -1
 - data/lib/amf_socket/amf_rpc_connection.rb +24 -31
 - data/lib/amf_socket/exceptions.rb +1 -0
 - data/lib/amf_socket/rpc_message.rb +17 -26
 - data/lib/amf_socket/rpc_received_message.rb +35 -0
 - data/lib/amf_socket/rpc_received_request.rb +51 -0
 - data/lib/amf_socket/rpc_request.rb +25 -36
 - data/lib/amf_socket/rpc_response.rb +4 -13
 - data/lib/amf_socket/version.rb +1 -1
 - data/lib/amf_socket.rb +4 -1
 - metadata +7 -5
 
    
        data/Gemfile.lock
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            PATH
         
     | 
| 
       2 
2 
     | 
    
         
             
              remote: .
         
     | 
| 
       3 
3 
     | 
    
         
             
              specs:
         
     | 
| 
       4 
     | 
    
         
            -
                amf_socket (0. 
     | 
| 
      
 4 
     | 
    
         
            +
                amf_socket (0.2.0)
         
     | 
| 
       5 
5 
     | 
    
         
             
                  RocketAMF (>= 0.2.1)
         
     | 
| 
       6 
6 
     | 
    
         
             
                  eventmachine (>= 0.12.10)
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
         @@ -9,7 +9,7 @@ GEM 
     | 
|
| 
       9 
9 
     | 
    
         
             
              remote: https://rubygems.org/
         
     | 
| 
       10 
10 
     | 
    
         
             
              specs:
         
     | 
| 
       11 
11 
     | 
    
         
             
                RocketAMF (0.2.1)
         
     | 
| 
       12 
     | 
    
         
            -
                eventmachine ( 
     | 
| 
      
 12 
     | 
    
         
            +
                eventmachine (0.12.10)
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
            PLATFORMS
         
     | 
| 
       15 
15 
     | 
    
         
             
              ruby
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -23,22 +23,36 @@ Or install it yourself as: 
     | 
|
| 
       23 
23 
     | 
    
         
             
                    def post_init
         
     | 
| 
       24 
24 
     | 
    
         
             
                      super
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
                      puts ' 
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
      
 26 
     | 
    
         
            +
                      puts 'Connected.'
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                      puts 'Sending a request.'
         
     | 
| 
      
 29 
     | 
    
         
            +
                      send_request('hello', :foo => 'bar') do |request|
         
     | 
| 
      
 30 
     | 
    
         
            +
                        request.succeeded do |response|
         
     | 
| 
      
 31 
     | 
    
         
            +
                          puts "Request received a response. result=#{response.result}"
         
     | 
| 
      
 32 
     | 
    
         
            +
                        end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                        request.failed do |reason|
         
     | 
| 
      
 35 
     | 
    
         
            +
                          puts "Request failed to receive a response. reason=#{reason}"
         
     | 
| 
      
 36 
     | 
    
         
            +
                        end
         
     | 
| 
       29 
37 
     | 
    
         
             
                      end
         
     | 
| 
       30 
38 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
                      puts 'Sending a message'
         
     | 
| 
       32 
     | 
    
         
            -
                      send_message('hey there', ['hello', 'world'])
         
     | 
| 
      
 39 
     | 
    
         
            +
                      puts 'Sending a message.'
         
     | 
| 
      
 40 
     | 
    
         
            +
                      send_message('hey there', :bar => ['hello', 'world'])
         
     | 
| 
       33 
41 
     | 
    
         
             
                    end
         
     | 
| 
       34 
42 
     | 
    
         | 
| 
       35 
43 
     | 
    
         
             
                    def receive_request(request)
         
     | 
| 
       36 
     | 
    
         
            -
                      puts " 
     | 
| 
      
 44 
     | 
    
         
            +
                      puts "Received a request. command=#{request.command}, params=#{request.params}"
         
     | 
| 
       37 
45 
     | 
    
         
             
                      request.reply('Here is my response')
         
     | 
| 
       38 
46 
     | 
    
         
             
                    end
         
     | 
| 
       39 
47 
     | 
    
         | 
| 
       40 
48 
     | 
    
         
             
                    def receive_message(message)
         
     | 
| 
       41 
     | 
    
         
            -
                      puts " 
     | 
| 
      
 49 
     | 
    
         
            +
                      puts "Received a message. command=#{message.command}, params=#{message.params}"
         
     | 
| 
      
 50 
     | 
    
         
            +
                    end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                    def unbind
         
     | 
| 
      
 53 
     | 
    
         
            +
                      super
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                      puts 'Disconnected.'
         
     | 
| 
       42 
56 
     | 
    
         
             
                    end
         
     | 
| 
       43 
57 
     | 
    
         
             
                  end
         
     | 
| 
       44 
58 
     | 
    
         | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -37,22 +37,36 @@ task :harness => :environment do 
     | 
|
| 
       37 
37 
     | 
    
         
             
                  def post_init
         
     | 
| 
       38 
38 
     | 
    
         
             
                    super
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
                    puts ' 
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
      
 40 
     | 
    
         
            +
                    puts 'Connected.'
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                    puts 'Sending a request.'
         
     | 
| 
      
 43 
     | 
    
         
            +
                    send_request('hello', :foo => 'bar') do |request|
         
     | 
| 
      
 44 
     | 
    
         
            +
                      request.succeeded do |response|
         
     | 
| 
      
 45 
     | 
    
         
            +
                        puts "Request received a response. result=#{response.result}"
         
     | 
| 
      
 46 
     | 
    
         
            +
                      end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                      request.failed do |reason|
         
     | 
| 
      
 49 
     | 
    
         
            +
                        puts "Request failed to receive a response. reason=#{reason}"
         
     | 
| 
      
 50 
     | 
    
         
            +
                      end
         
     | 
| 
       43 
51 
     | 
    
         
             
                    end
         
     | 
| 
       44 
52 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
                    puts 'Sending a message'
         
     | 
| 
       46 
     | 
    
         
            -
                    send_message('hey there', ['hello', 'world'])
         
     | 
| 
      
 53 
     | 
    
         
            +
                    puts 'Sending a message.'
         
     | 
| 
      
 54 
     | 
    
         
            +
                    send_message('hey there', :bar => ['hello', 'world'])
         
     | 
| 
       47 
55 
     | 
    
         
             
                  end
         
     | 
| 
       48 
56 
     | 
    
         | 
| 
       49 
57 
     | 
    
         
             
                  def receive_request(request)
         
     | 
| 
       50 
     | 
    
         
            -
                    puts " 
     | 
| 
      
 58 
     | 
    
         
            +
                    puts "Received a request. command=#{request.command}, params=#{request.params}"
         
     | 
| 
       51 
59 
     | 
    
         
             
                    request.reply('Here is my response')
         
     | 
| 
       52 
60 
     | 
    
         
             
                  end
         
     | 
| 
       53 
61 
     | 
    
         | 
| 
       54 
62 
     | 
    
         
             
                  def receive_message(message)
         
     | 
| 
       55 
     | 
    
         
            -
                    puts " 
     | 
| 
      
 63 
     | 
    
         
            +
                    puts "Received a message. command=#{message.command}, params=#{message.params}"
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                  def unbind
         
     | 
| 
      
 67 
     | 
    
         
            +
                    super
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                    puts 'Disconnected.'
         
     | 
| 
       56 
70 
     | 
    
         
             
                  end
         
     | 
| 
       57 
71 
     | 
    
         
             
                end
         
     | 
| 
       58 
72 
     | 
    
         | 
    
        data/amf_socket.gemspec
    CHANGED
    
    | 
         @@ -6,7 +6,7 @@ Gem::Specification.new do |gem| 
     | 
|
| 
       6 
6 
     | 
    
         
             
              gem.email         = ["chad@remesch.com"]
         
     | 
| 
       7 
7 
     | 
    
         
             
              gem.description   = %q{Ruby implementation of AMF Socket (https://github.com/chadrem/amf_socket)}
         
     | 
| 
       8 
8 
     | 
    
         
             
              gem.summary       = %q{AMF Socket is a bi-directional RPC system for Adobe Flash (Actionscript) programs.}
         
     | 
| 
       9 
     | 
    
         
            -
              gem.homepage      = ""
         
     | 
| 
      
 9 
     | 
    
         
            +
              gem.homepage      = "https://github.com/chadrem/observation"
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
              gem.files         = `git ls-files`.split($\)
         
     | 
| 
       12 
12 
     | 
    
         
             
              gem.executables   = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
         
     | 
| 
         @@ -1,32 +1,16 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class AmfSocket::AmfRpcConnection < AmfSocket::AmfConnection
         
     | 
| 
       2 
2 
     | 
    
         
             
              def send_request(command, params = {}, &block)
         
     | 
| 
       3 
     | 
    
         
            -
                 
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
                 
     | 
| 
       6 
     | 
    
         
            -
                 
     | 
| 
       7 
     | 
    
         
            -
                object[:request] = {}
         
     | 
| 
       8 
     | 
    
         
            -
                object[:request][:messageId] = message_id
         
     | 
| 
       9 
     | 
    
         
            -
                object[:request][:command] = command
         
     | 
| 
       10 
     | 
    
         
            -
                object[:request][:params] = params
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                @sent_requests[message_id] = [object, block]
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                send_object(object)
         
     | 
| 
      
 3 
     | 
    
         
            +
                request = AmfSocket::RpcRequest.new(command, params)
         
     | 
| 
      
 4 
     | 
    
         
            +
                block.call(request)
         
     | 
| 
      
 5 
     | 
    
         
            +
                @sent_requests[request.message_id] = request
         
     | 
| 
      
 6 
     | 
    
         
            +
                send_object(request.to_hash)
         
     | 
| 
       15 
7 
     | 
    
         
             
              end
         
     | 
| 
       16 
8 
     | 
    
         | 
| 
       17 
9 
     | 
    
         
             
              def send_message(command, params = {})
         
     | 
| 
       18 
     | 
    
         
            -
                 
     | 
| 
       19 
     | 
    
         
            -
                 
     | 
| 
       20 
     | 
    
         
            -
                object[:message] = {}
         
     | 
| 
       21 
     | 
    
         
            -
                object[:message][:messageId] = SecureRandom.hex
         
     | 
| 
       22 
     | 
    
         
            -
                object[:message][:command] = command
         
     | 
| 
       23 
     | 
    
         
            -
                object[:message][:params] = params
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                send_object(object)
         
     | 
| 
      
 10 
     | 
    
         
            +
                message = AmfSocket::RpcMessage.new(command, params)
         
     | 
| 
      
 11 
     | 
    
         
            +
                send_object(message.to_hash)
         
     | 
| 
       26 
12 
     | 
    
         
             
              end
         
     | 
| 
       27 
13 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
              private
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
14 
     | 
    
         
             
              #
         
     | 
| 
       31 
15 
     | 
    
         
             
              # EM Callbacks.
         
     | 
| 
       32 
16 
     | 
    
         
             
              #
         
     | 
| 
         @@ -42,21 +26,31 @@ class AmfSocket::AmfRpcConnection < AmfSocket::AmfConnection 
     | 
|
| 
       42 
26 
     | 
    
         | 
| 
       43 
27 
     | 
    
         
             
                  case object[:type]
         
     | 
| 
       44 
28 
     | 
    
         
             
                  when 'rpcRequest'
         
     | 
| 
       45 
     | 
    
         
            -
                    request = AmfSocket:: 
     | 
| 
      
 29 
     | 
    
         
            +
                    request = AmfSocket::RpcReceivedRequest.new(object, self)
         
     | 
| 
       46 
30 
     | 
    
         
             
                    receive_request(request)
         
     | 
| 
       47 
31 
     | 
    
         
             
                  when 'rpcResponse'
         
     | 
| 
       48 
32 
     | 
    
         
             
                    receive_response(object)
         
     | 
| 
       49 
33 
     | 
    
         
             
                  when 'rpcMessage'
         
     | 
| 
       50 
     | 
    
         
            -
                    message = AmfSocket:: 
     | 
| 
      
 34 
     | 
    
         
            +
                    message = AmfSocket::RpcReceivedMessage.new(object, self)
         
     | 
| 
       51 
35 
     | 
    
         
             
                    receive_message(message)
         
     | 
| 
       52 
36 
     | 
    
         
             
                  else
         
     | 
| 
       53 
37 
     | 
    
         
             
                    raise AmfSocket::InvalidObject
         
     | 
| 
       54 
38 
     | 
    
         
             
                  end
         
     | 
| 
       55 
     | 
    
         
            -
                rescue AmfSocket::InvalidObject 
     | 
| 
      
 39 
     | 
    
         
            +
                rescue AmfSocket::InvalidObject
         
     | 
| 
       56 
40 
     | 
    
         
             
                  close_connection
         
     | 
| 
       57 
41 
     | 
    
         
             
                end
         
     | 
| 
       58 
42 
     | 
    
         
             
              end
         
     | 
| 
       59 
43 
     | 
    
         | 
| 
      
 44 
     | 
    
         
            +
              def unbind
         
     | 
| 
      
 45 
     | 
    
         
            +
                @sent_requests.each do |message_id, request|
         
     | 
| 
      
 46 
     | 
    
         
            +
                  if request.failed_callback.is_a?(Proc)
         
     | 
| 
      
 47 
     | 
    
         
            +
                    request.failed_callback.call('disconnected')
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                @sent_requests.clear
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
       60 
54 
     | 
    
         
             
              #
         
     | 
| 
       61 
55 
     | 
    
         
             
              # AMF RPC Connection Callbacks.
         
     | 
| 
       62 
56 
     | 
    
         
             
              #
         
     | 
| 
         @@ -72,14 +66,13 @@ class AmfSocket::AmfRpcConnection < AmfSocket::AmfConnection 
     | 
|
| 
       72 
66 
     | 
    
         | 
| 
       73 
67 
     | 
    
         
             
              def receive_response(response_object)
         
     | 
| 
       74 
68 
     | 
    
         
             
                raise AmfSocket::InvalidObject unless (message_id = response_object[:response][:messageId])
         
     | 
| 
       75 
     | 
    
         
            -
                raise AmfSocket::InvalidObject unless ( 
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
                request_object = sent_request[0]
         
     | 
| 
       78 
     | 
    
         
            -
                block = sent_request[1]
         
     | 
| 
       79 
     | 
    
         
            -
                response = AmfSocket::RpcResponse.new(request_object, response_object, self)
         
     | 
| 
      
 69 
     | 
    
         
            +
                raise AmfSocket::InvalidObject unless (request = @sent_requests[message_id])
         
     | 
| 
       80 
70 
     | 
    
         | 
| 
      
 71 
     | 
    
         
            +
                response = AmfSocket::RpcResponse.new(request, response_object)
         
     | 
| 
       81 
72 
     | 
    
         
             
                @sent_requests.delete(message_id)
         
     | 
| 
       82 
73 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
                 
     | 
| 
      
 74 
     | 
    
         
            +
                if request.succeeded_callback.is_a?(Proc)
         
     | 
| 
      
 75 
     | 
    
         
            +
                  request.succeeded_callback.call(response)
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
       84 
77 
     | 
    
         
             
              end
         
     | 
| 
       85 
78 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,35 +1,26 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class AmfSocket::RpcMessage
         
     | 
| 
       2 
     | 
    
         
            -
              attr_reader : 
     | 
| 
      
 2 
     | 
    
         
            +
              attr_reader :message_id
         
     | 
| 
      
 3 
     | 
    
         
            +
              attr_reader :command
         
     | 
| 
      
 4 
     | 
    
         
            +
              attr_reader :params
         
     | 
| 
       3 
5 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
              def initialize( 
     | 
| 
       5 
     | 
    
         
            -
                raise AmfSocket:: 
     | 
| 
      
 6 
     | 
    
         
            +
              def initialize(command, params = {})
         
     | 
| 
      
 7 
     | 
    
         
            +
                raise AmfSocket::InvalidArg.new('Command must be a String.') unless command.is_a?(String)
         
     | 
| 
      
 8 
     | 
    
         
            +
                raise AmfSocket::InvalidArg.new('Params must be a Hash.') unless params.is_a?(Hash)
         
     | 
| 
       6 
9 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
                @ 
     | 
| 
       8 
     | 
    
         
            -
                @ 
     | 
| 
      
 10 
     | 
    
         
            +
                @command = command
         
     | 
| 
      
 11 
     | 
    
         
            +
                @params = params
         
     | 
| 
      
 12 
     | 
    
         
            +
                @message_id = SecureRandom.hex
         
     | 
| 
       9 
13 
     | 
    
         
             
              end
         
     | 
| 
       10 
14 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
              def  
     | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
       13 
     | 
    
         
            -
              end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
              def command
         
     | 
| 
       16 
     | 
    
         
            -
                return @message_obj[:command]
         
     | 
| 
       17 
     | 
    
         
            -
              end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
              def params
         
     | 
| 
       20 
     | 
    
         
            -
                return @message_obj[:params]
         
     | 
| 
       21 
     | 
    
         
            -
              end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
              private
         
     | 
| 
      
 15 
     | 
    
         
            +
              def to_hash
         
     | 
| 
      
 16 
     | 
    
         
            +
                object = {}
         
     | 
| 
       24 
17 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                 
     | 
| 
       27 
     | 
    
         
            -
                 
     | 
| 
       28 
     | 
    
         
            -
                 
     | 
| 
       29 
     | 
    
         
            -
                 
     | 
| 
       30 
     | 
    
         
            -
                return false unless object[:message][:params].is_a?(Hash)
         
     | 
| 
       31 
     | 
    
         
            -
                return false unless object[:message][:messageId].is_a?(String)
         
     | 
| 
      
 18 
     | 
    
         
            +
                object[:type] = 'rpcMessage'
         
     | 
| 
      
 19 
     | 
    
         
            +
                object[:message] = {}
         
     | 
| 
      
 20 
     | 
    
         
            +
                object[:message][:messageId] = message_id
         
     | 
| 
      
 21 
     | 
    
         
            +
                object[:message][:command] = command
         
     | 
| 
      
 22 
     | 
    
         
            +
                object[:message][:params] = params
         
     | 
| 
       32 
23 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                return  
     | 
| 
      
 24 
     | 
    
         
            +
                return object
         
     | 
| 
       34 
25 
     | 
    
         
             
              end
         
     | 
| 
       35 
26 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,35 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class AmfSocket::RpcReceivedMessage
         
     | 
| 
      
 2 
     | 
    
         
            +
              attr_reader :connection
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              def initialize(object, connection)
         
     | 
| 
      
 5 
     | 
    
         
            +
                raise AmfSocket::InvalidObject unless validate_object(object)
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                @message_obj = object[:message]
         
     | 
| 
      
 8 
     | 
    
         
            +
                @connection = connection
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              def message_id
         
     | 
| 
      
 12 
     | 
    
         
            +
                return @message_obj[:messageId]
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              def command
         
     | 
| 
      
 16 
     | 
    
         
            +
                return @message_obj[:command]
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              def params
         
     | 
| 
      
 20 
     | 
    
         
            +
                return @message_obj[:params]
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              private
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def validate_object(object)
         
     | 
| 
      
 26 
     | 
    
         
            +
                return false unless object.is_a?(Hash)
         
     | 
| 
      
 27 
     | 
    
         
            +
                return false unless object[:type] == 'rpcMessage'
         
     | 
| 
      
 28 
     | 
    
         
            +
                return false unless object[:message].is_a?(Hash)
         
     | 
| 
      
 29 
     | 
    
         
            +
                return false unless object[:message][:command].is_a?(String)
         
     | 
| 
      
 30 
     | 
    
         
            +
                return false unless object[:message][:params].is_a?(Hash)
         
     | 
| 
      
 31 
     | 
    
         
            +
                return false unless object[:message][:messageId].is_a?(String)
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                return true
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,51 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class AmfSocket::RpcReceivedRequest
         
     | 
| 
      
 2 
     | 
    
         
            +
              attr_reader :connection
         
     | 
| 
      
 3 
     | 
    
         
            +
              attr_reader :state # Valid states: :initialized, replied.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              def initialize(object, connection)
         
     | 
| 
      
 6 
     | 
    
         
            +
                raise AmfSocket::InvalidObject unless validate_object(object)
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                @request_obj = object[:request]
         
     | 
| 
      
 9 
     | 
    
         
            +
                @connection = connection
         
     | 
| 
      
 10 
     | 
    
         
            +
                @state = :initialized
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def message_id
         
     | 
| 
      
 14 
     | 
    
         
            +
                return @request_obj[:messageId]
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              def command
         
     | 
| 
      
 18 
     | 
    
         
            +
                return @request_obj[:command]
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              def params
         
     | 
| 
      
 22 
     | 
    
         
            +
                return @request_obj[:params]
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def reply(result)
         
     | 
| 
      
 26 
     | 
    
         
            +
                return false if @state == :replied
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                object = {}
         
     | 
| 
      
 29 
     | 
    
         
            +
                object[:type] = 'rpcResponse'
         
     | 
| 
      
 30 
     | 
    
         
            +
                object[:response] = {}
         
     | 
| 
      
 31 
     | 
    
         
            +
                object[:response][:messageId] = message_id
         
     | 
| 
      
 32 
     | 
    
         
            +
                object[:response][:result] = result
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                @connection.send_object(object)
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                return true
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              private
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              def validate_object(object)
         
     | 
| 
      
 42 
     | 
    
         
            +
                return false unless object.is_a?(Hash)
         
     | 
| 
      
 43 
     | 
    
         
            +
                return false unless object[:type] == 'rpcRequest'
         
     | 
| 
      
 44 
     | 
    
         
            +
                return false unless object[:request].is_a?(Hash)
         
     | 
| 
      
 45 
     | 
    
         
            +
                return false unless object[:request][:command].is_a?(String)
         
     | 
| 
      
 46 
     | 
    
         
            +
                return false unless object[:request][:params].is_a?(Hash)
         
     | 
| 
      
 47 
     | 
    
         
            +
                return false unless object[:request][:messageId].is_a?(String)
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                return true
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,51 +1,40 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class AmfSocket::RpcRequest
         
     | 
| 
       2 
     | 
    
         
            -
              attr_reader : 
     | 
| 
       3 
     | 
    
         
            -
              attr_reader : 
     | 
| 
      
 2 
     | 
    
         
            +
              attr_reader :state # Valid states: :initialized, :sent, :responded.
         
     | 
| 
      
 3 
     | 
    
         
            +
              attr_reader :message_id
         
     | 
| 
      
 4 
     | 
    
         
            +
              attr_reader :command
         
     | 
| 
      
 5 
     | 
    
         
            +
              attr_reader :params
         
     | 
| 
       4 
6 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
               
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
              attr_accessor :succeeded_callback
         
     | 
| 
      
 8 
     | 
    
         
            +
              attr_accessor :failed_callback
         
     | 
| 
      
 9 
     | 
    
         
            +
              attr_accessor :timeout
         
     | 
| 
       7 
10 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                 
     | 
| 
       10 
     | 
    
         
            -
                 
     | 
| 
       11 
     | 
    
         
            -
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
              def initialize(command, params = {})
         
     | 
| 
      
 12 
     | 
    
         
            +
                raise AmfSocket::InvalidArg.new('Command must be a String.') unless command.is_a?(String)
         
     | 
| 
      
 13 
     | 
    
         
            +
                raise AmfSocket::InvalidArg.new('Params must be a Hash.') unless params.is_a?(Hash)
         
     | 
| 
       12 
14 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                 
     | 
| 
      
 15 
     | 
    
         
            +
                @command = command
         
     | 
| 
      
 16 
     | 
    
         
            +
                @params = params
         
     | 
| 
      
 17 
     | 
    
         
            +
                @state = :initialized
         
     | 
| 
      
 18 
     | 
    
         
            +
                @message_id = SecureRandom.hex
         
     | 
| 
       15 
19 
     | 
    
         
             
              end
         
     | 
| 
       16 
20 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
              def  
     | 
| 
       18 
     | 
    
         
            -
                 
     | 
| 
      
 21 
     | 
    
         
            +
              def succeeded(&block)
         
     | 
| 
      
 22 
     | 
    
         
            +
                @succeeded_callback = block
         
     | 
| 
       19 
23 
     | 
    
         
             
              end
         
     | 
| 
       20 
24 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
              def  
     | 
| 
       22 
     | 
    
         
            -
                 
     | 
| 
      
 25 
     | 
    
         
            +
              def failed(&block)
         
     | 
| 
      
 26 
     | 
    
         
            +
                @failed_callback = block
         
     | 
| 
       23 
27 
     | 
    
         
             
              end
         
     | 
| 
       24 
28 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
              def  
     | 
| 
       26 
     | 
    
         
            -
                return false if @state == :replied
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
      
 29 
     | 
    
         
            +
              def to_hash
         
     | 
| 
       28 
30 
     | 
    
         
             
                object = {}
         
     | 
| 
       29 
     | 
    
         
            -
                object[:type] = 'rpcResponse'
         
     | 
| 
       30 
     | 
    
         
            -
                object[:response] = {}
         
     | 
| 
       31 
     | 
    
         
            -
                object[:response][:messageId] = message_id
         
     | 
| 
       32 
     | 
    
         
            -
                object[:response][:result] = result
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                @connection.send_object(object)
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                return true
         
     | 
| 
       37 
     | 
    
         
            -
              end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
              private
         
     | 
| 
       40 
31 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                 
     | 
| 
       43 
     | 
    
         
            -
                 
     | 
| 
       44 
     | 
    
         
            -
                 
     | 
| 
       45 
     | 
    
         
            -
                 
     | 
| 
       46 
     | 
    
         
            -
                return false unless object[:request][:params].is_a?(Hash)
         
     | 
| 
       47 
     | 
    
         
            -
                return false unless object[:request][:messageId].is_a?(String)
         
     | 
| 
      
 32 
     | 
    
         
            +
                object[:type] = 'rpcRequest'
         
     | 
| 
      
 33 
     | 
    
         
            +
                object[:request] = {}
         
     | 
| 
      
 34 
     | 
    
         
            +
                object[:request][:messageId] = message_id
         
     | 
| 
      
 35 
     | 
    
         
            +
                object[:request][:command] = command
         
     | 
| 
      
 36 
     | 
    
         
            +
                object[:request][:params] = params
         
     | 
| 
       48 
37 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
                return  
     | 
| 
      
 38 
     | 
    
         
            +
                return object
         
     | 
| 
       50 
39 
     | 
    
         
             
              end
         
     | 
| 
       51 
40 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,21 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class AmfSocket::RpcResponse
         
     | 
| 
       2 
     | 
    
         
            -
              attr_reader : 
     | 
| 
       3 
     | 
    
         
            -
              attr_reader :message_id
         
     | 
| 
       4 
     | 
    
         
            -
              attr_reader :command
         
     | 
| 
       5 
     | 
    
         
            -
              attr_reader :params
         
     | 
| 
      
 2 
     | 
    
         
            +
              attr_reader :request
         
     | 
| 
       6 
3 
     | 
    
         
             
              attr_reader :result
         
     | 
| 
       7 
4 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
              def initialize( 
     | 
| 
      
 5 
     | 
    
         
            +
              def initialize(request, response_object)
         
     | 
| 
       9 
6 
     | 
    
         
             
                raise AmfSocket::InvalidObject unless validate_object(response_object)
         
     | 
| 
       10 
7 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
                 
     | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                @connection = connection
         
     | 
| 
       15 
     | 
    
         
            -
                @message_id = req[:messageId]
         
     | 
| 
       16 
     | 
    
         
            -
                @command = req[:command]
         
     | 
| 
       17 
     | 
    
         
            -
                @params = req[:params]
         
     | 
| 
       18 
     | 
    
         
            -
                @result = res[:result]
         
     | 
| 
      
 8 
     | 
    
         
            +
                @result = response_object[:response][:result]
         
     | 
| 
      
 9 
     | 
    
         
            +
                @request = request
         
     | 
| 
       19 
10 
     | 
    
         
             
              end
         
     | 
| 
       20 
11 
     | 
    
         | 
| 
       21 
12 
     | 
    
         
             
              private
         
     | 
    
        data/lib/amf_socket/version.rb
    CHANGED
    
    
    
        data/lib/amf_socket.rb
    CHANGED
    
    | 
         @@ -1,5 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'eventmachine'
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'rocketamf'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'securerandom'
         
     | 
| 
       3 
4 
     | 
    
         | 
| 
       4 
5 
     | 
    
         
             
            module AmfSocket; end
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
         @@ -7,7 +8,9 @@ require 'amf_socket/version' 
     | 
|
| 
       7 
8 
     | 
    
         
             
            require 'amf_socket/amf_connection'
         
     | 
| 
       8 
9 
     | 
    
         
             
            require 'amf_socket/amf_rpc_connection'
         
     | 
| 
       9 
10 
     | 
    
         
             
            require 'amf_socket/rpc_request'
         
     | 
| 
       10 
     | 
    
         
            -
            require 'amf_socket/rpc_message'
         
     | 
| 
       11 
11 
     | 
    
         
             
            require 'amf_socket/rpc_response'
         
     | 
| 
      
 12 
     | 
    
         
            +
            require 'amf_socket/rpc_message'
         
     | 
| 
      
 13 
     | 
    
         
            +
            require 'amf_socket/rpc_received_request'
         
     | 
| 
      
 14 
     | 
    
         
            +
            require 'amf_socket/rpc_received_message'
         
     | 
| 
       12 
15 
     | 
    
         
             
            require 'amf_socket/serializer'
         
     | 
| 
       13 
16 
     | 
    
         
             
            require 'amf_socket/exceptions'
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: amf_socket
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.0
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2012-08- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2012-08-25 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: eventmachine
         
     | 
| 
         @@ -62,11 +62,13 @@ files: 
     | 
|
| 
       62 
62 
     | 
    
         
             
            - lib/amf_socket/amf_rpc_connection.rb
         
     | 
| 
       63 
63 
     | 
    
         
             
            - lib/amf_socket/exceptions.rb
         
     | 
| 
       64 
64 
     | 
    
         
             
            - lib/amf_socket/rpc_message.rb
         
     | 
| 
      
 65 
     | 
    
         
            +
            - lib/amf_socket/rpc_received_message.rb
         
     | 
| 
      
 66 
     | 
    
         
            +
            - lib/amf_socket/rpc_received_request.rb
         
     | 
| 
       65 
67 
     | 
    
         
             
            - lib/amf_socket/rpc_request.rb
         
     | 
| 
       66 
68 
     | 
    
         
             
            - lib/amf_socket/rpc_response.rb
         
     | 
| 
       67 
69 
     | 
    
         
             
            - lib/amf_socket/serializer.rb
         
     | 
| 
       68 
70 
     | 
    
         
             
            - lib/amf_socket/version.rb
         
     | 
| 
       69 
     | 
    
         
            -
            homepage:  
     | 
| 
      
 71 
     | 
    
         
            +
            homepage: https://github.com/chadrem/observation
         
     | 
| 
       70 
72 
     | 
    
         
             
            licenses: []
         
     | 
| 
       71 
73 
     | 
    
         
             
            post_install_message: 
         
     | 
| 
       72 
74 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
         @@ -80,7 +82,7 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       80 
82 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       81 
83 
     | 
    
         
             
                  segments:
         
     | 
| 
       82 
84 
     | 
    
         
             
                  - 0
         
     | 
| 
       83 
     | 
    
         
            -
                  hash:  
     | 
| 
      
 85 
     | 
    
         
            +
                  hash: -337065738793524363
         
     | 
| 
       84 
86 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       85 
87 
     | 
    
         
             
              none: false
         
     | 
| 
       86 
88 
     | 
    
         
             
              requirements:
         
     | 
| 
         @@ -89,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       89 
91 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       90 
92 
     | 
    
         
             
                  segments:
         
     | 
| 
       91 
93 
     | 
    
         
             
                  - 0
         
     | 
| 
       92 
     | 
    
         
            -
                  hash:  
     | 
| 
      
 94 
     | 
    
         
            +
                  hash: -337065738793524363
         
     | 
| 
       93 
95 
     | 
    
         
             
            requirements: []
         
     | 
| 
       94 
96 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       95 
97 
     | 
    
         
             
            rubygems_version: 1.8.24
         
     |