sinatra-websocketio 0.1.7 → 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.
- data/Gemfile +0 -2
- data/History.txt +6 -0
- data/lib/sinatra/websocketio/client.rb +97 -0
- data/lib/sinatra-websocketio/version.rb +1 -1
- data/lib/sinatra-websocketio/websocketio.rb +0 -1
- data/sample/README.md +2 -2
- data/sample/bin/cui_chat_client.rb +18 -24
- data/sample/config.ru +1 -0
- data/sinatra-websocketio.gemspec +8 -1
- data/test/test_helper.rb +1 -1
- data/test/test_websocketio.rb +48 -69
- metadata +93 -17
- data/lib/em-websocketio-client/client.rb +0 -62
- data/lib/em-websocketio-client.rb +0 -6
- data/sample/Gemfile +0 -13
- data/sample/Gemfile.lock +0 -63
- data/sample/Procfile +0 -1
data/Gemfile
CHANGED
data/History.txt
CHANGED
@@ -0,0 +1,97 @@
|
|
1
|
+
require File.expand_path '../../sinatra-websocketio/version', File.dirname(__FILE__)
|
2
|
+
require 'websocket-client-simple'
|
3
|
+
require 'event_emitter'
|
4
|
+
require 'json'
|
5
|
+
require 'timeout'
|
6
|
+
|
7
|
+
module Sinatra
|
8
|
+
module WebSocketIO
|
9
|
+
class Client
|
10
|
+
class Error < StandardError
|
11
|
+
end
|
12
|
+
|
13
|
+
include EventEmitter
|
14
|
+
attr_reader :url, :session
|
15
|
+
attr_accessor :running, :connecting, :timeout
|
16
|
+
|
17
|
+
def initialize(url)
|
18
|
+
@url = url
|
19
|
+
@session = nil
|
20
|
+
@websocket = nil
|
21
|
+
@connecting = false
|
22
|
+
@running = false
|
23
|
+
@timeout = 5
|
24
|
+
|
25
|
+
on :__session_id do |session_id|
|
26
|
+
@session = session_id
|
27
|
+
emit :connect, @session
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def connect
|
32
|
+
return self if connecting
|
33
|
+
this = self
|
34
|
+
@running = true
|
35
|
+
url = @session ? "#{@url}/session=#{@session}" : @url
|
36
|
+
@websocket = nil
|
37
|
+
begin
|
38
|
+
@websocket = WebSocket::Client::Simple::Client.new url
|
39
|
+
rescue StandardError, Timeout::Error => e
|
40
|
+
Thread.new do
|
41
|
+
sleep 5
|
42
|
+
connect
|
43
|
+
end
|
44
|
+
end
|
45
|
+
return self unless @websocket
|
46
|
+
|
47
|
+
@websocket.on :message do |msg|
|
48
|
+
begin
|
49
|
+
data = JSON.parse msg.data
|
50
|
+
this.emit data['type'], data['data']
|
51
|
+
rescue => e
|
52
|
+
this.emit :error, e
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
@websocket.on :close do |e|
|
57
|
+
if this.connecting
|
58
|
+
this.connecting = false
|
59
|
+
this.emit :disconnect, e
|
60
|
+
end
|
61
|
+
if this.running
|
62
|
+
Thread.new do
|
63
|
+
sleep 5
|
64
|
+
this.connect
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
@websocket.on :open do
|
70
|
+
this.connecting = true
|
71
|
+
end
|
72
|
+
|
73
|
+
return self
|
74
|
+
end
|
75
|
+
|
76
|
+
def close
|
77
|
+
@running = false
|
78
|
+
@websocket.close
|
79
|
+
end
|
80
|
+
|
81
|
+
def push(type, data)
|
82
|
+
if !@connecting
|
83
|
+
emit :error, 'websocket not connecting'
|
84
|
+
return
|
85
|
+
end
|
86
|
+
begin
|
87
|
+
Timeout::timeout @timeout do
|
88
|
+
@websocket.send({:type => type, :data => data, :session => @session}.to_json)
|
89
|
+
end
|
90
|
+
rescue Timeout::Error, StandardError => e
|
91
|
+
emit :error, e
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/sample/README.md
CHANGED
@@ -8,13 +8,13 @@ WebSocket Chat
|
|
8
8
|
Install Dependencies
|
9
9
|
--------------------
|
10
10
|
|
11
|
-
% gem install bundler
|
11
|
+
% gem install bundler
|
12
12
|
% bundle install
|
13
13
|
|
14
14
|
|
15
15
|
Run
|
16
16
|
---
|
17
17
|
|
18
|
-
%
|
18
|
+
% rackup config.ru -p 5000
|
19
19
|
|
20
20
|
=> http://localhost:5000
|
@@ -3,36 +3,30 @@ require 'rubygems'
|
|
3
3
|
require 'bundler/setup'
|
4
4
|
$:.unshift File.expand_path '../../lib', File.dirname(__FILE__)
|
5
5
|
require 'eventmachine'
|
6
|
-
require '
|
6
|
+
require 'sinatra/websocketio/client'
|
7
7
|
|
8
8
|
name = `whoami`.strip || 'shokai'
|
9
9
|
|
10
|
-
|
11
|
-
client = EM::WebSocketIO::Client.new('ws://localhost:8080').connect
|
10
|
+
client = Sinatra::WebSocketIO::Client.new('ws://localhost:8080').connect
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
client.on :chat do |data|
|
18
|
-
puts "<#{data['name']}> #{data['message']}"
|
19
|
-
end
|
20
|
-
|
21
|
-
client.on :error do |err|
|
22
|
-
STDERR.puts err
|
23
|
-
end
|
12
|
+
client.on :connect do |session|
|
13
|
+
puts "connect!! (session_id:#{session})"
|
14
|
+
end
|
24
15
|
|
25
|
-
|
26
|
-
|
27
|
-
|
16
|
+
client.on :chat do |data|
|
17
|
+
puts "<#{data['name']}> #{data['message']}"
|
18
|
+
end
|
28
19
|
|
29
|
-
|
30
|
-
|
31
|
-
line = STDIN.gets.strip
|
32
|
-
next if line.empty?
|
33
|
-
client.push :chat, {:message => line, :name => name}
|
34
|
-
end
|
35
|
-
end
|
20
|
+
client.on :error do |err|
|
21
|
+
STDERR.puts err
|
36
22
|
end
|
37
23
|
|
24
|
+
client.on :disconnect do
|
25
|
+
puts "disconnected!!"
|
26
|
+
end
|
38
27
|
|
28
|
+
loop do
|
29
|
+
line = STDIN.gets.strip
|
30
|
+
next if line.empty?
|
31
|
+
client.push :chat, {:message => line, :name => name}
|
32
|
+
end
|
data/sample/config.ru
CHANGED
data/sinatra-websocketio.gemspec
CHANGED
@@ -15,11 +15,18 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
16
16
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
17
|
gem.require_paths = ["lib"]
|
18
|
+
|
19
|
+
gem.add_development_dependency 'minitest'
|
20
|
+
gem.add_development_dependency 'thin'
|
21
|
+
gem.add_development_dependency 'haml'
|
22
|
+
gem.add_development_dependency 'sass'
|
23
|
+
gem.add_development_dependency 'rack'
|
24
|
+
|
18
25
|
gem.add_dependency 'sinatra-contrib', '>= 1.3.2'
|
19
26
|
gem.add_dependency 'sinatra', '>= 1.3.0'
|
20
|
-
gem.add_dependency 'em-websocket-client', '>= 0.1.1'
|
21
27
|
gem.add_dependency 'em-websocket', '>= 0.5.0'
|
22
28
|
gem.add_dependency 'eventmachine', '>= 1.0.0'
|
23
29
|
gem.add_dependency 'json', '>= 1.7.0'
|
24
30
|
gem.add_dependency 'event_emitter', '>= 0.2.4'
|
31
|
+
gem.add_dependency 'websocket-client-simple'
|
25
32
|
end
|
data/test/test_helper.rb
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'bundler/setup'
|
3
3
|
$:.unshift File.expand_path '../lib', File.dirname(__FILE__)
|
4
4
|
require 'minitest/autorun'
|
5
|
-
require '
|
5
|
+
require 'sinatra/websocketio/client'
|
6
6
|
require File.expand_path 'app', File.dirname(__FILE__)
|
7
7
|
|
8
8
|
|
data/test/test_websocketio.rb
CHANGED
@@ -13,30 +13,25 @@ class TestWebSocketIO < MiniTest::Unit::TestCase
|
|
13
13
|
def test_simple
|
14
14
|
res = nil
|
15
15
|
post_data = {:time => Time.now.to_s, :msg => 'hello!!'}
|
16
|
-
|
17
|
-
client = EM::WebSocketIO::Client.new(App.websocketio_url).connect
|
16
|
+
client = Sinatra::WebSocketIO::Client.new(App.websocketio_url).connect
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
client.on :broadcast do |data|
|
19
|
+
res = data
|
20
|
+
client.close
|
21
|
+
end
|
23
22
|
|
24
|
-
|
25
|
-
|
26
|
-
end
|
23
|
+
client.on :disconnect do
|
24
|
+
end
|
27
25
|
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
client.on :connect do |session|
|
27
|
+
push :broadcast, post_data
|
28
|
+
end
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
sleep 0.1
|
36
|
-
end
|
37
|
-
client.close
|
38
|
-
end
|
30
|
+
50.times do
|
31
|
+
break if res != nil
|
32
|
+
sleep 0.1
|
39
33
|
end
|
34
|
+
client.close
|
40
35
|
assert res != nil, 'server not respond'
|
41
36
|
assert res["time"] == post_data[:time]
|
42
37
|
assert res["msg"] == post_data[:msg]
|
@@ -47,37 +42,29 @@ class TestWebSocketIO < MiniTest::Unit::TestCase
|
|
47
42
|
post_data = {:time => Time.now.to_s, :msg => 'hello!!', :to => nil}
|
48
43
|
res = nil
|
49
44
|
res2 = nil
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
client.on :disconnect do
|
57
|
-
EM.stop_event_loop
|
58
|
-
end
|
45
|
+
client = Sinatra::WebSocketIO::Client.new(App.websocketio_url).connect
|
46
|
+
client.on :message do |data|
|
47
|
+
res = data
|
48
|
+
end
|
59
49
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
end
|
66
|
-
client2.on :message do |data|
|
67
|
-
res2 = data
|
68
|
-
client2.close
|
69
|
-
client.close
|
70
|
-
end
|
50
|
+
client.on :connect do |session|
|
51
|
+
client2 = Sinatra::WebSocketIO::Client.new(App.websocketio_url).connect
|
52
|
+
client2.on :connect do |session2|
|
53
|
+
post_data['to'] = session2
|
54
|
+
client.push :message, post_data
|
71
55
|
end
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
break if res != nil
|
76
|
-
sleep 0.1
|
77
|
-
end
|
56
|
+
client2.on :message do |data|
|
57
|
+
res2 = data
|
58
|
+
client2.close
|
78
59
|
client.close
|
79
60
|
end
|
80
61
|
end
|
62
|
+
|
63
|
+
50.times do
|
64
|
+
break if res != nil
|
65
|
+
sleep 0.1
|
66
|
+
end
|
67
|
+
client.close
|
81
68
|
assert res2 != nil, 'server not respond'
|
82
69
|
assert res2["time"] == post_data[:time]
|
83
70
|
assert res2["msg"] == post_data[:msg]
|
@@ -91,35 +78,27 @@ class TestWebSocketIO < MiniTest::Unit::TestCase
|
|
91
78
|
res = nil
|
92
79
|
res2 = nil
|
93
80
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
end
|
81
|
+
client = Sinatra::WebSocketIO::Client.new(App.websocketio_url).connect
|
82
|
+
client.on :broadcast do |data|
|
83
|
+
res = data
|
84
|
+
end
|
99
85
|
|
100
|
-
|
101
|
-
|
86
|
+
client.on :connect do |session|
|
87
|
+
client2 = Sinatra::WebSocketIO::Client.new(App.websocketio_url).connect
|
88
|
+
client2.on :connect do |session2|
|
89
|
+
client.push :broadcast, post_data
|
102
90
|
end
|
103
|
-
|
104
|
-
|
105
|
-
client2
|
106
|
-
client2.on :connect do |session2|
|
107
|
-
client.push :broadcast, post_data
|
108
|
-
end
|
109
|
-
client2.on :broadcast do |data|
|
110
|
-
res2 = data
|
111
|
-
client2.close
|
112
|
-
end
|
91
|
+
client2.on :broadcast do |data|
|
92
|
+
res2 = data
|
93
|
+
client2.close
|
113
94
|
end
|
95
|
+
end
|
114
96
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
sleep 0.1
|
119
|
-
end
|
120
|
-
client.close
|
121
|
-
end
|
97
|
+
50.times do
|
98
|
+
break if res != nil and res2 != nil
|
99
|
+
sleep 0.1
|
122
100
|
end
|
101
|
+
client.close
|
123
102
|
|
124
103
|
assert res != nil, 'server not respond'
|
125
104
|
assert res["time"] == post_data[:time]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-websocketio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,32 +9,96 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: minitest
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
22
|
-
type: :
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: '0'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: thin
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
35
|
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: haml
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: sass
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rack
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: sinatra-contrib
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.3.2
|
38
102
|
type: :runtime
|
39
103
|
prerelease: false
|
40
104
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,15 +106,15 @@ dependencies:
|
|
42
106
|
requirements:
|
43
107
|
- - ! '>='
|
44
108
|
- !ruby/object:Gem::Version
|
45
|
-
version: 1.3.
|
109
|
+
version: 1.3.2
|
46
110
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
111
|
+
name: sinatra
|
48
112
|
requirement: !ruby/object:Gem::Requirement
|
49
113
|
none: false
|
50
114
|
requirements:
|
51
115
|
- - ! '>='
|
52
116
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
117
|
+
version: 1.3.0
|
54
118
|
type: :runtime
|
55
119
|
prerelease: false
|
56
120
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,7 +122,7 @@ dependencies:
|
|
58
122
|
requirements:
|
59
123
|
- - ! '>='
|
60
124
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
125
|
+
version: 1.3.0
|
62
126
|
- !ruby/object:Gem::Dependency
|
63
127
|
name: em-websocket
|
64
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,6 +187,22 @@ dependencies:
|
|
123
187
|
- - ! '>='
|
124
188
|
- !ruby/object:Gem::Version
|
125
189
|
version: 0.2.4
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: websocket-client-simple
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ! '>='
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0'
|
198
|
+
type: :runtime
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ! '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
126
206
|
description: WebSocket component for Sinatra RocketIO
|
127
207
|
email:
|
128
208
|
- hashimoto@shokai.org
|
@@ -136,8 +216,6 @@ files:
|
|
136
216
|
- LICENSE.txt
|
137
217
|
- README.md
|
138
218
|
- Rakefile
|
139
|
-
- lib/em-websocketio-client.rb
|
140
|
-
- lib/em-websocketio-client/client.rb
|
141
219
|
- lib/js/event_emitter.js
|
142
220
|
- lib/js/websocketio.js
|
143
221
|
- lib/sinatra-websocketio.rb
|
@@ -148,10 +226,8 @@ files:
|
|
148
226
|
- lib/sinatra-websocketio/version.rb
|
149
227
|
- lib/sinatra-websocketio/websocketio.rb
|
150
228
|
- lib/sinatra/websocketio.rb
|
229
|
+
- lib/sinatra/websocketio/client.rb
|
151
230
|
- lib/sinatra/websocketio_nostart.rb
|
152
|
-
- sample/Gemfile
|
153
|
-
- sample/Gemfile.lock
|
154
|
-
- sample/Procfile
|
155
231
|
- sample/README.md
|
156
232
|
- sample/bin/cui_chat_client.rb
|
157
233
|
- sample/config.ru
|
@@ -1,62 +0,0 @@
|
|
1
|
-
module EventMachine
|
2
|
-
module WebSocketIO
|
3
|
-
class Client
|
4
|
-
include EventEmitter
|
5
|
-
attr_reader :url, :session, :running
|
6
|
-
attr_accessor :timeout
|
7
|
-
|
8
|
-
def initialize(url)
|
9
|
-
raise ArgumentError, "invalid websocket URL \"#{url}\"" unless url =~ /^ws:\/\/.+/
|
10
|
-
@url = url
|
11
|
-
@running = false
|
12
|
-
@__reconnect_timer_id = nil
|
13
|
-
@ws = nil
|
14
|
-
self.on :__session_id do |session_id|
|
15
|
-
@session = session_id
|
16
|
-
self.emit :connect, session_id
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def connect
|
21
|
-
url = @session ? "#{@url}/session=#{@session}" : @url
|
22
|
-
@ws = EventMachine::WebSocketClient.connect url
|
23
|
-
@running = true
|
24
|
-
|
25
|
-
@ws.stream do |msg|
|
26
|
-
data = JSON.parse msg
|
27
|
-
self.emit data['type'], data['data']
|
28
|
-
end
|
29
|
-
|
30
|
-
@ws.callback do
|
31
|
-
self.push :__session_id
|
32
|
-
end
|
33
|
-
|
34
|
-
@ws.errback do |err|
|
35
|
-
self.emit :error, err
|
36
|
-
end
|
37
|
-
|
38
|
-
@ws.disconnect do
|
39
|
-
self.emit :disconnect
|
40
|
-
if @running
|
41
|
-
@__reconnect_timer_id = EM::add_timer 10 do
|
42
|
-
connect
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
return self
|
48
|
-
end
|
49
|
-
|
50
|
-
def close
|
51
|
-
@running = false
|
52
|
-
@ws.close_connection if @ws
|
53
|
-
EM::cancel_timer @__reconnect_timer_id
|
54
|
-
end
|
55
|
-
|
56
|
-
def push(type, data={})
|
57
|
-
@ws.send_msg({:type => type, :data => data, :session => self.session}.to_json)
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
data/sample/Gemfile
DELETED
data/sample/Gemfile.lock
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: https://rubygems.org/
|
3
|
-
specs:
|
4
|
-
addressable (2.3.3)
|
5
|
-
backports (3.1.1)
|
6
|
-
daemons (1.1.9)
|
7
|
-
em-websocket (0.5.0)
|
8
|
-
eventmachine (>= 0.12.9)
|
9
|
-
http_parser.rb (~> 0.5.3)
|
10
|
-
em-websocket-client (0.1.1)
|
11
|
-
eventmachine
|
12
|
-
libwebsocket
|
13
|
-
event_emitter (0.2.4)
|
14
|
-
eventmachine (1.0.3)
|
15
|
-
foreman (0.62.0)
|
16
|
-
thor (>= 0.13.6)
|
17
|
-
haml (4.0.0)
|
18
|
-
tilt
|
19
|
-
http_parser.rb (0.5.3)
|
20
|
-
json (1.7.7)
|
21
|
-
libwebsocket (0.1.7.1)
|
22
|
-
addressable
|
23
|
-
websocket
|
24
|
-
rack (1.5.2)
|
25
|
-
rack-protection (1.5.0)
|
26
|
-
rack
|
27
|
-
rack-test (0.6.2)
|
28
|
-
rack (>= 1.0)
|
29
|
-
sass (3.2.7)
|
30
|
-
sinatra (1.3.6)
|
31
|
-
rack (~> 1.4)
|
32
|
-
rack-protection (~> 1.3)
|
33
|
-
tilt (~> 1.3, >= 1.3.3)
|
34
|
-
sinatra-contrib (1.3.2)
|
35
|
-
backports (>= 2.0)
|
36
|
-
eventmachine
|
37
|
-
rack-protection
|
38
|
-
rack-test
|
39
|
-
sinatra (~> 1.3.0)
|
40
|
-
tilt (~> 1.3)
|
41
|
-
thin (1.5.1)
|
42
|
-
daemons (>= 1.0.9)
|
43
|
-
eventmachine (>= 0.12.6)
|
44
|
-
rack (>= 1.0.0)
|
45
|
-
thor (0.17.0)
|
46
|
-
tilt (1.3.6)
|
47
|
-
websocket (1.0.7)
|
48
|
-
|
49
|
-
PLATFORMS
|
50
|
-
ruby
|
51
|
-
|
52
|
-
DEPENDENCIES
|
53
|
-
em-websocket
|
54
|
-
em-websocket-client
|
55
|
-
event_emitter
|
56
|
-
foreman
|
57
|
-
haml
|
58
|
-
json
|
59
|
-
rack
|
60
|
-
sass
|
61
|
-
sinatra
|
62
|
-
sinatra-contrib
|
63
|
-
thin
|
data/sample/Procfile
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
web: bundle exec rackup config.ru -p $PORT
|