# * Copyright (C) 2013 [Jeff Mesnil](http://jmesnil.net/)
|
#
|
# The library can be used in node.js app to connect to STOMP brokers over TCP
|
# or Web sockets.
|
|
###
|
Stomp Over WebSocket http://www.jmesnil.net/stomp-websocket/doc/ | Apache License V2.0
|
|
Copyright (C) 2013 [Jeff Mesnil](http://jmesnil.net/)
|
###
|
|
Stomp = require('./stomp')
|
net = require('net')
|
|
# in node.js apps, `setInterval` and `clearInterval` methods used to handle
|
# hear-beats are implemented using node.js Timers
|
Stomp.Stomp.setInterval = (interval, f) ->
|
setInterval f, interval
|
Stomp.Stomp.clearInterval = (id) ->
|
clearInterval id
|
|
# wrap a TCP socket (provided by node.js's net module) in a "Web Socket"-like
|
# object
|
wrapTCP = (port, host) ->
|
|
# the raw TCP socket
|
socket = null
|
|
# the "Web Socket"-like object expected by stomp.js
|
ws = {
|
url: 'tcp:// ' + host + ':' + port
|
send: (d) -> socket.write(d)
|
close: -> socket.end()
|
}
|
|
socket = net.connect port, host, (e) -> ws.onopen()
|
socket.on 'error', (e) -> ws.onclose?(e)
|
socket.on 'close', (e) -> ws.onclose?(e)
|
socket.on 'data', (data) ->
|
event = {
|
'data': data.toString()
|
}
|
ws.onmessage(event)
|
|
return ws
|
|
# wrap a Web Socket connection (provided by the websocket npm module) in a "Web
|
# Socket"-like object
|
wrapWS = (url) ->
|
|
WebSocketClient = require('websocket').client
|
|
# the underlying connection that will be wrapped
|
connection = null
|
|
# the "Web Socket"-like object expected by stomp.js
|
ws = {
|
url: url
|
send: (d) -> connection.sendUTF(d)
|
close: ->connection.close()
|
}
|
|
socket = new WebSocketClient()
|
socket.on 'connect', (conn) ->
|
connection = conn
|
ws.onopen()
|
connection.on 'error', (error) -> ws.onclose?(error)
|
connection.on 'close', -> ws.onclose?()
|
connection.on 'message', (message) ->
|
if message.type == 'utf8'
|
event = {
|
'data': message.utf8Data
|
}
|
ws.onmessage(event)
|
|
socket.connect url
|
return ws
|
|
# This method can be used by node.js app to connect to a STOMP broker over a
|
# TCP socket
|
overTCP = (host, port) ->
|
socket = wrapTCP port, host
|
Stomp.Stomp.over socket
|
|
# This method can be used by node.js app to connect to a STOMP broker over a
|
# Web socket
|
overWS = (url) ->
|
socket = wrapWS url
|
Stomp.Stomp.over socket
|
|
exports.overTCP = overTCP
|
exports.overWS = overWS
|