sinatra-rocketio 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 574c09d0944df2356c86d057c1e80eb81496845b
4
- data.tar.gz: 237b7b7762880c7e1d875dbea7e1443731ae36ec
3
+ metadata.gz: f749b52c9e6cdf5d94b913387b7ed435df575a21
4
+ data.tar.gz: 26bb924f8435df3c0be29d0cd9cbfe0fe5551f3d
5
5
  SHA512:
6
- metadata.gz: 5b05e9851fc7213cd9a486aecd761830fc1449a264d0f9a68869e4a474673e15a0d22708b054b6665515be74c2831ebd9b868e1c236a620eba8da8619cfc1c4d
7
- data.tar.gz: 1d4f6b5018b2921baf2176b9a528fd5fd7f09255f2afcde4b844c652e8dbfa12455b2d70c455bd06f49fb4ea07b913b58a65ee25970b6693b164e49119d438a1
6
+ metadata.gz: 32782a0c0c99665694a5f8ff36af55584b610db812ea7a365e2ff218ea27ae6d6423153e31e8f03254b25ed6f6db7501801800d54038d2eb4158497d1d073282
7
+ data.tar.gz: c3f910f932c95ebc2806300cfd9f846ad79ad562809a3ae4001efd4961e5cbb29acfaacb8de457f156e6afd49485ee3bce9fd536b23c30f8b571f39c7cdded9c
@@ -0,0 +1,4 @@
1
+ // RocketIO.js v<%= Sinatra::RocketIO::VERSION %> (websocketio:v<%= Sinatra::WebSocketIO::VERSION %>, cometio:v<%= Sinatra::CometIO::VERSION %>)
2
+ // https://github.com/shokai/sinatra-rocketio
3
+ // (c) 2013 Sho Hashimoto <hashimoto@shokai.org>
4
+ // The MIT License
@@ -1,3 +1,8 @@
1
+ === 0.2.6 2013-05-27
2
+
3
+ * JS Lib for browser
4
+ * allow cross-domain access to /rocketio/settings
5
+
1
6
  === 0.2.5 2013-05-26
2
7
 
3
8
  * add function RocketIO::Client#wait
data/README.md CHANGED
@@ -31,7 +31,7 @@ Server Side
31
31
  ```ruby
32
32
  require 'sinatra'
33
33
  require 'sinatra/rocketio'
34
- set :cometio, :timeout => 120, :post_interval => 2
34
+ set :cometio, :timeout => 120, :post_interval => 2, :allow_crossdomain => false
35
35
  set :websocketio, :port => 5001
36
36
  set :rocketio, :websocket => true, :comet => true # enable WebSocket and Comet
37
37
 
@@ -47,7 +47,7 @@ io.push :light, {:value => 150}, {:to => session_id} # to specific client
47
47
  Client Side
48
48
 
49
49
  ```html
50
- <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
50
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
51
51
  <script src="<%= rocketio_js %>"></script>
52
52
  ```
53
53
  ```javascript
@@ -210,6 +210,40 @@ Sample App
210
210
  - https://github.com/shokai/rocketio-arduino-sample
211
211
 
212
212
 
