123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- WebSocketMock = require('./websocket.mock.js').WebSocketMock
- Stomp = require('../../lib/stomp.js').Stomp
- console = require 'console'
- class StompServerMock extends WebSocketMock
- # WebSocketMock handlers
-
- handle_send: (msg) =>
- @stomp_dispatch(Stomp.Frame.unmarshall(msg)[0])
-
- handle_close: =>
- @_shutdown()
-
- handle_open: =>
- @stomp_init()
- @_accept()
-
- # Stomp server implementation
-
- stomp_init: ->
- @transactions = {}
- @subscriptions = {}
- @messages = []
-
- stomp_send: (command, headers, body=null) ->
- @_respond(Stomp.Frame.marshall(command, headers, body))
-
- stomp_send_receipt: (frame) ->
- if frame.headers.message?
- @stomp_send("ERROR", {'receipt-id': frame.headers['receipt-id'], 'message': frame.headers.message})
- else
- @stomp_send("RECEIPT", {'receipt-id': frame.headers['receipt-id']})
-
- stomp_send_message: (destination, subscription, message_id, body) ->
- @stomp_send("MESSAGE", {
- 'destination': destination,
- 'message-id': message_id,
- 'subscription': subscription}, body)
- stomp_dispatch: (frame) ->
- handler = "stomp_handle_#{frame.command.toLowerCase()}"
- if this[handler]?
- this[handler](frame)
- if frame.receipt
- @stomp_send_receipt(frame)
- else
- console.log "StompServerMock: Unknown command: #{frame.command}"
- stomp_handle_connect: (frame) ->
- @session_id = Math.random()
- @stomp_send("CONNECTED", {'session': @session_id})
-
- stomp_handle_begin: (frame) ->
- @transactions[frame.headers.transaction] = []
-
- stomp_handle_commit: (frame) ->
- transaction = @transactions[frame.headers.transaction]
- for frame in transaction
- @messages.push(frame.body)
- delete @transactions[frame.headers.transaction]
- stomp_handle_abort: (frame) ->
- delete @transactions[frame.headers.transaction]
- stomp_handle_send: (frame) ->
- if frame.headers.transaction
- @transactions[frame.headers.transaction].push(frame)
- else
- @messages.push(frame)
- stomp_handle_subscribe: (frame) ->
- sub_id = frame.headers.id or Math.random()
- cb = (id, body) => @stomp_send_message(frame.headers.destination, sub_id, id, body)
- @subscriptions[sub_id] = [frame.headers.destination, cb]
- stomp_handle_unsubscribe: (frame) ->
- if frame.headers.id in Object.keys(@subscriptions)
- delete @subscriptions[frame.headers.id]
- else
- frame.headers.message = "Subscription does not exist"
-
- stomp_handle_disconnect: (frame) ->
- @_shutdown()
-
- # Test helpers
-
- test_send: (sub_id, message) ->
- msgid = 'msg-' + Math.random()
- @subscriptions[sub_id][1](msgid, message)
-
- exports.StompServerMock = StompServerMock
|