websocket-rack-noodles 0.4.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 831b70dad0a08ddb271e39ddd90aef36cceca285
4
+ data.tar.gz: 91e6d4ca6818b570e15a8766540dd2bf967e57bc
5
+ SHA512:
6
+ metadata.gz: 7e887852026879e1d14a17983522acad6fc8c462e72e8afd729163fcde1b1e239dcbbbcabb409d74430fa80edb688c4afd440dc3cc1ff029252304f0ed46ac64
7
+ data.tar.gz: 1665ccd616fc44176d7253b115fb75710c5752a8b2e6b80a63f8d040ac6d2af14802a49b4c887d71b31c927749be3f51d2ebd170b12effce472477a010fb56ae
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ pkg
2
+ Gemfile.lock
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ script: "bundle exec rake spec"
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - ree
7
+ - rbx-18mode
8
+ # - rbx-19mode
data/CHANGELOG.md ADDED
@@ -0,0 +1,61 @@
1
+ # Changelog
2
+
3
+ ## 0.4.0 / 2012-04-16
4
+
5
+ - require EventMachine ~> 1.0.0.beta.4 (support for old version was to confusing for a lot of users)
6
+ - remove thin-websocket wrapper
7
+
8
+ ## 0.3.3 / 2012-02-16
9
+
10
+ - postponse sending messages and closing connection to next tick(prevent locking rest of current request)
11
+ - support for WebSocket drafts 09-13 (currently proposed as standard)
12
+ - prevent blocking tests when invalid responsed is received
13
+
14
+ ## 0.3.2 / 2011-12-13
15
+
16
+ - fix bug that resulted in 'location mismatch' error on Safari and iOS
17
+
18
+ ## 0.3.1 / 2011-07-29
19
+
20
+ - support for WebSocket drafts 07 and 08
21
+
22
+ ## 0.3.0 / 2011-05-10
23
+
24
+ - support for WebSocket drafts 05 and 06
25
+ - fix tests in Ruby 1.9.2
26
+ - better documentation
27
+
28
+ ## 0.2.1 / 2011-04-01
29
+
30
+ - bugfix: env passed to callbacks should be valid now
31
+
32
+ ## 0.2.0 / 2011-04-01
33
+
34
+ - prepare for supporting server other that thin
35
+ - small changes of API
36
+ - change handling backend options
37
+ - depend on em-websocket instead of copying source
38
+
39
+ ## 0.1.4 / 2011-03-13
40
+
41
+ - performance improvements thanks to rbtrace
42
+
43
+ ## 0.1.3 / 2011-03-12
44
+
45
+ - fixed critical bug that duplicated instance variables
46
+
47
+ ## 0.1.2 / 2011-03-08
48
+
49
+ - change Rack::WebSocket::Application @connection variable name to @conn - first one is to often used to block it
50
+ - allow debugging of WebSocket connection
51
+
52
+ ## 0.1.1 / 2011-03-07
53
+
54
+ - add missing gem dependencies
55
+ - clear connection inactivity timeout for WebSocket connections
56
+ - inform about bug in EM < 1.0.0
57
+ - add thin-websocket wrapper around thin binary
58
+
59
+ ## 0.1.0 / 2011-03-05
60
+
61
+ - initial release
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem 'rake'
6
+ gem 'rspec', '~> 2.4'
7
+ gem 'mocha'
data/README.md ADDED
@@ -0,0 +1,196 @@
1
+ # WebSocket Rack
2
+
3
+ - [![Build Status](https://travis-ci.org/imanel/websocket-rack.png)](http://travis-ci.org/imanel/websocket-rack)
4
+ - [![Dependency Status](https://gemnasium.com/imanel/websocket-rack.png)](http://gemnasium.com/imanel/websocket-rack)
5
+ - [![Code Climate](https://codeclimate.com/github/imanel/websocket-rack.png)](https://codeclimate.com/github/imanel/websocket-rack)
6
+
7
+ Rack-based WebSocket server
8
+
9
+ ## Usage
10
+
11
+ Create sample rack config file, and inside build app basing on Rack::WebSocket::Application.
12
+
13
+ ``` ruby
14
+ require 'rack/websocket'
15
+
16
+ class MyApp < Rack::WebSocket::Application
17
+ end
18
+
19
+ map '/' do
20
+ run MyApp.new
21
+ end
22
+ ```
23
+
24
+ After that just run Rack config from Rack server:
25
+
26
+ ``` bash
27
+ thin -R config.ru start
28
+ ```
29
+
30
+ Done.
31
+
32
+ ## Configuration
33
+
34
+ Rack::WebSocket::Application make following methods available:
35
+
36
+ ### initialize
37
+
38
+ Called once after server is started. This is place for application configuration so each instance variables from here will be available in whole application.
39
+
40
+ Example:
41
+
42
+ ``` ruby
43
+ class MyApp < Rack::WebSocket::Application
44
+ def initialize(options = {})
45
+ super
46
+ @myvar = 4
47
+ end
48
+ end
49
+ ```
50
+
51
+ It is important to include 'super' in initialize function, so application will be properly configured.
52
+
53
+ Please notice that in some servers, when 'initialize' is called, EventMachine reactor is not running yet. If you would like to configure EventMachine-based software, then you need to put it inside 'EM.next_tick' block, so this function will be called in first cycle of reactor.
54
+
55
+ Example:
56
+
57
+ ``` ruby
58
+ class MyWebSocket < Rack::WebSocket::Application
59
+ def initialize
60
+ EM.next_tick { @redis = EM::Hiredis.connect }
61
+ end
62
+ end
63
+ ```
64
+
65
+ ### on_open(env)
66
+
67
+ Called after client is connected. Rack env of client is passed as attribute.
68
+
69
+ Example:
70
+
71
+ ``` ruby
72
+ class MyApp < Rack::WebSocket::Application
73
+ def on_open(env)
74
+ puts "Client connected"
75
+ end
76
+ end
77
+ ```
78
+
79
+ ### on_close(env)
80
+
81
+ Called after client is disconnected. Rack env of client is passed as attribute.
82
+
83
+ Example:
84
+
85
+ ``` ruby
86
+ class MyApp < Rack::WebSocket::Application
87
+ def on_close(env)
88
+ puts "Client disconnected"
89
+ end
90
+ end
91
+ ```
92
+
93
+ ### on_message(env, msg)
94
+
95
+ Called after server receive message. Rack env of client is passed as attribute.
96
+
97
+ Example:
98
+
99
+ ``` ruby
100
+ class MyApp < Rack::WebSocket::Application
101
+ def on_message(env, msg)
102
+ puts "Received message: " + msg
103
+ end
104
+ end
105
+ ```
106
+
107
+ ### on_error(env, error)
108
+
109
+ Called after server catch error. Variable passed is instance of Ruby Exception class.
110
+
111
+ Example:
112
+
113
+ ``` ruby
114
+ class MyApp < Rack::WebSocket::Application
115
+ def on_error(env, error)
116
+ puts "Error occured: " + error.message
117
+ end
118
+ end
119
+ ```
120
+
121
+ ### send_data(data)
122
+
123
+ Sends data do client.
124
+
125
+ Example:
126
+
127
+ ``` ruby
128
+ class MyApp < Rack::WebSocket::Application
129
+ def on_open(env)
130
+ send_data "Hello to you!"
131
+ end
132
+ end
133
+ ```
134
+
135
+ ### close_websocket
136
+
137
+ Closes connection.
138
+
139
+ Example:
140
+
141
+ ``` ruby
142
+ class MyApp < Rack::WebSocket::Application
143
+ def on_open(env)
144
+ close_websocket if env['REQUEST_PATH'] != '/websocket'
145
+ end
146
+ end
147
+ ```
148
+
149
+ ## Available variables:
150
+
151
+ ### @options
152
+
153
+ Options passed to app on initialize.
154
+
155
+ Example:
156
+
157
+ ``` ruby
158
+ # In config.ru
159
+ map '/' do
160
+ run MyApp.new :some => :variable
161
+ end
162
+
163
+ # In application instance
164
+ @options # => { :some => :variable }
165
+ ```
166
+
167
+ ## FAQ
168
+
169
+ ### Which WebSocket drafts are supported:
170
+
171
+ Currently we support drafts -75 and -76 form old(hixie) numeration and all drafts from -00 to -13 from current(ietf-hybi) numeration.
172
+ Please note that ietf-hybi-13 is currently proposed as final standard.
173
+
174
+ ### Which Rack servers are supported?
175
+
176
+ Currently we are supporting following servers:
177
+
178
+ - Thin
179
+
180
+ ### How to enable debugging?
181
+
182
+ Just use :backend => { :debug => true } option when initializing your app.
183
+
184
+ ### How to enable wss/SSL support?
185
+
186
+ Thin v1.2.8 has an --ssl option - just use that! :)
187
+
188
+ ### How to use function xxx?
189
+
190
+ Check [Thin](http://code.macournoyer.com/thin/) config - any option supported by Thin(like demonizing, SSL etc.) is supported by WebSocket-Rack.
191
+
192
+ ## About
193
+
194
+ Author: Bernard Potocki <bernard.potocki@imanel.org>
195
+
196
+ Released under MIT license.
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new do |t|
7
+ t.rspec_opts = ["-c", "-f progress"]
8
+ t.pattern = 'spec/**/*_spec.rb'
9
+ end
10
+
11
+ task :default => :spec
@@ -0,0 +1,33 @@
1
+ require './lib/rack/websocket'
2
+
3
+ class MyApp < Rack::WebSocket::Application
4
+ def on_open(env)
5
+ puts "client connected"
6
+ EM.add_timer(5) do
7
+ send_data "This message should show-up 5 secs later"
8
+ end
9
+
10
+ EM.add_timer(15) do
11
+ send_data "This message should show-up 15 secs later"
12
+ end
13
+ end
14
+
15
+ def on_message(env, msg)
16
+ puts "message received: " + msg
17
+ send_data "Message: #{msg}"
18
+ end
19
+
20
+ def on_close(env)
21
+ puts "client disconnected"
22
+ end
23
+ end
24
+
25
+ # use Rack::CommonLogger
26
+
27
+ map '/' do
28
+ run Rack::File.new(File.expand_path(File.dirname(__FILE__)) + '/html')
29
+ end
30
+
31
+ map '/websocket' do
32
+ run MyApp.new # :backend => { :debug => true }
33
+ end