em-websocket 0.0.2 → 0.0.4
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/Rakefile +1 -0
- data/VERSION +1 -1
- data/examples/test.html +1 -0
- data/lib/em-websocket/connection.rb +14 -4
- data/spec/websocket_spec.rb +51 -2
- metadata +12 -2
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/examples/test.html
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'addressable/uri'
|
2
|
-
|
2
|
+
|
3
3
|
module EventMachine
|
4
4
|
module WebSocket
|
5
5
|
class Connection < EventMachine::Connection
|
@@ -7,9 +7,11 @@ module EventMachine
|
|
7
7
|
PATH = /^GET (\/[^\s]*) HTTP\/1\.1$/
|
8
8
|
HEADER = /^([^:]+):\s*([^$]+)/
|
9
9
|
|
10
|
+
attr_reader :state
|
11
|
+
|
10
12
|
# define WebSocket callbacks
|
11
13
|
def onopen(&blk); @onopen = blk; end
|
12
|
-
def onclose(&blk); @
|
14
|
+
def onclose(&blk); @onclose = blk; end
|
13
15
|
def onmessage(&blk); @onmessage = blk; end
|
14
16
|
|
15
17
|
def initialize(options)
|
@@ -31,6 +33,8 @@ module EventMachine
|
|
31
33
|
|
32
34
|
def unbind
|
33
35
|
debug [:unbind, :connection]
|
36
|
+
|
37
|
+
@state = :closed
|
34
38
|
@onclose.call if @onclose
|
35
39
|
end
|
36
40
|
|
@@ -107,10 +111,16 @@ module EventMachine
|
|
107
111
|
end
|
108
112
|
|
109
113
|
def process_message
|
114
|
+
return if not @onmessage
|
110
115
|
debug [:message, @data]
|
111
|
-
@onmessage.call(@data) if @onmessage
|
112
|
-
@data = ''
|
113
116
|
|
117
|
+
# slice the message out of the buffer and pass in
|
118
|
+
# for processing, and buffer data otherwise
|
119
|
+
while msg = @data.slice!(/\000([^\377]*)\377/)
|
120
|
+
msg.gsub!(/^\x00|\xff$/, '')
|
121
|
+
@onmessage.call(msg)
|
122
|
+
end
|
123
|
+
|
114
124
|
false
|
115
125
|
end
|
116
126
|
|
data/spec/websocket_spec.rb
CHANGED
@@ -26,8 +26,6 @@ describe EventMachine::WebSocket do
|
|
26
26
|
puts "WebSocket connection open"
|
27
27
|
ws.send MSG
|
28
28
|
}
|
29
|
-
|
30
|
-
# TODO: need .terminate method on EM-http to invoke & test .onclose callback
|
31
29
|
end
|
32
30
|
end
|
33
31
|
end
|
@@ -47,4 +45,55 @@ describe EventMachine::WebSocket do
|
|
47
45
|
end
|
48
46
|
end
|
49
47
|
|
48
|
+
it "should split multiple messages into separate callbacks" do
|
49
|
+
EM.run do
|
50
|
+
messages = %w[1 2]
|
51
|
+
recieved = []
|
52
|
+
|
53
|
+
EventMachine.add_timer(0.1) do
|
54
|
+
http = EventMachine::HttpRequest.new('ws://127.0.0.1:8080/').get :timeout => 0
|
55
|
+
http.errback { failed }
|
56
|
+
http.stream {|msg|}
|
57
|
+
http.callback {
|
58
|
+
http.response_header.status.should == 101
|
59
|
+
http.send messages[0]
|
60
|
+
http.send messages[1]
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
|
65
|
+
ws.onopen {}
|
66
|
+
ws.onclose {}
|
67
|
+
ws.onmessage {|msg|
|
68
|
+
msg.should == messages[recieved.size]
|
69
|
+
recieved.push msg
|
70
|
+
|
71
|
+
EventMachine.stop if recieved.size == messages.size
|
72
|
+
}
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should call onclose callback when client closes connection" do
|
78
|
+
EM.run do
|
79
|
+
EventMachine.add_timer(0.1) do
|
80
|
+
http = EventMachine::HttpRequest.new('ws://127.0.0.1:8080/').get :timeout => 0
|
81
|
+
http.errback { failed }
|
82
|
+
http.callback {
|
83
|
+
http.response_header.status.should == 101
|
84
|
+
http.close_connection
|
85
|
+
}
|
86
|
+
http.stream{|msg|}
|
87
|
+
end
|
88
|
+
|
89
|
+
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
|
90
|
+
ws.onopen {}
|
91
|
+
ws.onclose {
|
92
|
+
ws.state.should == :closed
|
93
|
+
EventMachine.stop
|
94
|
+
}
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
50
99
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-websocket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Grigorik
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-12-
|
12
|
+
date: 2009-12-24 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -22,6 +22,16 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 0.12.9
|
24
24
|
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: addressable
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
25
35
|
description: EventMachine based WebSocket server
|
26
36
|
email: ilya@igvita.com
|
27
37
|
executables: []
|