213
+ JavaScript Lib for browser
214
+ --------------------------
215
+
216
+ ### Download
217
+
218
+ - [rocketio.js](https://raw.github.com/shokai/sinatra-rocketio/master/rocketio.js)
219
+ - [rocketio.min.js](https://raw.github.com/shokai/sinatra-rocketio/master/rocketio.min.js)
220
+
221
+
222
+ ### Usage
223
+
224
+ ```html
225
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
226
+ <script src="/rocketio.min.js"></script>
227
+ ```
228
+ ```javascript
229
+ var io = new RocketIO().connect("http://example.com");
230
+
231
+ io.on("connect", function(){
232
+ alert(io.type + " connect!! " + io.session);
233
+ });
234
+ ```
235
+
236
+ ### Generate JS Lib
237
+
238
+ % npm install -g uglify-js
239
+ % gem install bundler
240
+ % bundle install
241
+ % rake jslib
242
+
243
+ => rocketio.js and rocketio.min.js
244
+
245
+
246
+
213
247
  Test
214
248
  ----
215
249
 
data/Rakefile CHANGED
@@ -5,6 +5,34 @@ Rake::TestTask.new do |t|
5
5
  t.pattern = "test/test_*.rb"
6
6
  end
7
7
 
8
+ desc "generate JavaScript lib for browser"
9
+ task :jslib do
10
+ dest = "rocketio.js"
11
+ dest_min = "rocketio.min.js"
12
+
13
+ require "rubygems"
14
+ require "sinatra/websocketio"
15
+ require "sinatra/cometio"
16
+ require "sinatra/rocketio"
17
+ require "erb"
18
+
19
+ websocketio_url = nil
20
+ cometio_url = nil
21
+ header = ERB.new(File.open(File.expand_path "HEADER.erb", File.dirname(__FILE__)).read).result(binding)
22
+ js = ERB.new(Sinatra::RocketIO.javascript).result(binding)
23
+
24
+ File.open(dest, "w+") do |f|
25
+ f.puts header
26
+ f.write js
27
+ end
28
+ puts " => #{dest}"
29
+ File.open(dest_min, "w+") do |f|
30
+ f.puts header
31
+ end
32
+ system "uglifyjs #{dest} >> #{dest_min}"
33
+ puts " => #{dest_min}"
34
+ end
35
+
8
36
  desc "Start test server"
9
37
  task :test_server do
10
38
  require File.expand_path 'test/app', File.dirname(__FILE__)
@@ -1,30 +1,47 @@
1
1
  var RocketIO = function(opts){
2
2
  new EventEmitter().apply(this);
3
- this.type = null; // "comet", "websocket"
4
- this.session = null;
3
+ if(typeof opts === "undefined" || opts === null) opts = {};
4
+ this.type = opts.type || null; // "comet" or "websocket"
5
+ this.session = opts.session || null;
5
6
  this.channel = null;
7
+ if(typeof opts.channel !== "undefined" && opts.channel !== null){
8
+ this.channel = ""+opts.channel;
9
+ }
10
+ var setting = {};
6
11
  this.io = null;
7
12
  var self = this;
8
13
  var ws_close_timer = null;
9
- if(typeof opts === "object"){
10
- this.channel = ""+opts.channel;
11
- }
12
14
  self.on("__connect", function(session_id){
13
15
  self.session = session_id;
14
16
  self.io.push("__channel_id", self.channel);
15
17
  self.emit("connect");
16
18
  });
17
19
 
18
- this.connect = function(){
20
+ this.connect = function(url){
21
+ if(typeof url === "string"){
22
+ $.getJSON(url+"/rocketio/settings", function(res){
23
+ setting = res;
24
+ connect_io();
25
+ });
26
+ return self;
27
+ }
28
+ else{
29
+ return connect_io();
30
+ }
31
+ };
32
+
33
+ var connect_io = function(){
19
34
  self.io = function(){
20
35
  if(self.type === "comet") return;
21
36
  if(typeof WebSocketIO !== "function") return;
22
37
  var io = new WebSocketIO();
38
+ if(typeof setting.websocket === "string") io.url = setting.websocket;
23
39
  io.session = self.session;
24
40
  return io.connect();
25
41
  }() || function(){
26
42
  if(typeof CometIO !== "function") return;
27
43
  var io = new CometIO();
44
+ if(typeof setting.comet === "string") io.url = setting.comet;
28
45
  io.session = self.session;
29
46
  return io.connect();
30
47
  }();
@@ -44,7 +61,7 @@ var RocketIO = function(opts){
44
61
  ws_close_timer = setTimeout(function(){
45
62
  self.close();
46
63
  self.type = "comet";
47
- self.connect();
64
+ connect_io();
48
65
  }, 3000);
49
66
  self.once("connect", function(){
50
67
  if(ws_close_timer) clearTimeout(ws_close_timer);
@@ -7,6 +7,7 @@ module Sinatra
7
7
  app.helpers Sinatra::RocketIO::Helpers
8
8
  app.get '/rocketio/settings' do
9
9
  content_type 'application/json'
10
+ response["Access-Control-Allow-Origin"] = "*"
10
11
  @setting_json ||= (
11
12
  setting = {}
12
13
  setting[:websocket] = websocketio_url if Sinatra::RocketIO.options[:websocket]
@@ -1,5 +1,5 @@
1
1
  module Sinatra
2
2
  module RocketIO
3
- VERSION = "0.2.5"
3
+ VERSION = "0.2.6"
4
4
  end
5
5
  end
@@ -0,0 +1,310 @@
1
+ // RocketIO.js v0.2.5 (websocketio:v0.3.1, cometio:v0.5.7)
2
+ // https://github.com/shokai/sinatra-rocketio
3
+ // (c) 2012-2013 Sho Hashimoto <hashimoto@shokai.org>
4
+ // The MIT License
5
+ var RocketIO = function(opts){
6
+ new EventEmitter().apply(this);
7
+ if(typeof opts === "undefined" || opts === null) opts = {};
8
+ this.type = opts.type || null; // "comet" or "websocket"
9
+ this.session = opts.session || null;
10
+ this.channel = null;
11
+ if(typeof opts.channel !== "undefined" && opts.channel !== null){
12
+ this.channel = ""+opts.channel;
13
+ }
14
+ var setting = {};
15
+ this.io = null;
16
+ var self = this;
17
+ var ws_close_timer = null;
18
+ self.on("__connect", function(session_id){
19
+ self.session = session_id;
20
+ self.io.push("__channel_id", self.channel);
21
+ self.emit("connect");
22
+ });
23
+
24
+ this.connect = function(url){
25
+ if(typeof url === "string"){
26
+ $.getJSON(url+"/rocketio/settings", function(res){
27
+ setting = res;
28
+ connect_io();
29
+ });
30
+ return self;
31
+ }
32
+ else{
33
+ return connect_io();
34
+ }
35
+ };
36
+
37
+ var connect_io = function(){
38
+ self.io = function(){
39
+ if(self.type === "comet") return;
40
+ if(typeof WebSocketIO !== "function") return;
41
+ var io = new WebSocketIO();
42
+ if(typeof setting.websocket === "string") io.url = setting.websocket;
43
+ io.session = self.session;
44
+ return io.connect();
45
+ }() || function(){
46
+ if(typeof CometIO !== "function") return;
47
+ var io = new CometIO();
48
+ if(typeof setting.comet === "string") io.url = setting.comet;
49
+ io.session = self.session;
50
+ return io.connect();
51
+ }();
52
+ if(typeof self.io === "undefined"){
53
+ setTimeout(function(){
54
+ self.emit("error", "WebSocketIO and CometIO are not available");
55
+ }, 100);
56
+ return self;
57
+ };
58
+ if(self.io.url.match(/^ws:\/\/.+/)) self.type = "websocket";
59
+ else if(self.io.url.match(/cometio/)) self.type = "comet";
60
+ else self.type = "unknown";
61
+ self.io.on("*", function(event_name, args){
62
+ if(event_name === "connect") event_name = "__connect";
63
+ self.emit(event_name, args);
64
+ });
65
+ ws_close_timer = setTimeout(function(){
66
+ self.close();
67
+ self.type = "comet";
68
+ connect_io();
69
+ }, 3000);
70
+ self.once("connect", function(){
71
+ if(ws_close_timer) clearTimeout(ws_close_timer);
72
+ ws_close_timer = null;
73
+ });
74
+ return self;
75
+ };
76
+
77
+ this.close = function(){
78
+ self.io.close();
79
+ };
80
+
81
+ this.push = function(type, data){
82
+ self.io.push(type, data);
83
+ };
84
+ };
85
+
86
+ var CometIO = function(url, opts){
87
+ new EventEmitter().apply(this);
88
+ if(typeof opts === "undefined" || opts === null) opts = {};
89
+ this.url = url || "";
90
+ this.session = opts.session || null;
91
+ var running = false;
92
+ var self = this;
93
+ var post_queue = [];
94
+
95
+ var flush = function(){
96
+ if(!running || post_queue.length < 1) return;
97
+ var post_data = {
98
+ json: JSON.stringify({
99
+ session: self.session,
100
+ events: post_queue
101
+ })
102
+ };
103
+ $.ajax(
104
+ {
105
+ url : self.url,
106
+ data : post_data,
107
+ success : function(data){
108
+ },
109
+ error : function(req, stat, e){
110
+ self.emit("error", "CometIO push error");
111
+ },
112
+ complete : function(e){
113
+ },
114
+ type : "POST",
115
+ dataType : "json",
116
+ timeout : 10000
117
+ }
118
+ );
119
+ post_queue = [];
120
+ };
121
+ setInterval(flush, 1000);
122
+
123
+ this.push = function(type, data){
124
+ if(!running || !self.session){
125
+ self.emit("error", "CometIO not connected");
126
+ return;
127
+ }
128
+ post_queue.push({type: type, data: data})
129
+ };
130
+
131
+ this.connect = function(){
132
+ if(running) return self;
133
+ self.on("__session_id", function(session){
134
+ self.session = session;
135
+ self.emit("connect", self.session);
136
+ });
137
+ running = true;
138
+ get();
139
+ return self;
140
+ };
141
+
142
+ this.close = function(){
143
+ running = false;
144
+ self.removeListener("__session_id");
145
+ };
146
+
147
+ var get = function(){
148
+ if(!running) return;
149
+ $.ajax(
150
+ {
151
+ url : self.url,
152
+ data : {session : self.session},
153
+ success : function(data_arr){
154
+ if(data_arr !== null && typeof data_arr == "object" && !!data_arr.length){
155
+ for(var i = 0; i < data_arr.length; i++){
156
+ var data = data_arr[i];
157
+ if(data) self.emit(data.type, data.data);
158
+ }
159
+ }
160
+ get();
161
+ },
162
+ error : function(req, stat, e){
163
+ self.emit("error", "CometIO get error");
164
+ setTimeout(get, 10000);
165
+ },
166
+ complete : function(e){
167
+ },
168
+ type : "GET",
169
+ dataType : "json",
170
+ timeout : 130000
171
+ }
172
+ );
173
+ };
174
+ };
175
+
176
+ var WebSocketIO = function(url, opts){
177
+ new EventEmitter().apply(this);
178
+ if(typeof opts === "undefined" || opts === null) opts = {};
179
+ this.url = url || "";
180
+ this.session = opts.session || null;
181
+ this.websocket = null;
182
+ this.connecting = false;
183
+ var reconnect_timer_id = null;
184
+ var running = false;
185
+ var self = this;
186
+
187
+ self.on("__session_id", function(session_id){
188
+ self.session = session_id;
189
+ self.emit("connect", self.session);
190
+ });
191
+
192
+ this.connect = function(){
193
+ if(typeof WebSocket === "undefined"){
194
+ self.emit("error", "websocket not exists in this browser");
195
+ return null;
196
+ }
197
+ self.running = true;
198
+ var url = self.session ? self.url+"/session="+self.session : self.url;
199
+ self.websocket = new WebSocket(url);
200
+ self.websocket.onmessage = function(e){
201
+ try{
202
+ var data_ = JSON.parse(e.data);
203
+ self.emit(data_.type, data_.data);
204
+ }
205
+ catch(e){
206
+ self.emit("error", "WebSocketIO data parse error");
207
+ }
208
+ };
209
+ self.websocket.onclose = function(){
210
+ if(self.connecting){
211
+ self.connecting = false;
212
+ self.emit("disconnect");
213
+ }
214
+ if(self.running){
215
+ reconnect_timer_id = setTimeout(self.connect, 10000);
216
+ }
217
+ };
218
+ self.websocket.onopen = function(){
219
+ self.connecting = true;
220
+ };
221
+ return self;
222
+ };
223
+
224
+ this.close = function(){
225
+ clearTimeout(reconnect_timer_id);
226
+ self.running = false;
227
+ self.websocket.close();
228
+ };
229
+
230
+ this.push = function(type, data){
231
+ if(!self.connecting){
232
+ self.emit("error", "websocket not connected");
233
+ return;
234
+ }
235
+ self.websocket.send(JSON.stringify({type: type, data: data, session: self.session}));
236
+ };
237
+ };
238
+
239
+ // event_emitter.js v0.0.8
240
+ // https://github.com/shokai/event_emitter.js
241
+ // (c) 2013 Sho Hashimoto <hashimoto@shokai.org>
242
+ // The MIT License
243
+ var EventEmitter = function(){
244
+ var self = this;
245
+ this.apply = function(target, prefix){
246
+ if(!prefix) prefix = "";
247
+ for(var func in self){
248
+ if(self.hasOwnProperty(func) && func !== "apply"){
249
+ target[prefix+func] = this[func];
250
+ }
251
+ }
252
+ };
253
+ this.__events = new Array();
254
+ this.on = function(type, listener, opts){
255
+ if(typeof listener !== "function") return;
256
+ var event_id = self.__events.length > 0 ? 1 + self.__events[self.__events.length-1].id : 0
257
+ var params = {
258
+ id: event_id,
259
+ type: type,
260
+ listener: listener
261
+ };
262
+ for(i in opts){
263
+ if(!params[i]) params[i] = opts[i];
264
+ };
265
+ self.__events.push(params);
266
+ return event_id;
267
+ };
268
+
269
+ this.once = function(type, listener){
270
+ self.on(type, listener, {once: true});
271
+ };
272
+
273
+ this.emit = function(type, data){
274
+ for(var i = 0; i < self.__events.length; i++){
275
+ var e = self.__events[i];
276
+ switch(e.type){
277
+ case type:
278
+ e.listener(data);
279
+ if(e.once) e.type = null;
280
+ break
281
+ case "*":
282
+ e.listener(type, data);
283
+ if(e.once) e.type = null;
284
+ break
285
+ }
286
+ }
287
+ self.removeListener();
288
+ };
289
+
290
+ this.removeListener = function(id_or_type){
291
+ for(var i = self.__events.length-1; i >= 0; i--){
292
+ var e = self.__events[i];
293
+ switch(typeof id_or_type){
294
+ case "number":
295
+ if(e.id === id_or_type) self.__events.splice(i,1);
296
+ break
297
+ case "string":
298
+ case "object":
299
+ if(e.type === id_or_type) self.__events.splice(i,1);
300
+ break
301
+ }
302
+ }
303
+ };
304
+
305
+ };
306
+
307
+ if(typeof module !== "undefined" && typeof module.exports !== "undefined"){
308
+ module.exports = EventEmitter;
309
+ }
310
+
@@ -0,0 +1,5 @@
1
+ // RocketIO.js v0.2.5 (websocketio:v0.3.1, cometio:v0.5.7)
2
+ // https://github.com/shokai/sinatra-rocketio
3
+ // (c) 2012-2013 Sho Hashimoto <hashimoto@shokai.org>
4
+ // The MIT License
5
+ var RocketIO=function(opts){(new EventEmitter).apply(this);if(typeof opts==="undefined"||opts===null)opts={};this.type=opts.type||null;this.session=opts.session||null;this.channel=null;if(typeof opts.channel!=="undefined"&&opts.channel!==null){this.channel=""+opts.channel}var setting={};this.io=null;var self=this;var ws_close_timer=null;self.on("__connect",function(session_id){self.session=session_id;self.io.push("__channel_id",self.channel);self.emit("connect")});this.connect=function(url){if(typeof url==="string"){$.getJSON(url+"/rocketio/settings",function(res){setting=res;connect_io()});return self}else{return connect_io()}};var connect_io=function(){self.io=function(){if(self.type==="comet")return;if(typeof WebSocketIO!=="function")return;var io=new WebSocketIO;if(typeof setting.websocket==="string")io.url=setting.websocket;io.session=self.session;return io.connect()}()||function(){if(typeof CometIO!=="function")return;var io=new CometIO;if(typeof setting.comet==="string")io.url=setting.comet;io.session=self.session;return io.connect()}();if(typeof self.io==="undefined"){setTimeout(function(){self.emit("error","WebSocketIO and CometIO are not available")},100);return self}if(self.io.url.match(/^ws:\/\/.+/))self.type="websocket";else if(self.io.url.match(/cometio/))self.type="comet";else self.type="unknown";self.io.on("*",function(event_name,args){if(event_name==="connect")event_name="__connect";self.emit(event_name,args)});ws_close_timer=setTimeout(function(){self.close();self.type="comet";connect_io()},3e3);self.once("connect",function(){if(ws_close_timer)clearTimeout(ws_close_timer);ws_close_timer=null});return self};this.close=function(){self.io.close()};this.push=function(type,data){self.io.push(type,data)}};var CometIO=function(url,opts){(new EventEmitter).apply(this);if(typeof opts==="undefined"||opts===null)opts={};this.url=url||"";this.session=opts.session||null;var running=false;var self=this;var post_queue=[];var flush=function(){if(!running||post_queue.length<1)return;var post_data={json:JSON.stringify({session:self.session,events:post_queue})};$.ajax({url:self.url,data:post_data,success:function(data){},error:function(req,stat,e){self.emit("error","CometIO push error")},complete:function(e){},type:"POST",dataType:"json",timeout:1e4});post_queue=[]};setInterval(flush,1e3);this.push=function(type,data){if(!running||!self.session){self.emit("error","CometIO not connected");return}post_queue.push({type:type,data:data})};this.connect=function(){if(running)return self;self.on("__session_id",function(session){self.session=session;self.emit("connect",self.session)});running=true;get();return self};this.close=function(){running=false;self.removeListener("__session_id")};var get=function(){if(!running)return;$.ajax({url:self.url,data:{session:self.session},success:function(data_arr){if(data_arr!==null&&typeof data_arr=="object"&&!!data_arr.length){for(var i=0;i<data_arr.length;i++){var data=data_arr[i];if(data)self.emit(data.type,data.data)}}get()},error:function(req,stat,e){self.emit("error","CometIO get error");setTimeout(get,1e4)},complete:function(e){},type:"GET",dataType:"json",timeout:13e4})}};var WebSocketIO=function(url,opts){(new EventEmitter).apply(this);if(typeof opts==="undefined"||opts===null)opts={};this.url=url||"";this.session=opts.session||null;this.websocket=null;this.connecting=false;var reconnect_timer_id=null;var running=false;var self=this;self.on("__session_id",function(session_id){self.session=session_id;self.emit("connect",self.session)});this.connect=function(){if(typeof WebSocket==="undefined"){self.emit("error","websocket not exists in this browser");return null}self.running=true;var url=self.session?self.url+"/session="+self.session:self.url;self.websocket=new WebSocket(url);self.websocket.onmessage=function(e){try{var data_=JSON.parse(e.data);self.emit(data_.type,data_.data)}catch(e){self.emit("error","WebSocketIO data parse error")}};self.websocket.onclose=function(){if(self.connecting){self.connecting=false;self.emit("disconnect")}if(self.running){reconnect_timer_id=setTimeout(self.connect,1e4)}};self.websocket.onopen=function(){self.connecting=true};return self};this.close=function(){clearTimeout(reconnect_timer_id);self.running=false;self.websocket.close()};this.push=function(type,data){if(!self.connecting){self.emit("error","websocket not connected");return}self.websocket.send(JSON.stringify({type:type,data:data,session:self.session}))}};var EventEmitter=function(){var self=this;this.apply=function(target,prefix){if(!prefix)prefix="";for(var func in self){if(self.hasOwnProperty(func)&&func!=="apply"){target[prefix+func]=this[func]}}};this.__events=new Array;this.on=function(type,listener,opts){if(typeof listener!=="function")return;var event_id=self.__events.length>0?1+self.__events[self.__events.length-1].id:0;var params={id:event_id,type:type,listener:listener};for(i in opts){if(!params[i])params[i]=opts[i]}self.__events.push(params);return event_id};this.once=function(type,listener){self.on(type,listener,{once:true})};this.emit=function(type,data){for(var i=0;i<self.__events.length;i++){var e=self.__events[i];switch(e.type){case type:e.listener(data);if(e.once)e.type=null;break;case"*":e.listener(type,data);if(e.once)e.type=null;break}}self.removeListener()};this.removeListener=function(id_or_type){for(var i=self.__events.length-1;i>=0;i--){var e=self.__events[i];switch(typeof id_or_type){case"number":if(e.id===id_or_type)self.__events.splice(i,1);break;case"string":case"object":if(e.type===id_or_type)self.__events.splice(i,1);break}}}};if(typeof module!=="undefined"&&typeof module.exports!=="undefined"){module.exports=EventEmitter}
@@ -13,7 +13,7 @@ require 'sass'
13
13
  require File.dirname(__FILE__)+'/main'
14
14
 
15
15
  set :haml, :escape_html => true
16
- set :cometio, :timeout => 120, :post_interval => 2
16
+ set :cometio, :timeout => 120, :post_interval => 2, :allow_crossdomain => true
17
17
  set :websocketio, :port => (ENV['WS_PORT'] || 8080).to_i
18
18
  set :rocketio, :comet => true, :websocket => true
19
19
 
@@ -14,7 +14,7 @@ require 'sass'
14
14
  require File.dirname(__FILE__)+'/main'
15
15
 
16
16
  set :haml, :escape_html => true
17
- set :cometio, :timeout => 120, :post_interval => 2
17
+ set :cometio, :timeout => 120, :post_interval => 2, :allow_crossdomain => true
18
18
  set :websocketio, :port => (ENV['WS_PORT'] || 8080).to_i
19
19
  set :rocketio, :comet => true, :websocket => true
20
20
 
@@ -9,7 +9,7 @@ class App
9
9
  end
10
10
 
11
11
  def self.ws_port
12
- ENV['WS_PORT'] || 8080
12
+ ENV['WS_PORT'] || 9000
13
13
  end
14
14
 
15
15
  def self.url
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-rocketio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sho Hashimoto
@@ -215,6 +215,7 @@ extra_rdoc_files: []
215
215
  files:
216
216
  - .gitignore
217
217
  - Gemfile
218
+ - HEADER.erb
218
219
  - History.txt
219
220
  - LICENSE.txt
220
221
  - README.md
@@ -232,6 +233,8 @@ files:
232
233
  - lib/sinatra-rocketio/version.rb
233
234
  - lib/sinatra/rocketio.rb
234
235
  - lib/sinatra/rocketio/client.rb
236
+ - rocketio.js
237
+ - rocketio.min.js
235
238
  - sample/classic_style/README.md
236
239
  - sample/classic_style/bin/cui_chat_client.rb
237
240
  - sample/classic_style/config.ru