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
|