sinatra-websocketio 0.0.2 → 0.0.3

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/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