From 9157bd150dff45fd2bfccf2d40c29f9d3385484a Mon Sep 17 00:00:00 2001 From: Michael Schmatz Date: Wed, 22 Jan 2014 21:41:29 -0800 Subject: [PATCH] Starting to receive messages from SQS! --- server.coffee | 2 ++ server/queue.coffee | 62 ++++++++++++++++++++++++++++++--------------- server_config.js | 1 + 3 files changed, 45 insertions(+), 20 deletions(-) diff --git a/server.coffee b/server.coffee index 74887af81..de38d0aef 100644 --- a/server.coffee +++ b/server.coffee @@ -18,6 +18,7 @@ logging = require './server/logging' sprites = require './server/sprites' contact = require './server/contact' languages = require './server/languages' +queue = require './server/queue' https = require 'https' http = require 'http' @@ -82,6 +83,7 @@ contact.setupRoutes(app) file.setupRoutes(app) folder.setupRoutes(app) languages.setupRoutes(app) +queue.setupRoutes(app) # Some sort of cross-domain communication hack facebook requires app.get('/channel.html', (req, res) -> diff --git a/server/queue.coffee b/server/queue.coffee index 2079fb053..0e13f926f 100644 --- a/server/queue.coffee +++ b/server/queue.coffee @@ -7,16 +7,11 @@ aws = require 'aws-sdk' queueInstance = null -module.exports.connect = -> +module.exports.setupRoutes = (app) -> queueInstance = generateQueueInstance() - queueInstance.connect() -module.exports.connectToRemoteQueue = -> - return -module.exports.connectToLocalQueue = -> - return generateQueueInstance = -> @@ -25,34 +20,61 @@ generateQueueInstance = -> else return new LocalQueue() -class Queue - constructor: -> - @configure() + +class AbstractQueue configure: -> - return + throw new Error "Subclasses must override the configure method" connect: -> - throw new Error("Subclasses must override this method") + throw new Error "Subclasses must override the connect method" + + createSimulationQueue: -> + throw new Error "Subclasses must override the createSimulationQueue method" -class RemoteQueue extends Queue + + +class RemoteQueue extends AbstractQueue constructor: -> - super() + @configure() @sqs = @generateSQSInstance() - @testConnection() - + @createSimulationQueueAndSetUrl() + setTimeout @receiveMessage.bind(this), 5000 configure: -> - super() + aws.config.update @generateAWSConfigurationObject() + + + createSimulationQueueAndSetUrl: -> + @sqs.createQueue {QueueName: config.queue.simulationQueueName}, (err, data) => + if err? + winston.error "Failed to create simulation queue!" + throw new Error "Failed to create simulation queue." + else + winston.info "Created simulation queue, URL is #{data.QueueUrl}" + @simulationQueueUrl = data.QueueUrl + + + receiveMessage: -> + params = {QueueUrl: @simulationQueueUrl, WaitTimeSeconds: 20} + console.log params + @sqs.receiveMessage params, (err, data) -> + if err? + winston.error "Error receiving message, reason: #{JSON.stringify err}" + else + winston.info "Received message, content: #{JSON.stringify data}" + + + generateAWSConfigurationObject: -> awsConfigurationObject = accessKeyId: config.queue.accessKeyId secretAccessKey: config.queue.secretAccessKey region: config.queue.region - aws.config.update remoteConfigurationObject + generateSQSInstance: -> - return new aws.SQS() + new aws.SQS() testConnection: -> @sqs.listQueues {}, (err, data) -> @@ -64,9 +86,9 @@ class RemoteQueue extends Queue -class LocalQueue extends Queue +class LocalQueue extends AbstractQueue constructor: ()-> - super() + return configure: () -> super() diff --git a/server_config.js b/server_config.js index 611dfe669..72848e2cc 100644 --- a/server_config.js +++ b/server_config.js @@ -33,6 +33,7 @@ config.queue = {}; config.queue.accessKeyId = process.env.COCO_AWS_ACCESS_KEY_ID || ''; config.queue.secretAccessKey = process.env.COCO_AWS_SECRET_ACCESS_KEY || ''; config.queue.region = 'us-east-1'; +config.queue.simulationQueueName = "simulationQueue"; config.salt = process.env.COCO_SALT || 'pepper'; config.cookie_secret = process.env.COCO_COOKIE_SECRET || 'chips ahoy';