wampus 0.0.5 → 0.0.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bfb58f22049d9f09a70845982e65ed973ab1d05a
4
- data.tar.gz: 9c5e02435c5282da1145a002b67c1792a74f3211
3
+ metadata.gz: 1344ac9b431935be7e6eb17811b05b32553b216f
4
+ data.tar.gz: 4f0633e43c52ca041dadd7f77f54a8b99233b506
5
5
  SHA512:
6
- metadata.gz: fab955b9b85aa6fb3a99fe7c325ddd1637e7b7bd73c8b3913b4827d289be06829c677d3a1b0066d0b2955fb0cf5d9219d5f25d86a9211bdf6be7c44d5e4607e0
7
- data.tar.gz: e6ca9efc648328ec02d8d43cef3309869eff6c78934ba7ea85eda40d195412602bef68bb9fbabdd43cc0230cd434ba0b5cff51c63acc96c45d138c3b22ffc2bc
6
+ metadata.gz: 2049c1ac5788a583a73b0441cb87c0b4986dc2824bc42b767e3bd0cfe65e5872c92cfcab6b5293635adfec7f4e71407519344dea0bb2365225052afd96020b38
7
+ data.tar.gz: 33e317dd4d990ef424176be6207cf89f83fce62574c810e14433139f3b0b2f0eabf566ede047e5c6d4ef55ceb7039282ca67a0389014ed6ce8eaa441c8af6c78
@@ -8,6 +8,10 @@ module Wampus
8
8
 
9
9
  attr_reader :redis_config
10
10
 
11
+ after_init {
12
+ connect_to_redis
13
+ }
14
+
11
15
  def initialize(*args)
12
16
  @redis_config = redis_defaults.dup
13
17
  super(*args) if defined? super
@@ -82,16 +82,15 @@ module Wampus
82
82
  if handler[2].nil? && handler[3].nil?
83
83
  topic.add_subscriber connection
84
84
  else
85
- begin
86
- if handler[2]
87
- result = handler[2].send handler[3], connection, topic_uri
88
- elsif handler[3].is_a? Proc
89
- result = handler[3].call connection, topic_uri
85
+ EM.defer lambda {
86
+ run_subscribe_deferred connection, handler, topic_uri
87
+ }, lambda { |result|
88
+ if result.is_a? Exception
89
+ # TODO Log errors
90
+ elsif result
91
+ topic.add_subscriber connection
90
92
  end
91
- topic.add_subscriber connection
92
- rescue => error
93
- # Nothing
94
- end
93
+ }
95
94
  end
96
95
  end
97
96
 
@@ -121,19 +120,15 @@ module Wampus
121
120
  if handler[2].nil? && handler[3].nil?
122
121
  dispatch_event topic.uri, event, exclude, include
123
122
  else
124
- begin
125
- begin
126
- if handler[2]
127
- result = handler[2].send handler[3], [connection, topic_uri, event]
128
- elsif handler[3].is_a? Proc
129
- result = handler[3].call connection, topic_uri, event
130
- end
123
+ EM.defer lambda {
124
+ run_publish_deferred connection, handler, topic_uri, event
125
+ }, lambda {|result|
126
+ if result.is_a? Exception
127
+ # TODO Log errors
128
+ elsif result
131
129
  dispatch_event topic.uri, event, exclude, include
132
- rescue => error
133
- puts error.message
134
- # Nothing
135
130
  end
136
- end
131
+ }
137
132
  end
138
133
  end
139
134
 
@@ -146,6 +141,26 @@ module Wampus
146
141
 
147
142
  private
148
143
 
144
+ def run_subscribe_deferred(connection, handler, topic_uri)
145
+ if handler[2]
146
+ handler[2].send handler[3], connection, topic_uri
147
+ elsif handler[3].is_a? Proc
148
+ handler[3].call connection, topic_uri
149
+ end
150
+ rescue => error
151
+ error
152
+ end
153
+
154
+ def run_publish_deferred(connection, handler, topic_uri, event)
155
+ if handler[2]
156
+ handler[2].send handler[3], [connection, topic_uri, event]
157
+ elsif handler[3].is_a? Proc
158
+ handler[3].call connection, topic_uri, event
159
+ end
160
+ rescue => error
161
+ error
162
+ end
163
+
149
164
  def topic_for_uri(topic_uri)
150
165
  uri = topics.keys.select { |uri| topic_uri.include? uri }.sort_by(&:length).last
151
166
  topics[uri]
@@ -47,25 +47,25 @@ module Wampus
47
47
  uri = connection.resolve_prefix proc_uri
48
48
  handler = rpcs[uri]
49
49
 
50
- begin
51
- rpc_call_exists = rpcs.has_key?(uri)
52
- uri, args = on_before_call connection, call_id, uri, args, rpc_call_exists
53
- unless rpc_call_exists
54
- raise Wampus::Errors::CallError.new(Wampus::Protocols::Wamp::URI_ERROR+'NoSuchRPCEndpoint', 'Missing Method')
55
- end
56
- if handler[0]
57
- result = handler[0].send handler[1], connection, call_id, *args
58
- elsif handler[1].is_a? Proc
59
- result = handler[1].call connection, call_id, *args
60
- end
61
- result = on_after_call_success connection, result
62
- connection.write call_result_msg call_id, result
63
- rescue => error
64
- error = on_after_call_error connection, error
65
- msg = call_error_msg call_id, *error.to_call_error
66
- connection.write msg
67
- on_after_send_call_error connection, msg
50
+ rpc_call_exists = rpcs.has_key?(uri)
51
+ uri, args = on_before_call connection, call_id, uri, args, rpc_call_exists
52
+ unless rpc_call_exists
53
+ raise Wampus::Errors::CallError.new(Wampus::Protocols::Wamp::URI_ERROR+'NoSuchRPCEndpoint', 'Missing Method')
68
54
  end
55
+
56
+ EM.defer lambda {
57
+ run_rpc_deferred connection, handler, args
58
+ }, lambda { |result|
59
+ if result.is_a? StandardError
60
+ error = on_after_call_error connection, result
61
+ msg = call_error_msg call_id, *error.to_call_error
62
+ connection.write msg
63
+ on_after_send_call_error connection, msg
64
+ else
65
+ result = on_after_call_success connection, result
66
+ connection.write call_result_msg call_id, result
67
+ end
68
+ }
69
69
  end
70
70
 
71
71
  # -- RPC Hooks
@@ -90,6 +90,16 @@ module Wampus
90
90
 
91
91
  private
92
92
 
93
+ def run_rpc_deferred(connection, handler, args)
94
+ if handler[0]
95
+ handler[0].send handler[1], connection, *args
96
+ elsif handler[1].is_a? Proc
97
+ handler[1].call connection, *args
98
+ end
99
+ rescue => error
100
+ error
101
+ end
102
+
93
103
  def proc_for_uri(rpc_uri)
94
104
  uri = rpcs.keys.select { |uri| uri.include? rpc_uri }.sort_by(&:length).last
95
105
  rpcs[uri]
@@ -10,28 +10,33 @@ module Wampus
10
10
 
11
11
  after_init do
12
12
  register_rpc_method Wampus::Protocols::WampCra::URI_PROCEDURE+'authRequest', self, :auth_request
13
+ register_rpc_method Wampus::Protocols::WampCra::URI_PROCEDURE+'authStatus', self, :auth_status
13
14
  register_rpc_method Wampus::Protocols::WampCra::URI_PROCEDURE+'auth', self, :auth
14
15
  end
15
16
 
17
+ # Implement in your server
16
18
  def get_auth_permissions(connection, auth_key, auth_extra)
17
19
  {:permissions => { :pubsub => [], :rpc => [] } }
18
20
  end
19
21
 
22
+ # Implement in your server
20
23
  def get_auth_secret(connection, auth_key)
21
24
  nil
22
25
  end
23
26
 
27
+ # Implement in your server
24
28
  def on_auth_timeout(connection)
25
29
  # Nothing
26
30
  end
27
31
 
32
+ # Implement in your server
28
33
  def on_authenticated(connection, auth_key, permissions)
29
34
  # Nothing
30
35
  end
31
36
 
32
37
  def on_session_open(connection)
33
38
  if client_auth_timeout > 0
34
- connection.auth_timeout_call = EventMachine.add_timer client_auth_timeout {
39
+ connection.auth_timeout_call = EventMachine.add_timer(client_auth_timeout) {
35
40
  on_auth_timeout(connection)
36
41
  }
37
42
  end
@@ -46,6 +51,7 @@ module Wampus
46
51
  raise Wampus::Errors::CallError.new(Wampus::Protocols::Wamp::URI_ERROR+'authentication-already-requested', 'Authentication Already Requested')
47
52
  end
48
53
 
54
+ extra = {} if extra.nil?
49
55
  unless extra.is_a? Hash
50
56
  raise Wampus::Errors::CallError.new(Wampus::Protocols::Wamp::URI_ERROR+'invalid-argument', 'Extra is not a Dictionary/Hash')
51
57
  end
@@ -58,6 +64,18 @@ module Wampus
58
64
  on_get_auth_secret_ok connection, auth_secret, auth_key, extra
59
65
  end
60
66
 
67
+ def auth_status(connection)
68
+ if connection.authenticated
69
+ return :authenticated
70
+ end
71
+
72
+ unless connection.pending_auth.nil?
73
+ return :pending
74
+ end
75
+
76
+ :unauthenticated
77
+ end
78
+
61
79
  def auth(connection, signature = nil)
62
80
  if connection.authenticated
63
81
  raise Wampus::Errors::CallError.new(Wampus::Protocols::Wamp::URI_ERROR+'already-authenticated', 'Already Authenticated')
@@ -70,12 +88,12 @@ module Wampus
70
88
  if connection.pending_auth[1] != signature
71
89
  connection.pending_auth = nil
72
90
 
73
- return EventMachine.add_timer expo(1.25) {
74
- raise Wampus::Errors::CallError.new Wampus::Protocols::Wamp::URI_ERROR+'invalid-signature', 'Signature for authentication request is invalid'
91
+ return EventMachine.add_timer(expo(1.25)) {
92
+ raise Wampus::Errors::CallError.new(Wampus::Protocols::Wamp::URI_ERROR+'invalid-signature', 'Signature for authentication request is invalid')
75
93
  }
76
94
  end
77
95
 
78
- permissions = connection.pending_auth
96
+ permissions = connection.pending_auth[2]
79
97
  auth_key = connection.pending_auth[0][:auth_key]
80
98
  connection.authenticated = true
81
99
  connection.pending_auth = nil
@@ -86,7 +104,7 @@ module Wampus
86
104
 
87
105
  on_authenticated connection, auth_key, permissions
88
106
 
89
- return permissions[:permissions]
107
+ permissions[:permissions]
90
108
  end
91
109
 
92
110
  private
@@ -107,9 +125,10 @@ module Wampus
107
125
  auth_info[:auth_extra] = results[:auth_extra] if results.has_key? :auth_extra
108
126
 
109
127
  if auth_key
110
- auth_sig = auth_signature auth_info, auth_secret
128
+ auth_json = auth_info.to_json
129
+ auth_sig = auth_signature auth_json, auth_secret
111
130
  connection.pending_auth = [auth_info, auth_sig, results]
112
- return auth_info
131
+ return auth_json
113
132
  else
114
133
  connection.pending_auth = [auth_info, nil, results]
115
134
  return nil
@@ -1,3 +1,3 @@
1
1
  module Wampus
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wampus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Stack
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-13 00:00:00.000000000 Z
11
+ date: 2013-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler