Uuid = require('node-uuid')
Type = require('type-of-is')
Bloon = require('bloon')Uuid = require('node-uuid')
Type = require('type-of-is')
Bloon = require('bloon')A WebSocket message
class Message
name : null # name for this message
id : null # unique id for this message (shared by its reply)
token : null # jwt auth token
data : null # the data for this message
error : null # an error if needed @setModels : (models = {})->
bloon = Bloon(
models : models
)
@_inflate = bloon.inflate
@_deflate = bloon.deflateCreate a message
name : the name for this message
id : id for this message, otherwise will be generated
token : jwt token used to identify / authorize the user sending this message
data : the data / params for this message
error : used in replies if error occured during processing of message
constructor : (args)->
unless args.name
throw new Error("Message must have name")
@name = args.name
@id = args.id || Uuid.v1()
@token = args.token
@data = if ('data' of args)
@constructor._inflate(args.data)
else
{}
@error = null
if args.error
@error = args.error
unless Type(@error, Error)
@error = new Error(@error) @parse : (json)->
try
message_data = JSON.parse(json)
new @(message_data)
catch error
new @(
name: 'InvalidJson'
error: error
)Encode this message into json, deflating its data in the process
stringify : ()->
message = {
name : @name
id : @id
token : @token
}
if @error
message.error = @error.message
if @data
message.data = @data
message = @constructor._deflate(message)
JSON.stringify(message) reply : (args)->
args.name = @replyName()
args.id = @id
new @constructor(args)The name of the reply to this message
replyName : ()->
"#{@name}Reply"Returns true if this message has an error
isError : ()->
!!@error is : (name)->
(@name is name)Convenience method for checking whether this message’s is one of several possibilities
names : message names to check against
in : (names)->
(@name in names)
Message.setModels()
module.exports = Message