em-websocket-server 0.1.2 → 0.13
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/README.markdown +56 -63
- data/em-websocket-server.gemspec +32 -25
- data/examples/chat.html +37 -0
- data/examples/chat.rb +70 -0
- data/examples/tictactoe/tictactoe.html +51 -0
- data/examples/tictactoe/tictactoe.js +130 -0
- data/examples/tictactoe/tictactoe.rb +213 -0
- data/examples/timesync.html +29 -0
- data/examples/timesync.rb +37 -0
- data/lib/web_socket.rb +12 -10
- data/lib/web_socket/client.rb +70 -68
- data/lib/web_socket/server.rb +201 -145
- data/lib/web_socket/util.rb +32 -27
- metadata +34 -10
data/lib/web_socket/util.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
module WebSocket
|
2
2
|
|
3
|
-
|
3
|
+
class Util
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
@@path_regex = /^GET (\/[^\s]*) HTTP\/1\.1$/
|
6
|
+
@@hs_regex = /^HTTP\/1\.1 101 Web Socket Protocol Handshake$/
|
7
|
+
@@header_regex = /^([^:]+):\s*([^$]+)/
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
# Parse http style headers into a ruby hash
|
10
|
+
def self.parse_headers data
|
11
|
+
lines = data.split("\r\n")
|
12
12
|
line = lines.shift
|
13
13
|
|
14
|
-
|
14
|
+
headers = {}
|
15
15
|
|
16
16
|
case line
|
17
17
|
when @@path_regex
|
@@ -22,29 +22,34 @@ module WebSocket
|
|
22
22
|
throw "Unrecognized Header!"
|
23
23
|
end
|
24
24
|
|
25
|
+
while line = lines.shift
|
26
|
+
if line.chomp.empty?
|
27
|
+
break
|
28
|
+
end
|
29
|
+
|
30
|
+
kvp = @@header_regex.match(line)
|
31
|
+
headers[kvp[1].strip.downcase.to_sym] = kvp[2].strip
|
32
|
+
end
|
25
33
|
|
26
|
-
|
27
|
-
kvp = @@header_regex.match(line)
|
28
|
-
headers[kvp[1].strip.downcase.to_sym] = kvp[2].strip
|
29
|
-
end
|
34
|
+
challenge = lines.pop if lines
|
30
35
|
|
31
|
-
|
32
|
-
|
36
|
+
[headers, challenge]
|
37
|
+
end
|
33
38
|
|
34
|
-
|
35
|
-
|
36
|
-
|
39
|
+
# encode ruby hash into HTTP style headers
|
40
|
+
def self.encode_headers data
|
41
|
+
result = ""
|
37
42
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
43
|
+
data.each_pair do |k,v|
|
44
|
+
result << k.to_s
|
45
|
+
result << ": "
|
46
|
+
result << v.to_s
|
47
|
+
result << "\r\n"
|
48
|
+
end
|
44
49
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
50
|
+
result << "\r\n"
|
51
|
+
result
|
52
|
+
end
|
53
|
+
|
49
54
|
end
|
50
55
|
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-websocket-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 17
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 13
|
9
|
+
version: "0.13"
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Dan Simpson
|
@@ -14,14 +19,20 @@ default_executable:
|
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: eventmachine
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
20
25
|
requirements:
|
21
26
|
- - ">="
|
22
27
|
- !ruby/object:Gem::Version
|
28
|
+
hash: 39
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 12
|
32
|
+
- 4
|
23
33
|
version: 0.12.4
|
24
|
-
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
25
36
|
description: An evented ruby websocket server built on top of EventMachine
|
26
37
|
email: dan.simpson@gmail.com
|
27
38
|
executables: []
|
@@ -33,11 +44,18 @@ extra_rdoc_files: []
|
|
33
44
|
files:
|
34
45
|
- README.markdown
|
35
46
|
- em-websocket-server.gemspec
|
47
|
+
- examples/chat.rb
|
48
|
+
- examples/chat.html
|
49
|
+
- examples/timesync.html
|
50
|
+
- examples/timesync.rb
|
51
|
+
- examples/tictactoe/tictactoe.html
|
52
|
+
- examples/tictactoe/tictactoe.js
|
53
|
+
- examples/tictactoe/tictactoe.rb
|
36
54
|
- lib/web_socket.rb
|
37
|
-
- lib/web_socket/util.rb
|
38
|
-
- lib/web_socket/frame.rb
|
39
55
|
- lib/web_socket/client.rb
|
40
56
|
- lib/web_socket/server.rb
|
57
|
+
- lib/web_socket/frame.rb
|
58
|
+
- lib/web_socket/util.rb
|
41
59
|
has_rdoc: true
|
42
60
|
homepage: http://github.com/dansimpson/em-websocket-server
|
43
61
|
licenses: []
|
@@ -48,21 +66,27 @@ rdoc_options: []
|
|
48
66
|
require_paths:
|
49
67
|
- lib
|
50
68
|
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
51
70
|
requirements:
|
52
71
|
- - ">="
|
53
72
|
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
74
|
+
segments:
|
75
|
+
- 0
|
54
76
|
version: "0"
|
55
|
-
version:
|
56
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
57
79
|
requirements:
|
58
80
|
- - ">="
|
59
81
|
- !ruby/object:Gem::Version
|
82
|
+
hash: 3
|
83
|
+
segments:
|
84
|
+
- 0
|
60
85
|
version: "0"
|
61
|
-
version:
|
62
86
|
requirements: []
|
63
87
|
|
64
88
|
rubyforge_project:
|
65
|
-
rubygems_version: 1.3.
|
89
|
+
rubygems_version: 1.3.7
|
66
90
|
signing_key:
|
67
91
|
specification_version: 3
|
68
92
|
summary: An evented ruby websocket server built on top of EventMachine
|