sinatra-websocketio 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 0.0.3 2013-03-09
2
+
3
+ * add EM::WebSocketIO::Client
4
+
1
5
  === 0.0.2 2013-03-08
2
6
 
3
7
  * set :websocketio, :port => 8080
@@ -0,0 +1,62 @@
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
@@ -0,0 +1,6 @@
1
+ require 'json'
2
+ require 'eventmachine'
3
+ require 'event_emitter'
4
+ require 'em-websocket-client'
5
+ require File.expand_path 'sinatra-websocketio/version', File.dirname(__FILE__)
6
+ require File.expand_path 'em-websocketio-client/client', File.dirname(__FILE__)
@@ -1,5 +1,5 @@
1
1
  module Sinatra
2
2
  module WebSocketIO
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -66,5 +66,7 @@ class WebSocketIO
66
66
 
67
67
  end
68
68
  EventEmitter.apply WebSocketIO
69
-
69
+ WebSocketIO.on :__session_id do |data, from|
70
+ WebSocketIO.push :__session_id, from, :to => from
71
+ end
70
72
 
data/sample/Gemfile CHANGED
@@ -11,3 +11,4 @@ gem 'json'
11
11
  gem 'haml'
12
12
  gem 'sass'
13
13
  gem 'em-websocket'
14
+ gem 'em-websocket-client'
data/sample/Gemfile.lock CHANGED
@@ -1,11 +1,15 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ addressable (2.3.3)
4
5
  backports (3.0.3)
5
6
  daemons (1.1.9)
6
7
  em-websocket (0.5.0)
7
8
  eventmachine (>= 0.12.9)
8
9
  http_parser.rb (~> 0.5.3)
10
+ em-websocket-client (0.1.1)
11
+ eventmachine
12
+ libwebsocket
9
13
  event_emitter (0.2.3)
10
14
  eventmachine (1.0.1)
11
15
  foreman (0.61.0)
@@ -14,6 +18,9 @@ GEM
14
18
  tilt
15
19
  http_parser.rb (0.5.3)
16
20
  json (1.7.7)
21
+ libwebsocket (0.1.7.1)
22
+ addressable
23
+ websocket
17
24
  rack (1.5.2)
18
25
  rack-protection (1.4.0)
19
26
  rack
@@ -37,6 +44,7 @@ GEM
37
44
  rack (>= 1.0.0)
38
45
  thor (0.17.0)
39
46
  tilt (1.3.4)
47
+ websocket (1.0.7)
40
48
 
41
49
  PLATFORMS
42
50
  ruby
@@ -44,6 +52,7 @@ PLATFORMS
44
52
  DEPENDENCIES
45
53
  backports (< 3.1.0)
46
54
  em-websocket
55
+ em-websocket-client
47
56
  event_emitter
48
57
  foreman
49
58
  haml
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'bundler/setup'
4
+ $:.unshift File.expand_path '../../lib', File.dirname(__FILE__)
5
+ require 'eventmachine'
6
+ require 'em-websocketio-client'
7
+
8
+ name = `whoami`.strip || 'shokai'
9
+
10
+ EM::run do
11
+ client = EM::WebSocketIO::Client.new('ws://localhost:8080').connect
12
+
13
+ client.on :connect do |session|
14
+ puts "connect!! (session_id:#{session})"
15
+ end
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
24
+
25
+ client.on :disconnect do
26
+ puts "disconnected!!"
27
+ end
28
+
29
+ EM::defer do
30
+ loop do
31
+ line = STDIN.gets.strip
32
+ next if line.empty?
33
+ client.push :chat, {:message => line, :name => name}
34
+ end
35
+ end
36
+ end
37
+
38
+
@@ -22,4 +22,5 @@ Gem::Specification.new do |gem|
22
22
  gem.add_dependency 'json', '>= 1.7.0'
23
23
  gem.add_dependency 'event_emitter', '>= 0.2.0'
24
24
  gem.add_dependency 'em-websocket'
25
+ gem.add_dependency 'em-websocket-client'
25
26
  end
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.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-08 00:00:00.000000000 Z
12
+ date: 2013-03-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -123,6 +123,22 @@ dependencies:
123
123
  - - ! '>='
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: em-websocket-client
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
126
142
  description: Node.js like WebSocket I/O plugin for Sinatra.
127
143
  email:
128
144
  - hashimoto@shokai.org
@@ -136,6 +152,8 @@ files:
136
152
  - LICENSE.txt
137
153
  - README.md
138
154
  - Rakefile
155
+ - lib/em-websocketio-client.rb
156
+ - lib/em-websocketio-client/client.rb
139
157
  - lib/js/event_emitter.js
140
158
  - lib/js/websocketio.js
141
159
  - lib/sinatra-websocketio.rb
@@ -148,6 +166,7 @@ files:
148
166
  - sample/Gemfile.lock
149
167
  - sample/Procfile
150
168
  - sample/README.md
169
+ - sample/bin/cui_chat_client.rb
151
170
  - sample/config.ru
152
171
  - sample/main.rb
153
172
  - sample/public/js/index.js