Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updating fork with latest from master #1

Merged
merged 41 commits into from
Feb 20, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
f7b8f2e
added config.daemonize
Sep 11, 2013
39aa945
precompile coffee script before running jasmine tests
Sep 30, 2013
46fee2e
Fix Rails 4 routes support, http polling POST route was disabled
elthariel Oct 27, 2013
5828846
client_id is not an integer
elthariel Oct 27, 2013
e0a1b2b
Adds http to coffescript http_connection adapter
elthariel Oct 27, 2013
58827c1
Merge pull request #147 from markmalek/master
DanKnox Oct 27, 2013
3d309e9
Fix connection_manager_spec. connection_id is a string
elthariel Oct 27, 2013
47ce5eb
Merge pull request #148 from elthariel/android4_bug
DanKnox Oct 27, 2013
a756274
Adds a dependency on Redis-Objects. Fix Channel manager's channel tok…
elthariel Oct 27, 2013
6dd770a
Channel, force the use of the #token accesor
elthariel Oct 27, 2013
3a355c6
Event: serialize event token to json, don't serialize empty fields
elthariel Oct 27, 2013
8d1c009
Don't delete nil fields
elthariel Oct 28, 2013
2add67c
Channel#token : use UUID instead of base64
elthariel Oct 28, 2013
5fa7744
Adds specs for this PR. That's gangsta !
elthariel Oct 28, 2013
ea6ba47
Removes test 'puts'
elthariel Oct 28, 2013
d53942f
Merge branch 'master' of https://github.com/DanKnox/websocket-rails
Nov 4, 2013
1c1eaec
Merge pull request #149 from elthariel/fix_channels_token_synchroniza…
DanKnox Nov 4, 2013
234ce6c
Merge branch 'master' of https://github.com/DanKnox/websocket-rails
Nov 6, 2013
66cfb00
Merge pull request #160 from moaa/foreman_integration
DanKnox Nov 21, 2013
388368e
Convert controller's `action_name` to a string to get AbstractControl…
pitr Nov 22, 2013
1f84ac0
Merge pull request #161 from websocket-rails/fix-before_actions
DanKnox Nov 22, 2013
67c173b
Merge branch 'master' of https://github.com/websocket-rails/websocket…
Nov 24, 2013
4053802
specify order the javascripts load
Nov 24, 2013
d932f81
Merge pull request #162 from moaa/master
DanKnox Nov 24, 2013
c6cdbbd
Bugfix in unworking spec
jtomaszewski Nov 30, 2013
eca31fb
Refactor *.coffee files. Add reconnect() method.
jtomaszewski Dec 1, 2013
9eaff94
Fix jasmine specs
jtomaszewski Dec 2, 2013
7269c88
Merge pull request #165 from jtomaszewski/master
DanKnox Dec 2, 2013
44320dc
Rescue symbolizing of channel names. fixes websocket-rails/websocket-…
KazW Dec 5, 2013
224197b
Merge pull request #169 from PrintToPeer/master
DanKnox Dec 5, 2013
4112011
log travis builds to irc
pitr Dec 6, 2013
35b2ce1
only notify irc on failures, travis is too chatty
pitr Dec 6, 2013
9f48654
Added a possibility to set channel success and failure callbacks on s…
lkol Dec 12, 2013
2177168
Merge pull request #171 from lkol/master
DanKnox Dec 13, 2013
f865d8d
Support HTTP streaming for Internet Explorer versions 8+ by using XDo…
lkol Dec 15, 2013
2e24332
As @KazW pointed out, we should use more secure way of setting Access…
lkol Dec 16, 2013
f13f38d
Improved readability a bit, as suggested by @KazW
lkol Dec 16, 2013
e03813d
Small bugfixes in .js code
jtomaszewski Dec 4, 2013
2142728
Fix bug in #reconnect() when disconnected.
jtomaszewski Dec 20, 2013
8fc51e3
Merge pull request #167 from jtomaszewski/master
DanKnox Jan 2, 2014
060af46
Merge pull request #172 from lkol/master
DanKnox Jan 2, 2014
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ test/dummy/log/*.log
test/dummy/tmp/
.rbx/
spec/javascripts/generated/
tmp/rspec_guard_result
5 changes: 5 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,8 @@ before_script:
- "sh -e /etc/init.d/xvfb start"
services:
- redis-server
notifications:
irc:
channels:
- "chat.freenode.net#websocket-rails"
on_success: change
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# WebsocketRails Change Log

## UNRELEASED

* Convert controller's `action_name` to a string to get AbstractController::Callbacks (`before_action`) working properly [fixes #150]

## Version 0.6.2

September 8 2013
Expand Down
13 changes: 8 additions & 5 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ PATH
rack
rails
redis
redis-objects
thin

GEM
Expand Down Expand Up @@ -41,7 +42,7 @@ GEM
multi_json (~> 1.3)
thread_safe (~> 0.1)
tzinfo (~> 0.3.37)
arel (4.0.0)
arel (4.0.1)
atomic (1.1.10)
atomic (1.1.10-java)
builder (3.1.4)
Expand Down Expand Up @@ -100,7 +101,7 @@ GEM
mime-types (~> 1.16)
treetop (~> 1.4.8)
method_source (0.8.1)
mime-types (1.23)
mime-types (1.25)
minitest (4.7.5)
multi_json (1.7.7)
polyglot (0.3.3)
Expand Down Expand Up @@ -135,7 +136,9 @@ GEM
ffi (>= 0.5.0)
rb-kqueue (0.2.0)
ffi (>= 0.5.0)
redis (3.0.4)
redis (3.0.5)
redis-objects (0.7.0)
redis (>= 3.0.2)
ref (1.0.5)
rspec (2.13.0)
rspec-core (~> 2.13.0)
Expand Down Expand Up @@ -172,7 +175,7 @@ GEM
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sprockets-rails (2.0.0)
sprockets-rails (2.0.1)
actionpack (>= 3.0)
activesupport (>= 3.0)
sprockets (~> 2.8)
Expand All @@ -191,7 +194,7 @@ GEM
thread_safe (0.1.0)
atomic
tilt (1.4.1)
treetop (1.4.14)
treetop (1.4.15)
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.37)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
###
Abstract Interface for the WebSocketRails client.
###
class WebSocketRails.AbstractConnection

constructor: (url, @dispatcher) ->
@message_queue = []

close: ->

trigger: (event) ->
if @dispatcher.state != 'connected'
@message_queue.push event
else
@send_event event

send_event: (event) ->
# Events queued before connecting do not have the correct
# connection_id set yet. We need to update it before dispatching.
event.connection_id = @connection_id if @connection_id?

# ...

on_close: (event) ->
if @dispatcher && @dispatcher._conn == @
close_event = new WebSocketRails.Event(['connection_closed', event])
@dispatcher.state = 'disconnected'
@dispatcher.dispatch close_event

on_error: (event) ->
if @dispatcher && @dispatcher._conn == @
error_event = new WebSocketRails.Event(['connection_error', event])
@dispatcher.state = 'disconnected'
@dispatcher.dispatch error_event

on_message: (event_data) ->
if @dispatcher && @dispatcher._conn == @
@dispatcher.new_message event_data

setConnectionId: (@connection_id) ->

flush_queue: ->
for event in @message_queue
@trigger event
@message_queue = []
38 changes: 22 additions & 16 deletions lib/assets/javascripts/websocket_rails/channel.js.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -9,41 +9,42 @@ For instance:
###
class WebSocketRails.Channel

constructor: (@name,@_dispatcher,@is_private) ->
constructor: (@name, @_dispatcher, @is_private = false, @on_success, @on_failure) ->
@_callbacks = {}
@_token = undefined
@_queue = []
if @is_private
event_name = 'websocket_rails.subscribe_private'
else
event_name = 'websocket_rails.subscribe'

event = new WebSocketRails.Event( [event_name, {data: {channel: @name}},@_dispatcher.connection_id], @_success_launcher, @_failure_launcher)
@connection_id = @_dispatcher._conn?.connection_id
event = new WebSocketRails.Event( [event_name, {data: {channel: @name}}, @connection_id], @_success_launcher, @_failure_launcher)
@_dispatcher.trigger_event event
@_callbacks = {}
@_token = undefined
@_queue = []

destroy: () =>
event_name = 'websocket_rails.unsubscribe'
event = new WebSocketRails.Event( [event_name, {data: {channel: @name}}, @_dispatcher.connection_id] )
@_dispatcher.trigger_event event
destroy: ->
if @connection_id == @_dispatcher._conn?.connection_id
event_name = 'websocket_rails.unsubscribe'
event = new WebSocketRails.Event( [event_name, {data: {channel: @name}}, @connection_id] )
@_dispatcher.trigger_event event
@_callbacks = {}

bind: (event_name, callback) =>
bind: (event_name, callback) ->
@_callbacks[event_name] ?= []
@_callbacks[event_name].push callback

trigger: (event_name, message) =>
event = new WebSocketRails.Event( [event_name, {channel: @name, data: message, token: @_token}, @_dispatcher.connection_id] )
trigger: (event_name, message) ->
event = new WebSocketRails.Event( [event_name, {channel: @name, data: message, token: @_token}, @connection_id] )
if !@_token
@_queue.push event
else
@_dispatcher.trigger_event event

dispatch: (event_name, message) =>
dispatch: (event_name, message) ->
if event_name == 'websocket_rails.channel_token'
@connection_id = @_dispatcher._conn?.connection_id
@_token = message['token']
for event in @_queue
@_dispatcher.trigger_event event
@_queue = []
@flush_queue()
else
return unless @_callbacks[event_name]?
for callback in @_callbacks[event_name]
Expand All @@ -56,3 +57,8 @@ class WebSocketRails.Channel
# using this method because @on_failure will not be defined when the constructor is executed
_failure_launcher: (data) =>
@on_failure(data) if @on_failure?

flush_queue: ->
for event in @_queue
@_dispatcher.trigger_event event
@_queue = []
22 changes: 11 additions & 11 deletions lib/assets/javascripts/websocket_rails/event.js.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ The Event object stores all the relevant event information.

class WebSocketRails.Event

constructor: (data,@success_callback,@failure_callback) ->
constructor: (data, @success_callback, @failure_callback) ->
@name = data[0]
attr = data[1]
if attr?
Expand All @@ -17,26 +17,26 @@ class WebSocketRails.Event
@result = true
@success = attr.success

is_channel: =>
is_channel: ->
@channel?

is_result: =>
@result == true
is_result: ->
typeof @result != 'undefined'

is_ping: =>
is_ping: ->
@name == 'websocket_rails.ping'

serialize: =>
serialize: ->
JSON.stringify [@name, @attributes()]

attributes: =>
attributes: ->
id: @id,
channel: @channel,
data: @data
token: @token

run_callbacks: (success,data) =>
if success == true
@success_callback?(data)
run_callbacks: (@success, @result) ->
if @success == true
@success_callback?(@result)
else
@failure_callback?(data)
@failure_callback?(@result)
89 changes: 44 additions & 45 deletions lib/assets/javascripts/websocket_rails/http_connection.js.coffee
Original file line number Diff line number Diff line change
@@ -1,67 +1,66 @@
###
HTTP Interface for the WebSocketRails client.
###
class WebSocketRails.HttpConnection
httpFactories: -> [
class WebSocketRails.HttpConnection extends WebSocketRails.AbstractConnection
connection_type: 'http'

_httpFactories: -> [
-> new XDomainRequest(),
-> new XMLHttpRequest(),
-> new ActiveXObject("Msxml2.XMLHTTP"),
-> new ActiveXObject("Msxml3.XMLHTTP"),
-> new ActiveXObject("Microsoft.XMLHTTP")
]

createXMLHttpObject: =>
xmlhttp = false
factories = @httpFactories()
for factory in factories
try
xmlhttp = factory()
catch e
continue
break
xmlhttp

constructor: (@url, @dispatcher) ->
@_url = @url
@_conn = @createXMLHttpObject()
constructor: (url, @dispatcher) ->
super
@_url = "http://#{url}"
@_conn = @_createXMLHttpObject()
@last_pos = 0
@message_queue = []
@_conn.onreadystatechange = @parse_stream
@_conn.addEventListener("load", @connectionClosed, false)
try
@_conn.onreadystatechange = => @_parse_stream()
@_conn.addEventListener("load", @on_close, false)
catch e
@_conn.onprogress = => @_parse_stream()
@_conn.onload = @on_close
# set this as 3 always for parse_stream as the object does not have this property at all
@_conn.readyState = 3
@_conn.open "GET", @_url, true
@_conn.send()

parse_stream: =>
if @_conn.readyState == 3
data = @_conn.responseText.substring @last_pos
@last_pos = @_conn.responseText.length
data = data.replace( /\]\]\[\[/g, "],[" )
decoded_data = JSON.parse data
@dispatcher.new_message decoded_data
close: ->
@_conn.abort()

trigger: (event) =>
if @dispatcher.state != 'connected'
@message_queue.push event
else
@post_data @dispatcher.connection_id, event.serialize()
send_event: (event) ->
super
@_post_data event.serialize()

post_data: (connection_id, payload) ->
_post_data: (payload) ->
$.ajax @_url,
type: 'POST'
data:
client_id: connection_id
client_id: @connection_id
data: payload
success: ->

flush_queue: (connection_id) =>
for event in @message_queue
# Events queued before connecting do not have the correct
# connection_id set yet. We need to update it before dispatching.
if connection_id?
event.connection_id = @dispatcher.connection_id
@trigger event
@message_queue = []
_createXMLHttpObject: ->
xmlhttp = false
factories = @_httpFactories()
for factory in factories
try
xmlhttp = factory()
catch e
continue
break
xmlhttp

connectionClosed: (event) =>
close_event = new WebSocketRails.Event(['connection_closed', event])
@dispatcher.state = 'disconnected'
@dispatcher.dispatch close_event
_parse_stream: ->
if @_conn.readyState == 3
data = @_conn.responseText.substring @last_pos
@last_pos = @_conn.responseText.length
data = data.replace( /\]\]\[\[/g, "],[" )
try
event_data = JSON.parse data
@on_message(event_data)
catch e
# just ignore if it cannot be parsed, probably whitespace
1 change: 1 addition & 0 deletions lib/assets/javascripts/websocket_rails/main.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
//= require ./websocket_rails
//= require ./event
//= require ./abstract_connection
//= require ./http_connection
//= require ./websocket_connection
//= require ./channel
Loading