troystribling-agent_xmpp 0.0.0 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +397 -2
- data/Rakefile +33 -21
- data/VERSION +1 -1
- data/agent_xmpp.gemspec +78 -33
- data/lib/agent_xmpp.rb +11 -7
- data/lib/agent_xmpp/app.rb +0 -5
- data/lib/agent_xmpp/app/boot.rb +47 -33
- data/lib/agent_xmpp/app/controller.rb +135 -19
- data/lib/agent_xmpp/client.rb +6 -1
- data/lib/agent_xmpp/client/client.rb +22 -155
- data/lib/agent_xmpp/client/connection.rb +41 -250
- data/lib/agent_xmpp/client/message_delegate.rb +706 -0
- data/lib/agent_xmpp/client/message_pipe.rb +176 -0
- data/lib/agent_xmpp/client/publish_model.rb +65 -0
- data/lib/agent_xmpp/{app/format.rb → client/response.rb} +19 -24
- data/lib/agent_xmpp/client/roster_model.rb +139 -0
- data/lib/agent_xmpp/client/services_model.rb +97 -0
- data/lib/agent_xmpp/config.rb +45 -0
- data/lib/agent_xmpp/main.rb +126 -0
- data/lib/agent_xmpp/patches.rb +6 -2
- data/lib/agent_xmpp/patches/{standard_library_patches/array.rb → array.rb} +14 -7
- data/lib/agent_xmpp/patches/{standard_library_patches/float.rb → float.rb} +0 -0
- data/lib/agent_xmpp/patches/{standard_library_patches/hash.rb → hash.rb} +3 -3
- data/lib/agent_xmpp/patches/{standard_library_patches/object.rb → object.rb} +3 -3
- data/lib/agent_xmpp/patches/rexml.rb +69 -0
- data/lib/agent_xmpp/patches/{standard_library_patches/string.rb → string.rb} +5 -0
- data/lib/agent_xmpp/xmpp.rb +17 -0
- data/lib/agent_xmpp/xmpp/element.rb +159 -0
- data/lib/agent_xmpp/xmpp/error_response.rb +179 -0
- data/lib/agent_xmpp/xmpp/iq.rb +90 -0
- data/lib/agent_xmpp/xmpp/iq_command.rb +47 -0
- data/lib/agent_xmpp/xmpp/iq_disco.rb +205 -0
- data/lib/agent_xmpp/xmpp/iq_pubsub.rb +268 -0
- data/lib/agent_xmpp/xmpp/iq_roster.rb +183 -0
- data/lib/agent_xmpp/xmpp/iq_version.rb +89 -0
- data/lib/agent_xmpp/xmpp/jid.rb +150 -0
- data/lib/agent_xmpp/xmpp/message.rb +82 -0
- data/lib/agent_xmpp/xmpp/presence.rb +127 -0
- data/lib/agent_xmpp/xmpp/sasl.rb +241 -0
- data/lib/agent_xmpp/xmpp/stanza.rb +107 -0
- data/lib/agent_xmpp/xmpp/x_data.rb +269 -0
- data/test/app/app.rb +134 -0
- data/test/cases/test_application_message_processing.rb +65 -0
- data/test/cases/test_errors.rb +24 -0
- data/test/cases/test_presence_management.rb +139 -0
- data/test/cases/test_roster_management.rb +214 -0
- data/test/cases/test_service_discovery.rb +168 -0
- data/test/cases/test_session_management.rb +120 -0
- data/test/cases/test_version_discovery.rb +67 -0
- data/test/helpers/matchers.rb +23 -0
- data/test/helpers/mocks.rb +82 -0
- data/test/helpers/test_case_extensions.rb +45 -0
- data/test/helpers/test_client.rb +44 -0
- data/test/helpers/test_delegate.rb +61 -0
- data/test/helpers/test_helper.rb +91 -0
- data/test/messages/application_messages.rb +206 -0
- data/test/messages/error_messages.rb +35 -0
- data/test/messages/presence_messages.rb +66 -0
- data/test/messages/roster_messages.rb +126 -0
- data/test/messages/service_discovery_messages.rb +201 -0
- data/test/messages/session_messages.rb +158 -0
- data/test/messages/version_discovery_messages.rb +69 -0
- data/test/peer/peer.rb +36 -0
- data/test/xml_messages.txt +197 -0
- metadata +82 -42
- data/bin/agent_xmpp +0 -56
- data/lib/agent_xmpp/app/chat_message_body_controller.rb +0 -16
- data/lib/agent_xmpp/app/map.rb +0 -45
- data/lib/agent_xmpp/app/routes.rb +0 -77
- data/lib/agent_xmpp/app/view.rb +0 -49
- data/lib/agent_xmpp/client/parser.rb +0 -71
- data/lib/agent_xmpp/patches/standard_library_patches.rb +0 -5
- data/lib/agent_xmpp/patches/xmpp4r_patches.rb +0 -3
- data/lib/agent_xmpp/patches/xmpp4r_patches/command.rb +0 -26
- data/lib/agent_xmpp/patches/xmpp4r_patches/iq.rb +0 -26
- data/lib/agent_xmpp/patches/xmpp4r_patches/x_data.rb +0 -116
- data/lib/agent_xmpp/utils.rb +0 -2
- data/lib/agent_xmpp/utils/logger.rb +0 -24
- data/lib/agent_xmpp/utils/roster.rb +0 -23
- data/lib/agent_xmpp/version.rb +0 -6
- data/test/agent_xmpp_test.rb +0 -7
- data/test/test_helper.rb +0 -10
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.1
|
data/agent_xmpp.gemspec
CHANGED
@@ -2,14 +2,12 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{agent_xmpp}
|
5
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Troy Stribling"]
|
9
|
-
s.date = %q{2009-
|
10
|
-
s.default_executable = %q{agent_xmpp}
|
9
|
+
s.date = %q{2009-08-03}
|
11
10
|
s.email = %q{troy.stribling@gmail.com}
|
12
|
-
s.executables = ["agent_xmpp"]
|
13
11
|
s.extra_rdoc_files = [
|
14
12
|
"LICENSE",
|
15
13
|
"README.rdoc"
|
@@ -21,48 +19,98 @@ Gem::Specification.new do |s|
|
|
21
19
|
"README.rdoc",
|
22
20
|
"Rakefile",
|
23
21
|
"VERSION",
|
22
|
+
"VERSION",
|
24
23
|
"agent_xmpp.gemspec",
|
25
|
-
"bin/agent_xmpp",
|
26
24
|
"lib/agent_xmpp.rb",
|
27
25
|
"lib/agent_xmpp/app.rb",
|
28
26
|
"lib/agent_xmpp/app/boot.rb",
|
29
|
-
"lib/agent_xmpp/app/chat_message_body_controller.rb",
|
30
27
|
"lib/agent_xmpp/app/controller.rb",
|
31
|
-
"lib/agent_xmpp/app/format.rb",
|
32
|
-
"lib/agent_xmpp/app/map.rb",
|
33
|
-
"lib/agent_xmpp/app/routes.rb",
|
34
|
-
"lib/agent_xmpp/app/view.rb",
|
35
28
|
"lib/agent_xmpp/client.rb",
|
36
29
|
"lib/agent_xmpp/client/client.rb",
|
37
30
|
"lib/agent_xmpp/client/connection.rb",
|
38
|
-
"lib/agent_xmpp/client/
|
31
|
+
"lib/agent_xmpp/client/message_delegate.rb",
|
32
|
+
"lib/agent_xmpp/client/message_pipe.rb",
|
33
|
+
"lib/agent_xmpp/client/publish_model.rb",
|
34
|
+
"lib/agent_xmpp/client/response.rb",
|
35
|
+
"lib/agent_xmpp/client/roster_model.rb",
|
36
|
+
"lib/agent_xmpp/client/services_model.rb",
|
37
|
+
"lib/agent_xmpp/config.rb",
|
38
|
+
"lib/agent_xmpp/main.rb",
|
39
39
|
"lib/agent_xmpp/patches.rb",
|
40
|
-
"lib/agent_xmpp/patches/
|
41
|
-
"lib/agent_xmpp/patches/
|
42
|
-
"lib/agent_xmpp/patches/
|
43
|
-
"lib/agent_xmpp/patches/
|
44
|
-
"lib/agent_xmpp/patches/
|
45
|
-
"lib/agent_xmpp/patches/
|
46
|
-
"lib/agent_xmpp/
|
47
|
-
"lib/agent_xmpp/
|
48
|
-
"lib/agent_xmpp/
|
49
|
-
"lib/agent_xmpp/
|
50
|
-
"lib/agent_xmpp/
|
51
|
-
"lib/agent_xmpp/
|
52
|
-
"lib/agent_xmpp/
|
53
|
-
"lib/agent_xmpp/
|
54
|
-
"
|
55
|
-
"
|
40
|
+
"lib/agent_xmpp/patches/array.rb",
|
41
|
+
"lib/agent_xmpp/patches/float.rb",
|
42
|
+
"lib/agent_xmpp/patches/hash.rb",
|
43
|
+
"lib/agent_xmpp/patches/object.rb",
|
44
|
+
"lib/agent_xmpp/patches/rexml.rb",
|
45
|
+
"lib/agent_xmpp/patches/string.rb",
|
46
|
+
"lib/agent_xmpp/xmpp.rb",
|
47
|
+
"lib/agent_xmpp/xmpp/element.rb",
|
48
|
+
"lib/agent_xmpp/xmpp/error_response.rb",
|
49
|
+
"lib/agent_xmpp/xmpp/iq.rb",
|
50
|
+
"lib/agent_xmpp/xmpp/iq_command.rb",
|
51
|
+
"lib/agent_xmpp/xmpp/iq_disco.rb",
|
52
|
+
"lib/agent_xmpp/xmpp/iq_pubsub.rb",
|
53
|
+
"lib/agent_xmpp/xmpp/iq_roster.rb",
|
54
|
+
"lib/agent_xmpp/xmpp/iq_version.rb",
|
55
|
+
"lib/agent_xmpp/xmpp/jid.rb",
|
56
|
+
"lib/agent_xmpp/xmpp/message.rb",
|
57
|
+
"lib/agent_xmpp/xmpp/presence.rb",
|
58
|
+
"lib/agent_xmpp/xmpp/sasl.rb",
|
59
|
+
"lib/agent_xmpp/xmpp/stanza.rb",
|
60
|
+
"lib/agent_xmpp/xmpp/x_data.rb",
|
61
|
+
"test/app/app.rb",
|
62
|
+
"test/cases/test_application_message_processing.rb",
|
63
|
+
"test/cases/test_errors.rb",
|
64
|
+
"test/cases/test_presence_management.rb",
|
65
|
+
"test/cases/test_roster_management.rb",
|
66
|
+
"test/cases/test_service_discovery.rb",
|
67
|
+
"test/cases/test_session_management.rb",
|
68
|
+
"test/cases/test_version_discovery.rb",
|
69
|
+
"test/helpers/matchers.rb",
|
70
|
+
"test/helpers/mocks.rb",
|
71
|
+
"test/helpers/test_case_extensions.rb",
|
72
|
+
"test/helpers/test_client.rb",
|
73
|
+
"test/helpers/test_delegate.rb",
|
74
|
+
"test/helpers/test_helper.rb",
|
75
|
+
"test/messages/application_messages.rb",
|
76
|
+
"test/messages/error_messages.rb",
|
77
|
+
"test/messages/presence_messages.rb",
|
78
|
+
"test/messages/roster_messages.rb",
|
79
|
+
"test/messages/service_discovery_messages.rb",
|
80
|
+
"test/messages/session_messages.rb",
|
81
|
+
"test/messages/version_discovery_messages.rb",
|
82
|
+
"test/peer/peer.rb",
|
83
|
+
"test/xml_messages.txt"
|
56
84
|
]
|
57
85
|
s.has_rdoc = true
|
58
86
|
s.homepage = %q{http://github.com/troystribling/agent_xmpp}
|
59
87
|
s.rdoc_options = ["--charset=UTF-8"]
|
60
88
|
s.require_paths = ["lib"]
|
61
89
|
s.rubygems_version = %q{1.3.1}
|
62
|
-
s.summary = %q{
|
90
|
+
s.summary = %q{Agent XMPP is a ruby XMPP bot framework inspired by MVC web frameworks.}
|
63
91
|
s.test_files = [
|
64
|
-
"test/
|
65
|
-
"test/
|
92
|
+
"test/app/app.rb",
|
93
|
+
"test/cases/test_application_message_processing.rb",
|
94
|
+
"test/cases/test_errors.rb",
|
95
|
+
"test/cases/test_presence_management.rb",
|
96
|
+
"test/cases/test_roster_management.rb",
|
97
|
+
"test/cases/test_service_discovery.rb",
|
98
|
+
"test/cases/test_session_management.rb",
|
99
|
+
"test/cases/test_version_discovery.rb",
|
100
|
+
"test/helpers/matchers.rb",
|
101
|
+
"test/helpers/mocks.rb",
|
102
|
+
"test/helpers/test_case_extensions.rb",
|
103
|
+
"test/helpers/test_client.rb",
|
104
|
+
"test/helpers/test_delegate.rb",
|
105
|
+
"test/helpers/test_helper.rb",
|
106
|
+
"test/messages/application_messages.rb",
|
107
|
+
"test/messages/error_messages.rb",
|
108
|
+
"test/messages/presence_messages.rb",
|
109
|
+
"test/messages/roster_messages.rb",
|
110
|
+
"test/messages/service_discovery_messages.rb",
|
111
|
+
"test/messages/session_messages.rb",
|
112
|
+
"test/messages/version_discovery_messages.rb",
|
113
|
+
"test/peer/peer.rb"
|
66
114
|
]
|
67
115
|
|
68
116
|
if s.respond_to? :specification_version then
|
@@ -73,17 +121,14 @@ Gem::Specification.new do |s|
|
|
73
121
|
s.add_runtime_dependency(%q<rake>, [">= 0.8.3"])
|
74
122
|
s.add_runtime_dependency(%q<eventmachine>, ["= 0.12.6"])
|
75
123
|
s.add_runtime_dependency(%q<troystribling-evma_xmlpushparser>, ["= 0.0.1"])
|
76
|
-
s.add_runtime_dependency(%q<xmpp4r>, ["= 0.4"])
|
77
124
|
else
|
78
125
|
s.add_dependency(%q<rake>, [">= 0.8.3"])
|
79
126
|
s.add_dependency(%q<eventmachine>, ["= 0.12.6"])
|
80
127
|
s.add_dependency(%q<troystribling-evma_xmlpushparser>, ["= 0.0.1"])
|
81
|
-
s.add_dependency(%q<xmpp4r>, ["= 0.4"])
|
82
128
|
end
|
83
129
|
else
|
84
130
|
s.add_dependency(%q<rake>, [">= 0.8.3"])
|
85
131
|
s.add_dependency(%q<eventmachine>, ["= 0.12.6"])
|
86
132
|
s.add_dependency(%q<troystribling-evma_xmlpushparser>, ["= 0.0.1"])
|
87
|
-
s.add_dependency(%q<xmpp4r>, ["= 0.4"])
|
88
133
|
end
|
89
134
|
end
|
data/lib/agent_xmpp.rb
CHANGED
@@ -1,16 +1,20 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__))
|
2
|
+
|
1
3
|
require 'find'
|
2
4
|
require 'ftools'
|
5
|
+
require 'singleton'
|
6
|
+
require 'logger'
|
7
|
+
require 'socket'
|
8
|
+
require 'optparse'
|
9
|
+
require 'rexml/document'
|
10
|
+
require 'base64'
|
3
11
|
|
4
12
|
require 'eventmachine'
|
5
13
|
require 'evma_xmlpushparser'
|
6
|
-
require 'xmpp4r'
|
7
|
-
require 'xmpp4r/roster'
|
8
|
-
require 'xmpp4r/version'
|
9
|
-
require 'xmpp4r/dataforms'
|
10
|
-
require 'xmpp4r/command/iq/command'
|
11
14
|
|
12
|
-
require 'agent_xmpp/version'
|
13
15
|
require 'agent_xmpp/patches'
|
14
16
|
require 'agent_xmpp/app'
|
15
17
|
require 'agent_xmpp/client'
|
16
|
-
require 'agent_xmpp/
|
18
|
+
require 'agent_xmpp/xmpp'
|
19
|
+
require 'agent_xmpp/config'
|
20
|
+
require 'agent_xmpp/main'
|
data/lib/agent_xmpp/app.rb
CHANGED
data/lib/agent_xmpp/app/boot.rb
CHANGED
@@ -6,7 +6,6 @@ module AgentXmpp
|
|
6
6
|
|
7
7
|
#.......................................................................................................
|
8
8
|
@config_load_order = []
|
9
|
-
@app_load_order = []
|
10
9
|
|
11
10
|
####......................................................................................................
|
12
11
|
class << self
|
@@ -15,47 +14,62 @@ module AgentXmpp
|
|
15
14
|
attr_accessor :config_load_order, :app_load_order
|
16
15
|
|
17
16
|
#.......................................................................................................
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
define_meta_class_method(:call_before_config_load, &blk)
|
25
|
-
end
|
17
|
+
def boot
|
18
|
+
|
19
|
+
####..............
|
20
|
+
AgentXmpp.log_file = add_path(AgentXmpp.log_file) if AgentXmpp.log_file.kind_of?(String)
|
21
|
+
AgentXmpp.config_file = add_path(AgentXmpp.config_file)
|
22
|
+
AgentXmpp.logger = Logger.new(AgentXmpp.log_file, 10, 1024000)
|
26
23
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
24
|
+
####..............
|
25
|
+
AgentXmpp.logger.info "STARTING AgentXmpp"
|
26
|
+
AgentXmpp.logger.info "APPLICATION PATH: #{AgentXmpp.app_path}"
|
27
|
+
AgentXmpp.logger.info "LOG FILE: #{AgentXmpp.log_file.kind_of?(String) ? AgentXmpp.log_file : "STDOUT"}"
|
28
|
+
AgentXmpp.logger.info "CONFIGURATION FILE: #{AgentXmpp.config_file}"
|
29
|
+
AgentXmpp.logger.level = Logger::WARN
|
31
30
|
|
32
|
-
|
33
|
-
|
34
|
-
define_meta_class_method(:call_before_app_load, &blk)
|
35
|
-
end
|
31
|
+
####..............
|
32
|
+
raise AgentXmppError, "Configuration file #{AgentXmpp.config_file} required." unless File.exist?(AgentXmpp.config_file)
|
36
33
|
|
34
|
+
####..............
|
35
|
+
AgentXmpp.config = File.open(AgentXmpp.config_file) {|yf| YAML::load(yf)}
|
36
|
+
call_if_implemented(:call_before_start)
|
37
|
+
AgentXmpp::Client.new().connect
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
####....................................................................................................
|
42
|
+
# application deligate methods
|
37
43
|
#.......................................................................................................
|
38
|
-
def
|
39
|
-
|
44
|
+
def call_if_implemented(method, *args)
|
45
|
+
send(method, *args) if respond_to?(method)
|
40
46
|
end
|
41
|
-
|
42
|
-
|
43
|
-
def
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
if file_match = /(.*)\.rb$/.match(file_path)
|
49
|
-
file = file_match.captures.last
|
50
|
-
unless exclude_files.include?(file) and ordered_files.include?(file)
|
51
|
-
require file
|
47
|
+
|
48
|
+
#.........................................................................................................
|
49
|
+
def callbacks(*args)
|
50
|
+
args.each do |meth|
|
51
|
+
instance_eval <<-do_eval
|
52
|
+
def #{meth}(&blk)
|
53
|
+
define_meta_class_method(:call_#{meth}, &blk)
|
52
54
|
end
|
53
|
-
|
55
|
+
do_eval
|
54
56
|
end
|
57
|
+
end
|
58
|
+
|
59
|
+
####......................................................................................................
|
60
|
+
private
|
61
|
+
|
62
|
+
#.......................................................................................................
|
63
|
+
def add_path(dir)
|
64
|
+
File.join(AgentXmpp.app_path, dir)
|
55
65
|
end
|
56
|
-
|
66
|
+
|
67
|
+
#### self
|
57
68
|
end
|
58
|
-
|
69
|
+
|
70
|
+
#.........................................................................................................
|
71
|
+
callbacks(:before_start, :after_connected, :discovered_all_publish_nodes, :discovered_command_nodes,
|
72
|
+
:discovered_pubsub_node, :received_presence, :restarting_client)
|
59
73
|
|
60
74
|
#### Boot
|
61
75
|
end
|
@@ -2,40 +2,156 @@
|
|
2
2
|
module AgentXmpp
|
3
3
|
|
4
4
|
#####-------------------------------------------------------------------------------------------------------
|
5
|
-
class
|
5
|
+
class BaseController
|
6
6
|
|
7
7
|
#---------------------------------------------------------------------------------------------------------
|
8
|
-
|
8
|
+
@routes = {}
|
9
|
+
|
9
10
|
#---------------------------------------------------------------------------------------------------------
|
11
|
+
class << self
|
12
|
+
|
13
|
+
#.........................................................................................................
|
14
|
+
attr_reader :routes
|
10
15
|
|
11
|
-
|
12
|
-
|
16
|
+
#.........................................................................................................
|
17
|
+
def execute(node, opts = {}, &blk)
|
18
|
+
route(:execute, {:node => node, :opts => opts, :blk => blk})
|
19
|
+
end
|
20
|
+
|
21
|
+
#.........................................................................................................
|
22
|
+
def event(jid, node, opts = {}, &blk)
|
23
|
+
j = Xmpp::Jid.new(jid)
|
24
|
+
route(:event, {:node => "/home/#{j.domain}/#{j.node}/#{node}", :domain => j.domain, :opts => opts, :blk => blk})
|
25
|
+
end
|
26
|
+
|
27
|
+
#.........................................................................................................
|
28
|
+
def chat(opts = {}, &blk)
|
29
|
+
route(:chat, {:opts => opts, :blk => blk})
|
30
|
+
end
|
31
|
+
|
32
|
+
#.........................................................................................................
|
33
|
+
def route(action, nroute)
|
34
|
+
(routes[action] ||= []).push(nroute).last
|
35
|
+
end
|
36
|
+
|
37
|
+
#.........................................................................................................
|
38
|
+
def command_nodes
|
39
|
+
(routes[:execute] ||= []).map{|r| r[:node]}
|
40
|
+
end
|
41
|
+
|
42
|
+
#.........................................................................................................
|
43
|
+
def subscriptions(service)
|
44
|
+
(routes[:event] ||= []).inject([]){|s,r| /#{r[:domain]}/.match(service) ? s << r[:node] : s}
|
45
|
+
end
|
46
|
+
|
47
|
+
#.........................................................................................................
|
48
|
+
def event_domains
|
49
|
+
(routes[:event] ||= []).map{|r| r[:domain]}.uniq
|
50
|
+
end
|
51
|
+
|
52
|
+
#### self
|
13
53
|
end
|
14
|
-
|
15
|
-
#---------------------------------------------------------------------------------------------------------
|
16
|
-
# handle request
|
54
|
+
|
17
55
|
#.........................................................................................................
|
18
|
-
|
56
|
+
attr_reader :params, :pipe
|
57
|
+
|
58
|
+
#.........................................................................................................
|
59
|
+
def initialize(pipe, params)
|
19
60
|
@params = params
|
20
|
-
@
|
21
|
-
@format = Format.new(params[:xmlns])
|
22
|
-
send(action)
|
61
|
+
@pipe = pipe
|
23
62
|
end
|
24
63
|
|
64
|
+
#.......................................................................................................
|
65
|
+
def invoke_execute
|
66
|
+
route = get_route(params[:action])
|
67
|
+
unless route.nil?
|
68
|
+
define_meta_class_method(:request, &route[:blk])
|
69
|
+
define_meta_class_method(:request_callback) do |*result|
|
70
|
+
result = result.first if result.length.eql?(1)
|
71
|
+
add_payload_to_container(result.nil? ? nil : result.to_x_data)
|
72
|
+
end
|
73
|
+
handle_request
|
74
|
+
else
|
75
|
+
AgentXmpp.logger.error "ROUTING ERROR: no route for {:node => '#{params[:node]}', :action => '#{params[:action]}'}."
|
76
|
+
Xmpp::ErrorResponse.no_route(params)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
#.......................................................................................................
|
81
|
+
def invoke_event
|
82
|
+
route = get_route(:event)
|
83
|
+
unless route.nil?
|
84
|
+
define_meta_class_method(:request, &route[:blk])
|
85
|
+
handle_request
|
86
|
+
else
|
87
|
+
AgentXmpp.logger.error "ROUTING ERROR: no route for {:node => '#{params[:node]}'}."
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
#.......................................................................................................
|
92
|
+
def invoke_chat
|
93
|
+
route = chat_route
|
94
|
+
unless route.nil?
|
95
|
+
define_meta_class_method(:request, &route[:blk])
|
96
|
+
else
|
97
|
+
define_meta_class_method(:request) do
|
98
|
+
"#{AgentXmpp::AGENT_XMPP_NAME} #{AgentXmpp::VERSION}, #{AgentXmpp::OS_VERSION}"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
define_meta_class_method(:request_callback) do |result|
|
102
|
+
add_payload_to_container(result) if result.kind_of?(String)
|
103
|
+
end
|
104
|
+
handle_request
|
105
|
+
end
|
106
|
+
|
25
107
|
#.........................................................................................................
|
26
|
-
def
|
27
|
-
|
108
|
+
def handle_request
|
109
|
+
EventMachine.defer(method(:request).to_proc, respond_to?(:request_callback) ? method(:request_callback).to_proc : nil)
|
28
110
|
end
|
29
111
|
|
30
112
|
#.........................................................................................................
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
113
|
+
# add payloads
|
114
|
+
#.........................................................................................................
|
115
|
+
def result_jabber_x_data(params, payload)
|
116
|
+
Xmpp::IqCommand.result(:to => params[:from], :id => params[:id], :node => params[:node], :payload => payload)
|
117
|
+
end
|
118
|
+
|
119
|
+
#.........................................................................................................
|
120
|
+
def result_message_chat(params, payload)
|
121
|
+
Xmpp::Message.chat(params[:from], payload)
|
37
122
|
end
|
38
123
|
|
124
|
+
private
|
125
|
+
|
126
|
+
#.........................................................................................................
|
127
|
+
def add_payload_to_container(payload)
|
128
|
+
meth = "result_#{params[:xmlns].gsub(/:/, "_")}".to_sym
|
129
|
+
if respond_to?(meth)
|
130
|
+
pipe.send_resp(send(meth, params, payload))
|
131
|
+
else
|
132
|
+
AgentXmpp.logger.error "PAYLOAD ERROR: unsupported payload {:xmlns => '#{params[:xmlns]}', :node => '#{params[:node]}', :action => '#{params[:action]}'}."
|
133
|
+
Xmpp::ErrorResponse.unsupported_payload(params)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
#.........................................................................................................
|
138
|
+
# routes
|
139
|
+
#.........................................................................................................
|
140
|
+
def get_route(action)
|
141
|
+
(BaseController.routes[action] || []).select{|r| r[:node].eql?(params[:node].to_s)}.first
|
142
|
+
end
|
143
|
+
|
144
|
+
#.........................................................................................................
|
145
|
+
def chat_route
|
146
|
+
(BaseController.routes[:chat] ||= []).first
|
147
|
+
end
|
148
|
+
|
149
|
+
#### BaseController
|
150
|
+
end
|
151
|
+
|
152
|
+
##############################################################################################################
|
153
|
+
class Controller < BaseController
|
154
|
+
|
39
155
|
#### Controller
|
40
156
|
end
|
41
157
|
|