Example #1
0
	setupListener() {
		const queue = new taskcluster.Queue(),
					queueEvents = new taskcluster.QueueEvents(),
					{ params } = this.props;
		this.listener = new taskcluster.WebListener();
		this.listener.bind(queueEvents.taskPending({
		  taskGroupId: params.taskGroupId
		}));

		this.listener.bind(queueEvents.taskCompleted({
		  taskGroupId: params.taskGroupId
		}));

		this.listener.on("message", (message) => {
			console.log('MESSAGE: ', message.payload.status);
			this.props.fetchTasks(params.taskGroupId);
			//  message.payload.status is the only property that is consistent across all exchanges
		  //  message.payload.task never changes because its the task definition
		  //  updateReduxStore();
		});

		this.listener.on("error", function(err) {
			console.log('ERROR: ', err);
			//  Perhaps display an error banner on top of the dashboard. This happens when a user puts him laptop to sleep
		  //  A smart way is to restart listening from scratch.
		  //  If you reconnect, make sure there is a limit. if more than 5 times in the 5 min interval, then stop reconnecting.
		});

		this.listener.resume();
	}
function main(parser, args) {
  var listener = new taskcluster.WebListener();
  var queueEvents = new taskcluster.QueueEvents();
  var taskId = slugid.v4();

  listener.bind(queueEvents.taskCompleted({
    taskId: taskId
  }));

  task.workerType = args.workerType;

  listener.resume().then(function() {
    return queue.createTask(taskId, task);
  }).catch(function(err) {
    console.error('Error creating task:');
    console.error(err.stack);
  });

  listener.on('message', function() {
    process.stdout.write(taskId);
    process.exit();
  });
}