msgflo
Version:
Polyglot FBP runtime based on message queues
126 lines (99 loc) • 3.28 kB
text/coffeescript
debug = require('debug')('msgflo:direct')
EventEmitter = require('events').EventEmitter
interfaces = require './interfaces'
routing = require './routing'
brokers = {}
class Client extends interfaces.MessagingClient
constructor: (, ) ->
# console.log 'client',
= null
## Broker connection management
connect: (callback) ->
debug 'client connect'
= brokers[]
return callback null
disconnect: (callback) ->
debug 'client disconnect'
= null
return callback null
_assertBroker: (callback) ->
err = new Error "no broker connected #{@address}" if not
return callback err if err
## Manipulating queues
createQueue: (type, queueName, callback) ->
# console.log 'client create queue', queueName
callback
.createQueue type, queueName, callback
removeQueue: (type, queueName, callback) ->
callback
.removeQueue type, queueName, callback
## Sending/Receiving messages
sendToQueue: (queueName, message, callback) ->
callback
.sendToQueue queueName, message, callback
subscribeToQueue: (queueName, handler, callback) ->
callback
.subscribeToQueue queueName, handler, callback
## ACK/NACK messages
ackMessage: (message) ->
return
nackMessage: (message) ->
return
# Participant discovery
registerParticipant: (part, callback) ->
'', 'fbp', (err) =>
msg =
protocol: 'discovery'
command: 'participant'
payload: part
'fbp', msg, callback
class Queue extends EventEmitter
constructor: () ->
send: (msg) ->
msg
_emitSend: (msg) ->
'message', msg
class MessageBroker extends interfaces.MessageBroker
constructor: () ->
routing.binderMixin this
= {}
# console.log 'broker',
## Broker connection management
connect: (callback) ->
debug 'broker connect'
brokers[] = this
return callback null
disconnect: (callback) ->
debug 'broker disconnect'
delete brokers[]
return callback null
## Manipulating queues
createQueue: (type, queueName, callback) ->
[queueName] = new Queue if not [queueName]?
return callback null
removeQueue: (type, queueName, callback) ->
delete [queueName]
return callback null
## Sending/Receiving messages
sendToQueue: (queueName, message, callback) ->
# console.log 'broker sendToQueue', queueName, Object.keys(), [queueName]
[queueName].send message
return callback null
subscribeToQueue: (queueName, handler, callback) ->
[queueName] = new Queue if not [queueName]?
[queueName].on 'message', (data) ->
out =
direct: null
data: data
return handler out
return callback null
## ACK/NACK messages
ackMessage: (message) ->
return
nackMessage: (message) ->
return
subscribeParticipantChange: (handler) ->
'', 'fbp', (err) =>
'fbp', handler, () ->
exports.MessageBroker = MessageBroker
exports.Client = Client