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.
Files changed (82) hide show
  1. data/README.rdoc +397 -2
  2. data/Rakefile +33 -21
  3. data/VERSION +1 -1
  4. data/agent_xmpp.gemspec +78 -33
  5. data/lib/agent_xmpp.rb +11 -7
  6. data/lib/agent_xmpp/app.rb +0 -5
  7. data/lib/agent_xmpp/app/boot.rb +47 -33
  8. data/lib/agent_xmpp/app/controller.rb +135 -19
  9. data/lib/agent_xmpp/client.rb +6 -1
  10. data/lib/agent_xmpp/client/client.rb +22 -155
  11. data/lib/agent_xmpp/client/connection.rb +41 -250
  12. data/lib/agent_xmpp/client/message_delegate.rb +706 -0
  13. data/lib/agent_xmpp/client/message_pipe.rb +176 -0
  14. data/lib/agent_xmpp/client/publish_model.rb +65 -0
  15. data/lib/agent_xmpp/{app/format.rb → client/response.rb} +19 -24
  16. data/lib/agent_xmpp/client/roster_model.rb +139 -0
  17. data/lib/agent_xmpp/client/services_model.rb +97 -0
  18. data/lib/agent_xmpp/config.rb +45 -0
  19. data/lib/agent_xmpp/main.rb +126 -0
  20. data/lib/agent_xmpp/patches.rb +6 -2
  21. data/lib/agent_xmpp/patches/{standard_library_patches/array.rb → array.rb} +14 -7
  22. data/lib/agent_xmpp/patches/{standard_library_patches/float.rb → float.rb} +0 -0
  23. data/lib/agent_xmpp/patches/{standard_library_patches/hash.rb → hash.rb} +3 -3
  24. data/lib/agent_xmpp/patches/{standard_library_patches/object.rb → object.rb} +3 -3
  25. data/lib/agent_xmpp/patches/rexml.rb +69 -0
  26. data/lib/agent_xmpp/patches/{standard_library_patches/string.rb → string.rb} +5 -0
  27. data/lib/agent_xmpp/xmpp.rb +17 -0
  28. data/lib/agent_xmpp/xmpp/element.rb +159 -0
  29. data/lib/agent_xmpp/xmpp/error_response.rb +179 -0
  30. data/lib/agent_xmpp/xmpp/iq.rb +90 -0
  31. data/lib/agent_xmpp/xmpp/iq_command.rb +47 -0
  32. data/lib/agent_xmpp/xmpp/iq_disco.rb +205 -0
  33. data/lib/agent_xmpp/xmpp/iq_pubsub.rb +268 -0
  34. data/lib/agent_xmpp/xmpp/iq_roster.rb +183 -0
  35. data/lib/agent_xmpp/xmpp/iq_version.rb +89 -0
  36. data/lib/agent_xmpp/xmpp/jid.rb +150 -0
  37. data/lib/agent_xmpp/xmpp/message.rb +82 -0
  38. data/lib/agent_xmpp/xmpp/presence.rb +127 -0
  39. data/lib/agent_xmpp/xmpp/sasl.rb +241 -0
  40. data/lib/agent_xmpp/xmpp/stanza.rb +107 -0
  41. data/lib/agent_xmpp/xmpp/x_data.rb +269 -0
  42. data/test/app/app.rb +134 -0
  43. data/test/cases/test_application_message_processing.rb +65 -0
  44. data/test/cases/test_errors.rb +24 -0
  45. data/test/cases/test_presence_management.rb +139 -0
  46. data/test/cases/test_roster_management.rb +214 -0
  47. data/test/cases/test_service_discovery.rb +168 -0
  48. data/test/cases/test_session_management.rb +120 -0
  49. data/test/cases/test_version_discovery.rb +67 -0
  50. data/test/helpers/matchers.rb +23 -0
  51. data/test/helpers/mocks.rb +82 -0
  52. data/test/helpers/test_case_extensions.rb +45 -0
  53. data/test/helpers/test_client.rb +44 -0
  54. data/test/helpers/test_delegate.rb +61 -0
  55. data/test/helpers/test_helper.rb +91 -0
  56. data/test/messages/application_messages.rb +206 -0
  57. data/test/messages/error_messages.rb +35 -0
  58. data/test/messages/presence_messages.rb +66 -0
  59. data/test/messages/roster_messages.rb +126 -0
  60. data/test/messages/service_discovery_messages.rb +201 -0
  61. data/test/messages/session_messages.rb +158 -0
  62. data/test/messages/version_discovery_messages.rb +69 -0
  63. data/test/peer/peer.rb +36 -0
  64. data/test/xml_messages.txt +197 -0
  65. metadata +82 -42
  66. data/bin/agent_xmpp +0 -56
  67. data/lib/agent_xmpp/app/chat_message_body_controller.rb +0 -16
  68. data/lib/agent_xmpp/app/map.rb +0 -45
  69. data/lib/agent_xmpp/app/routes.rb +0 -77
  70. data/lib/agent_xmpp/app/view.rb +0 -49
  71. data/lib/agent_xmpp/client/parser.rb +0 -71
  72. data/lib/agent_xmpp/patches/standard_library_patches.rb +0 -5
  73. data/lib/agent_xmpp/patches/xmpp4r_patches.rb +0 -3
  74. data/lib/agent_xmpp/patches/xmpp4r_patches/command.rb +0 -26
  75. data/lib/agent_xmpp/patches/xmpp4r_patches/iq.rb +0 -26
  76. data/lib/agent_xmpp/patches/xmpp4r_patches/x_data.rb +0 -116
  77. data/lib/agent_xmpp/utils.rb +0 -2
  78. data/lib/agent_xmpp/utils/logger.rb +0 -24
  79. data/lib/agent_xmpp/utils/roster.rb +0 -23
  80. data/lib/agent_xmpp/version.rb +0 -6
  81. data/test/agent_xmpp_test.rb +0 -7
  82. data/test/test_helper.rb +0 -10
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.0.1
@@ -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.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-06-02}
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/parser.rb",
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/standard_library_patches.rb",
41
- "lib/agent_xmpp/patches/standard_library_patches/array.rb",
42
- "lib/agent_xmpp/patches/standard_library_patches/float.rb",
43
- "lib/agent_xmpp/patches/standard_library_patches/hash.rb",
44
- "lib/agent_xmpp/patches/standard_library_patches/object.rb",
45
- "lib/agent_xmpp/patches/standard_library_patches/string.rb",
46
- "lib/agent_xmpp/patches/xmpp4r_patches.rb",
47
- "lib/agent_xmpp/patches/xmpp4r_patches/command.rb",
48
- "lib/agent_xmpp/patches/xmpp4r_patches/iq.rb",
49
- "lib/agent_xmpp/patches/xmpp4r_patches/x_data.rb",
50
- "lib/agent_xmpp/utils.rb",
51
- "lib/agent_xmpp/utils/logger.rb",
52
- "lib/agent_xmpp/utils/roster.rb",
53
- "lib/agent_xmpp/version.rb",
54
- "test/agent_xmpp_test.rb",
55
- "test/test_helper.rb"
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{TODO}
90
+ s.summary = %q{Agent XMPP is a ruby XMPP bot framework inspired by MVC web frameworks.}
63
91
  s.test_files = [
64
- "test/agent_xmpp_test.rb",
65
- "test/test_helper.rb"
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
@@ -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/utils'
18
+ require 'agent_xmpp/xmpp'
19
+ require 'agent_xmpp/config'
20
+ require 'agent_xmpp/main'
@@ -1,7 +1,2 @@
1
1
  require 'agent_xmpp/app/boot'
2
2
  require 'agent_xmpp/app/controller'
3
- require 'agent_xmpp/app/format'
4
- require 'agent_xmpp/app/map'
5
- require 'agent_xmpp/app/routes'
6
- require 'agent_xmpp/app/view'
7
- require 'agent_xmpp/app/chat_message_body_controller'
@@ -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 app_dir
19
- Dir.pwd
20
- end
21
-
22
- #.......................................................................................................
23
- def before_config_load(&blk)
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
- def after_connection_completed(&blk)
29
- define_meta_class_method(:call_after_connection_completed, &blk)
30
- end
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
- def before_app_load(&blk)
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 after_app_load(&blk)
39
- define_meta_class_method(:call_after_app_load, &blk)
44
+ def call_if_implemented(method, *args)
45
+ send(method, *args) if respond_to?(method)
40
46
  end
41
-
42
- ####------------------------------------------------------------------------------------------------------
43
- def load(path, options = {})
44
- exclude_files = options[:exclude] || []
45
- ordered_files = options[:ordered_load] || []
46
- ordered_files.each{|f| require f}
47
- Find.find(path) do |file_path|
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
- end
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 Controller
5
+ class BaseController
6
6
 
7
7
  #---------------------------------------------------------------------------------------------------------
8
- attr_reader :format, :params, :connection
8
+ @routes = {}
9
+
9
10
  #---------------------------------------------------------------------------------------------------------
11
+ class << self
12
+
13
+ #.........................................................................................................
14
+ attr_reader :routes
10
15
 
11
- #.........................................................................................................
12
- def initialize
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
- def handle_request(connection, action, params)
56
+ attr_reader :params, :pipe
57
+
58
+ #.........................................................................................................
59
+ def initialize(pipe, params)
19
60
  @params = params
20
- @connection = connection
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 result_for(&blk)
27
- @result_for_blk = blk
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
- def respond_to(&blk)
32
- View.send(:define_method, :respond_to, &blk)
33
- View.send(:define_method, :result_callback) do |*result|
34
- connection.send(add_payload_to_container(respond_to(result)))
35
- end
36
- EventMachine.defer(@result_for_blk, View.new(connection, format, params).method(:result_callback).to_proc)
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