Advertisement
volca780

ZeroFrame.coffee

May 1st, 2017
15,122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class ZeroFrame
  2.     constructor: (url) ->
  3.         @url = url
  4.         @waiting_cb = {}
  5.         @wrapper_nonce = document.location.href.replace(/.*wrapper_nonce=([A-Za-z0-9]+).*/, "$1")
  6.         @connect()
  7.         @next_message_id = 1
  8.         @init()
  9.  
  10.  
  11.     init: ->
  12.         @
  13.  
  14.  
  15.     connect: ->
  16.         @target = window.parent
  17.         window.addEventListener("message", @onMessage, false)
  18.         @cmd("innerReady")
  19.  
  20.  
  21.     onMessage: (e) =>
  22.         message = e.data
  23.         cmd = message.cmd
  24.         if cmd == "response"
  25.             if @waiting_cb[message.to]?
  26.                 @waiting_cb[message.to](message.result)
  27.             else
  28.                 @log "Websocket callback not found:", message
  29.         else if cmd == "wrapperReady" # Wrapper inited later
  30.             @cmd("innerReady")
  31.         else if cmd == "ping"
  32.             @response message.id, "pong"
  33.         else if cmd == "wrapperOpenedWebsocket"
  34.             @onOpenWebsocket()
  35.         else if cmd == "wrapperClosedWebsocket"
  36.             @onCloseWebsocket()
  37.         else
  38.             @route cmd, message
  39.  
  40.  
  41.     route: (cmd, message) =>
  42.         @log "Unknown command", message
  43.  
  44.  
  45.     response: (to, result) ->
  46.         @send {"cmd": "response", "to": to, "result": result}
  47.  
  48.  
  49.     cmd: (cmd, params={}, cb=null) ->
  50.         @send {"cmd": cmd, "params": params}, cb
  51.  
  52.  
  53.     send: (message, cb=null) ->
  54.         message.wrapper_nonce = @wrapper_nonce
  55.         message.id = @next_message_id
  56.         @next_message_id += 1
  57.         @target.postMessage(message, "*")
  58.         if cb
  59.             @waiting_cb[message.id] = cb
  60.  
  61.  
  62.     log: (args...) ->
  63.         console.log "[ZeroFrame]", args...
  64.  
  65.  
  66.     onOpenWebsocket: =>
  67.         @log "Websocket open"
  68.  
  69.  
  70.     onCloseWebsocket: =>
  71.         @log "Websocket close"
  72.  
  73.  
  74.  
  75. window.ZeroFrame = ZeroFrame
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement