wamp_client 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.
- checksums.yaml +4 -4
- data/README.md +34 -32
- data/lib/wamp/client/auth.rb +0 -27
- data/lib/wamp/client/check.rb +0 -27
- data/lib/wamp/client/connection.rb +40 -113
- data/lib/wamp/client/event.rb +78 -0
- data/lib/wamp/client/manager/base.rb +39 -0
- data/lib/wamp/client/manager/base_multiple.rb +37 -0
- data/lib/wamp/client/manager/establish.rb +168 -0
- data/lib/wamp/client/manager/registration.rb +183 -0
- data/lib/wamp/client/manager/require.rb +3 -0
- data/lib/wamp/client/manager/subscription.rb +55 -0
- data/lib/wamp/client/request/base.rb +125 -0
- data/lib/wamp/client/request/call.rb +111 -0
- data/lib/wamp/client/request/publish.rb +72 -0
- data/lib/wamp/client/request/register.rb +79 -0
- data/lib/wamp/client/request/require.rb +6 -0
- data/lib/wamp/client/request/subscribe.rb +78 -0
- data/lib/wamp/client/request/unregister.rb +71 -0
- data/lib/wamp/client/request/unsubscribe.rb +72 -0
- data/lib/wamp/client/response.rb +136 -0
- data/lib/wamp/client/serializer.rb +0 -29
- data/lib/wamp/client/session.rb +172 -839
- data/lib/wamp/client/transport/base.rb +4 -77
- data/lib/wamp/client/transport/event_machine_base.rb +0 -27
- data/lib/wamp/client/transport/faye_web_socket.rb +4 -31
- data/lib/wamp/client/transport/web_socket_event_machine.rb +3 -30
- data/lib/wamp/client/version.rb +1 -28
- data/lib/wamp/client.rb +1 -28
- data/spec/spec_helper.rb +3 -137
- data/spec/support/faye_web_socket_client_stub.rb +43 -0
- data/spec/support/test_transport.rb +50 -0
- data/spec/support/web_socket_event_machine_client_stub.rb +39 -0
- data/spec/wamp/client/connection_spec.rb +4 -4
- data/spec/wamp/client/session_spec.rb +135 -135
- data/spec/wamp/client/transport_spec.rb +2 -2
- data/wamp_client.gemspec +10 -9
- metadata +59 -38
- data/lib/wamp/client/defer.rb +0 -70
@@ -1,82 +1,16 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
Copyright (c) 2018 Eric Chapman
|
4
|
-
|
5
|
-
MIT License
|
6
|
-
|
7
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
8
|
-
a copy of this software and associated documentation files (the
|
9
|
-
"Software"), to deal in the Software without restriction, including
|
10
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
11
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
12
|
-
permit persons to whom the Software is furnished to do so, subject to
|
13
|
-
the following conditions:
|
14
|
-
|
15
|
-
The above copyright notice and this permission notice shall be
|
16
|
-
included in all copies or substantial portions of the Software.
|
17
|
-
|
18
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
19
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
20
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
21
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
22
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
23
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
24
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
|
-
|
26
|
-
=end
|
27
|
-
|
28
1
|
require 'wamp/client/serializer'
|
2
|
+
require 'wamp/client/event'
|
29
3
|
|
30
4
|
module Wamp
|
31
5
|
module Client
|
32
6
|
module Transport
|
33
7
|
class Base
|
34
|
-
|
35
|
-
# Callback when the socket is opened
|
36
|
-
@on_open
|
37
|
-
def on_open(&on_open)
|
38
|
-
@on_open = on_open
|
39
|
-
end
|
40
|
-
|
41
|
-
# Callback when the socket is closed. Parameters are
|
42
|
-
# @param reason [String] String telling the reason it was closed
|
43
|
-
@on_close
|
44
|
-
def on_close(&on_close)
|
45
|
-
@on_close = on_close
|
46
|
-
end
|
47
|
-
|
48
|
-
# Callback when a message is received. Parameters are
|
49
|
-
# @param msg [Array] The parsed message that was received
|
50
|
-
@on_message
|
51
|
-
def on_message(&on_message)
|
52
|
-
@on_message = on_message
|
53
|
-
end
|
54
|
-
|
55
|
-
# Callback when there is an error. Parameters are
|
56
|
-
# @param msg [String] The message from the error
|
57
|
-
@on_error
|
58
|
-
def on_error(&on_error)
|
59
|
-
@on_error = on_error
|
60
|
-
end
|
61
|
-
|
62
|
-
# Simple setter for callbacks
|
63
|
-
def on(event, &callback)
|
64
|
-
case event
|
65
|
-
when :open
|
66
|
-
self.on_open(&callback)
|
67
|
-
when :close
|
68
|
-
self.on_close(&callback)
|
69
|
-
when :message
|
70
|
-
self.on_message(&callback)
|
71
|
-
when :error
|
72
|
-
self.on_error(&callback)
|
73
|
-
else
|
74
|
-
raise RuntimeError, "Unknown on(event) '#{event}'"
|
75
|
-
end
|
76
|
-
end
|
8
|
+
include Event
|
77
9
|
|
78
10
|
attr_accessor :uri, :proxy, :headers, :protocol, :serializer, :connected
|
79
11
|
|
12
|
+
create_event [:open, :close, :message, :error]
|
13
|
+
|
80
14
|
# Constructor for the transport
|
81
15
|
# @param options [Hash] The connection options. the different options are as follows
|
82
16
|
# @option options [String] :uri The url to connect to
|
@@ -96,13 +30,6 @@ module Wamp
|
|
96
30
|
|
97
31
|
# Add the wamp.2.json protocol header
|
98
32
|
self.headers['Sec-WebSocket-Protocol'] = self.protocol
|
99
|
-
|
100
|
-
# Initialize callbacks
|
101
|
-
@on_open = nil
|
102
|
-
@on_close = nil
|
103
|
-
@on_message = nil
|
104
|
-
@on_error = nil
|
105
|
-
|
106
33
|
end
|
107
34
|
|
108
35
|
# Connects to the WAMP Server using the transport
|
@@ -1,30 +1,3 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
Copyright (c) 2018 Eric Chapman
|
4
|
-
|
5
|
-
MIT License
|
6
|
-
|
7
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
8
|
-
a copy of this software and associated documentation files (the
|
9
|
-
"Software"), to deal in the Software without restriction, including
|
10
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
11
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
12
|
-
permit persons to whom the Software is furnished to do so, subject to
|
13
|
-
the following conditions:
|
14
|
-
|
15
|
-
The above copyright notice and this permission notice shall be
|
16
|
-
included in all copies or substantial portions of the Software.
|
17
|
-
|
18
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
19
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
20
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
21
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
22
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
23
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
24
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
|
-
|
26
|
-
=end
|
27
|
-
|
28
1
|
require 'eventmachine'
|
29
2
|
require_relative 'base'
|
30
3
|
|
@@ -1,30 +1,3 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
Copyright (c) 2018 Eric Chapman
|
4
|
-
|
5
|
-
MIT License
|
6
|
-
|
7
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
8
|
-
a copy of this software and associated documentation files (the
|
9
|
-
"Software"), to deal in the Software without restriction, including
|
10
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
11
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
12
|
-
permit persons to whom the Software is furnished to do so, subject to
|
13
|
-
the following conditions:
|
14
|
-
|
15
|
-
The above copyright notice and this permission notice shall be
|
16
|
-
included in all copies or substantial portions of the Software.
|
17
|
-
|
18
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
19
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
20
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
21
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
22
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
23
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
24
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
|
-
|
26
|
-
=end
|
27
|
-
|
28
1
|
require_relative 'event_machine_base'
|
29
2
|
|
30
3
|
# This implementation uses the 'faye-websocket' Gem.
|
@@ -49,20 +22,20 @@ module Wamp
|
|
49
22
|
|
50
23
|
self.socket.on(:open) do |event|
|
51
24
|
self.connected = true
|
52
|
-
|
25
|
+
trigger :open
|
53
26
|
end
|
54
27
|
|
55
28
|
self.socket.on(:message) do |event|
|
56
|
-
|
29
|
+
trigger :message, self.serializer.deserialize(event.data)
|
57
30
|
end
|
58
31
|
|
59
32
|
self.socket.on(:close) do |event|
|
60
33
|
self.connected = false
|
61
|
-
|
34
|
+
trigger :close, event.reason
|
62
35
|
end
|
63
36
|
|
64
37
|
self.socket.on(:error) do |event|
|
65
|
-
|
38
|
+
trigger :error, event.message
|
66
39
|
end
|
67
40
|
end
|
68
41
|
|
@@ -1,30 +1,3 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
Copyright (c) 2018 Eric Chapman
|
4
|
-
|
5
|
-
MIT License
|
6
|
-
|
7
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
8
|
-
a copy of this software and associated documentation files (the
|
9
|
-
"Software"), to deal in the Software without restriction, including
|
10
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
11
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
12
|
-
permit persons to whom the Software is furnished to do so, subject to
|
13
|
-
the following conditions:
|
14
|
-
|
15
|
-
The above copyright notice and this permission notice shall be
|
16
|
-
included in all copies or substantial portions of the Software.
|
17
|
-
|
18
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
19
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
20
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
21
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
22
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
23
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
24
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
|
-
|
26
|
-
=end
|
27
|
-
|
28
1
|
require_relative 'event_machine_base'
|
29
2
|
|
30
3
|
# This implementation uses the 'websocket-eventmachine-client' Gem.
|
@@ -56,16 +29,16 @@ module Wamp
|
|
56
29
|
|
57
30
|
self.socket.onopen do
|
58
31
|
self.connected = true
|
59
|
-
|
32
|
+
trigger :open
|
60
33
|
end
|
61
34
|
|
62
35
|
self.socket.onmessage do |msg, type|
|
63
|
-
|
36
|
+
trigger :message, self.serializer.deserialize(msg)
|
64
37
|
end
|
65
38
|
|
66
39
|
self.socket.onclose do |code, reason|
|
67
40
|
self.connected = false
|
68
|
-
|
41
|
+
trigger :close, reason
|
69
42
|
end
|
70
43
|
end
|
71
44
|
|
data/lib/wamp/client/version.rb
CHANGED
@@ -1,32 +1,5 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
Copyright (c) 2018 Eric Chapman
|
4
|
-
|
5
|
-
MIT License
|
6
|
-
|
7
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
8
|
-
a copy of this software and associated documentation files (the
|
9
|
-
"Software"), to deal in the Software without restriction, including
|
10
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
11
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
12
|
-
permit persons to whom the Software is furnished to do so, subject to
|
13
|
-
the following conditions:
|
14
|
-
|
15
|
-
The above copyright notice and this permission notice shall be
|
16
|
-
included in all copies or substantial portions of the Software.
|
17
|
-
|
18
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
19
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
20
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
21
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
22
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
23
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
24
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
|
-
|
26
|
-
=end
|
27
|
-
|
28
1
|
module Wamp
|
29
2
|
module Client
|
30
|
-
VERSION = '0.
|
3
|
+
VERSION = '0.2.0'
|
31
4
|
end
|
32
5
|
end
|
data/lib/wamp/client.rb
CHANGED
@@ -1,37 +1,10 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
Copyright (c) 2018 Eric Chapman
|
4
|
-
|
5
|
-
MIT License
|
6
|
-
|
7
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
8
|
-
a copy of this software and associated documentation files (the
|
9
|
-
"Software"), to deal in the Software without restriction, including
|
10
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
11
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
12
|
-
permit persons to whom the Software is furnished to do so, subject to
|
13
|
-
the following conditions:
|
14
|
-
|
15
|
-
The above copyright notice and this permission notice shall be
|
16
|
-
included in all copies or substantial portions of the Software.
|
17
|
-
|
18
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
19
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
20
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
21
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
22
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
23
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
24
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
|
-
|
26
|
-
=end
|
27
|
-
|
28
1
|
require 'wamp/client/version'
|
29
2
|
require 'wamp/client/message'
|
30
3
|
require 'wamp/client/serializer'
|
31
4
|
require 'wamp/client/connection'
|
32
5
|
require 'wamp/client/session'
|
33
6
|
require 'wamp/client/auth'
|
34
|
-
require 'wamp/client/
|
7
|
+
require 'wamp/client/response'
|
35
8
|
require 'logger'
|
36
9
|
|
37
10
|
module Wamp
|
data/spec/spec_helper.rb
CHANGED
@@ -1,150 +1,16 @@
|
|
1
1
|
require 'simplecov'
|
2
2
|
SimpleCov.start
|
3
3
|
|
4
|
-
|
4
|
+
require 'wamp/client'
|
5
5
|
|
6
6
|
if ENV['CODECOV_TOKEN']
|
7
7
|
require 'codecov'
|
8
8
|
SimpleCov.formatter = SimpleCov::Formatter::Codecov
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
Dir[File.expand_path('spec/support/**/*.rb')].each { |f| require f }
|
12
|
+
|
12
13
|
require "rspec/em"
|
13
14
|
|
14
15
|
Wamp::Client.log_level = :error
|
15
16
|
|
16
|
-
module SpecHelper
|
17
|
-
|
18
|
-
class TestTransport < Wamp::Client::Transport::EventMachineBase
|
19
|
-
@@event_machine_on = false
|
20
|
-
attr_accessor :messages
|
21
|
-
|
22
|
-
def initialize(options)
|
23
|
-
super(options)
|
24
|
-
@connected = true
|
25
|
-
self.messages = []
|
26
|
-
end
|
27
|
-
|
28
|
-
def connect
|
29
|
-
self.add_timer(1000) do
|
30
|
-
@on_open.call if @on_open
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def disconnect
|
35
|
-
@connected = false
|
36
|
-
@on_close.call if @on_close
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.start_event_machine(&block)
|
40
|
-
@@event_machine_on = true
|
41
|
-
block.call
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.stop_event_machine
|
45
|
-
@@event_machine_on = false
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.event_machine_on?
|
49
|
-
@@event_machine_on
|
50
|
-
end
|
51
|
-
|
52
|
-
def send_message(msg)
|
53
|
-
self.messages.push(msg)
|
54
|
-
end
|
55
|
-
|
56
|
-
def receive_message(msg)
|
57
|
-
|
58
|
-
# Emulate serialization/deserialization
|
59
|
-
serialize = self.serializer.serialize(msg)
|
60
|
-
deserialize = self.serializer.deserialize(serialize)
|
61
|
-
|
62
|
-
# Call the received message
|
63
|
-
@on_message.call(deserialize) if @on_message
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
class WebSocketEventMachineClientStub
|
69
|
-
attr_accessor :last_message
|
70
|
-
|
71
|
-
def initialize
|
72
|
-
EM.add_timer(1) {
|
73
|
-
@onopen.call if @onopen != nil
|
74
|
-
}
|
75
|
-
end
|
76
|
-
|
77
|
-
@onopen
|
78
|
-
def onopen(&onopen)
|
79
|
-
@onopen = onopen
|
80
|
-
end
|
81
|
-
|
82
|
-
@onmessage
|
83
|
-
def onmessage(&onmessage)
|
84
|
-
@onmessage = onmessage
|
85
|
-
end
|
86
|
-
|
87
|
-
@onclose
|
88
|
-
def onclose(&onclose)
|
89
|
-
@onclose = onclose
|
90
|
-
end
|
91
|
-
|
92
|
-
def close
|
93
|
-
@onclose.call if @onclose != nil
|
94
|
-
true
|
95
|
-
end
|
96
|
-
|
97
|
-
def send(message, type)
|
98
|
-
self.last_message = message
|
99
|
-
end
|
100
|
-
|
101
|
-
def receive(message)
|
102
|
-
@onmessage.call(message, {type:'text'}) if @onmessage != nil
|
103
|
-
end
|
104
|
-
|
105
|
-
end
|
106
|
-
|
107
|
-
class FayeWebSocketClientStub
|
108
|
-
class Event
|
109
|
-
attr_accessor :data, :reason
|
110
|
-
end
|
111
|
-
|
112
|
-
attr_accessor :last_message
|
113
|
-
|
114
|
-
def initialize
|
115
|
-
EM.add_timer(1) {
|
116
|
-
@on_open.call(Event.new) if @on_open != nil
|
117
|
-
}
|
118
|
-
end
|
119
|
-
|
120
|
-
@on_open
|
121
|
-
@on_message
|
122
|
-
@on_close
|
123
|
-
def on(event, &block)
|
124
|
-
if event == :open
|
125
|
-
@on_open = block
|
126
|
-
elsif event == :close
|
127
|
-
@on_close = block
|
128
|
-
elsif event == :message
|
129
|
-
@on_message = block
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
def close
|
134
|
-
event = Event.new
|
135
|
-
event.reason = 'closed'
|
136
|
-
@on_close.call(event) if @on_close != nil
|
137
|
-
end
|
138
|
-
|
139
|
-
def send(message)
|
140
|
-
self.last_message = message
|
141
|
-
end
|
142
|
-
|
143
|
-
def receive(message)
|
144
|
-
event = Event.new
|
145
|
-
event.data = message
|
146
|
-
@on_message.call(event) if @on_message != nil
|
147
|
-
end
|
148
|
-
|
149
|
-
end
|
150
|
-
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class FayeWebSocketClientStub
|
2
|
+
class Event
|
3
|
+
attr_accessor :data, :reason
|
4
|
+
end
|
5
|
+
|
6
|
+
attr_accessor :last_message
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
EM.add_timer(1) {
|
10
|
+
@on_open.call(Event.new) if @on_open != nil
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
@on_open
|
15
|
+
@on_message
|
16
|
+
@on_close
|
17
|
+
def on(event, &block)
|
18
|
+
if event == :open
|
19
|
+
@on_open = block
|
20
|
+
elsif event == :close
|
21
|
+
@on_close = block
|
22
|
+
elsif event == :message
|
23
|
+
@on_message = block
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def close
|
28
|
+
event = Event.new
|
29
|
+
event.reason = 'closed'
|
30
|
+
@on_close.call(event) if @on_close != nil
|
31
|
+
end
|
32
|
+
|
33
|
+
def send(message)
|
34
|
+
self.last_message = message
|
35
|
+
end
|
36
|
+
|
37
|
+
def receive(message)
|
38
|
+
event = Event.new
|
39
|
+
event.data = message
|
40
|
+
@on_message.call(event) if @on_message != nil
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class TestTransport < Wamp::Client::Transport::EventMachineBase
|
2
|
+
@@event_machine_on = false
|
3
|
+
attr_accessor :messages
|
4
|
+
|
5
|
+
def initialize(options)
|
6
|
+
super(options)
|
7
|
+
@connected = true
|
8
|
+
self.messages = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def connect
|
12
|
+
self.add_timer(1000) do
|
13
|
+
trigger :open
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def disconnect
|
18
|
+
@connected = false
|
19
|
+
trigger :close
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.start_event_machine(&block)
|
23
|
+
@@event_machine_on = true
|
24
|
+
block.call
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.stop_event_machine
|
28
|
+
@@event_machine_on = false
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.event_machine_on?
|
32
|
+
@@event_machine_on
|
33
|
+
end
|
34
|
+
|
35
|
+
def send_message(msg)
|
36
|
+
self.messages.push(msg)
|
37
|
+
end
|
38
|
+
|
39
|
+
def receive_message(msg)
|
40
|
+
|
41
|
+
# Emulate serialization/deserialization
|
42
|
+
serialize = self.serializer.serialize(msg)
|
43
|
+
deserialize = self.serializer.deserialize(serialize)
|
44
|
+
|
45
|
+
# Call the received message
|
46
|
+
trigger :message, deserialize
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class WebSocketEventMachineClientStub
|
2
|
+
attr_accessor :last_message
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
EM.add_timer(1) {
|
6
|
+
@onopen.call if @onopen != nil
|
7
|
+
}
|
8
|
+
end
|
9
|
+
|
10
|
+
@onopen
|
11
|
+
def onopen(&onopen)
|
12
|
+
@onopen = onopen
|
13
|
+
end
|
14
|
+
|
15
|
+
@onmessage
|
16
|
+
def onmessage(&onmessage)
|
17
|
+
@onmessage = onmessage
|
18
|
+
end
|
19
|
+
|
20
|
+
@onclose
|
21
|
+
def onclose(&onclose)
|
22
|
+
@onclose = onclose
|
23
|
+
end
|
24
|
+
|
25
|
+
def close
|
26
|
+
@onclose.call if @onclose != nil
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
30
|
+
def send(message, type)
|
31
|
+
self.last_message = message
|
32
|
+
end
|
33
|
+
|
34
|
+
def receive(message)
|
35
|
+
@onmessage.call(message, {type:'text'}) if @onmessage != nil
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
@@ -6,13 +6,13 @@ describe Wamp::Client::Connection do
|
|
6
6
|
before { clock.stub }
|
7
7
|
after { clock.reset }
|
8
8
|
|
9
|
-
before(:each) {
|
9
|
+
before(:each) { TestTransport.stop_event_machine }
|
10
10
|
|
11
11
|
let(:options) {
|
12
12
|
{
|
13
13
|
uri: 'wss://example.com',
|
14
14
|
realm: 'realm1',
|
15
|
-
transport:
|
15
|
+
transport: TestTransport,
|
16
16
|
}
|
17
17
|
}
|
18
18
|
let(:connection) { described_class.new(options) }
|
@@ -37,11 +37,11 @@ describe Wamp::Client::Connection do
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def check_em_on
|
40
|
-
expect(
|
40
|
+
expect(TestTransport.event_machine_on?).to eq(true)
|
41
41
|
end
|
42
42
|
|
43
43
|
def check_em_off
|
44
|
-
expect(
|
44
|
+
expect(TestTransport.event_machine_on?).to eq(false)
|
45
45
|
end
|
46
46
|
|
47
47
|
describe 'transport' do
|