fbp-protocol-client
Version:
Client library for the FBP protocol
120 lines (100 loc) • 3.29 kB
text/coffeescript
Base = require './base'
platform = require '../helpers/platform'
class WebSocketRuntime extends Base
constructor: (definition) ->
= false
= null
= 'noflo'
= []
= null
super definition
getElement: ->
return if
# DOM visualization for remote runtime output
= document.createElement 'div'
.classList.add 'preview-container'
messageConsole = document.createElement 'pre'
previewImage = document.createElement 'img'
.appendChild previewImage
.appendChild messageConsole
'network', (message) ->
return unless message.command is 'output'
p = message.payload
if p.type? and p.type == 'previewurl'
hasQuery = p.url.indexOf '?' != -1
separator = if hasQuery then '&' else '?'
previewImage.src = p.url + separator + 'timestamp=' + new Date().getTime()
if p.message?
encoded = p.message.replace /[\u00A0-\u99999<>\&]/gim, (i) -> "&##{i.charCodeAt(0)};"
messageConsole.innerHTML += "#{encoded}\n"
messageConsole.scrollTop = messageConsole.scrollHeight
'disconnected', ->
messageConsole.innerHTML = ''
isConnected: -> isnt null
connect: ->
return if or
if
= new platform.WebSocket ,
else
= new platform.WebSocket
.addEventListener 'open', =>
= false
# Perform capability discovery
'getruntime', {}
'status',
online: true
label: 'connected'
'connected'
, false
.addEventListener 'message', , false
.addEventListener 'error', , false
.addEventListener 'close', () =>
= null
'status',
online: false
label: 'disconnected'
'disconnected'
, false
= true
disconnect: ->
return unless
= false
.close()
send: (protocol, command, payload) ->
if
.push
protocol: protocol
command: command
payload: payload
return
return unless
.send JSON.stringify
protocol: protocol
command: command
payload: payload
handleError: (error) =>
if is 'noflo'
delete
= false
= null
setTimeout =>
, 1
return
'error', error
= null
= false
handleMessage: (message) =>
msg = JSON.parse message.data
switch msg.protocol
when 'runtime' then msg.command, msg.payload
when 'graph' then msg.command, msg.payload
when 'network' then msg.command, msg.payload
when 'component' then msg.command, msg.payload
flush: ->
for item in
item.protocol, item.command, item.payload
= []
module.exports = WebSocketRuntime