Skip to content

Instantly share code, notes, and snippets.

@svasva
Created August 23, 2013 12:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save svasva/6318626 to your computer and use it in GitHub Desktop.
Save svasva/6318626 to your computer and use it in GitHub Desktop.
@Queue = new Meteor.Collection 'queue'
Meteor.startup ->
Meteor._processQueue = ->
if Meteor._queueProcessing ||= false
Meteor.setTimeout Meteor._processQueue, 100
return
Meteor._queueProcessing = true
qsize = Meteor._queue.length
qdone = 0
try
for item in Meteor._queue[..qsize]
console.log 'processing', item.type, item.objId
switch item.type
when 'trade'
trade = Trades.findOne(item.objId)
if trade.askOrder().complete || trade.bidOrder().complete
Trades.remove(trade._id)
else if trade.askOrder().cancelled || trade.bidOrder().cancelled
Trades.remove(trade._id)
else
trade.process()
when 'cancelOrder'
order = Orders.findOne(item.objId)
order.cancel() if order
Queue.remove item._id
qdone++
catch err
console.log 'error processing', item.type, item.objId, err
Meteor._queue = Meteor._queue[qdone..]
Meteor._queueProcessing = false
# got to refactor this for multi-tier arch at some point
Meteor._queue ||= []
Queue.find().observe
added: (item) ->
console.log 'queued', item.type, item.objId
Meteor._queue.push item
Meteor.setTimeout -> Meteor._processQueue()
removed: (item) -> console.log 'finished', item.type, item.objId
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment