Files
atom/src/stdlib/task.coffee
2013-03-12 13:05:51 -07:00

58 lines
1.2 KiB
CoffeeScript

_ = require 'underscore'
EventEmitter = require 'event-emitter'
fs = require 'fs-utils'
module.exports =
class Task
aborted: false
constructor: (@path) ->
start: ->
throw new Error("Task already started") if @worker?
blob = new Blob(["require('coffee-script'); require('task-shell');"], type: 'text/javascript')
@worker = new Worker(URL.createObjectURL(blob))
@worker.onmessage = ({data}) =>
if @aborted
@done()
return
if data.method and this[data.method]
this[data.method](data.args...)
else
@onMessage(data)
@startWorker()
log: -> console.log(arguments...)
warn: -> console.warn(arguments...)
error: -> console.error(arguments...)
startWorker: ->
@callWorkerMethod 'start',
globals:
navigator:
userAgent: navigator.userAgent
handlerPath: @path
started: ->
onMessage: (message) ->
callWorkerMethod: (method, args...) ->
@postMessage({method, args})
postMessage: (data) ->
@worker.postMessage(data)
abort: ->
@aborted = true
done: ->
@abort()
@worker?.terminate()
@worker = null
@trigger 'task-completed'
_.extend Task.prototype, EventEmitter