2012年8月1日水曜日

apache shindig


gadgets.rpc の仕組みを調べてみる。

<コンテナ側>
まず、gadgets.rpc.init()で、ブラウザがpostMessageを使えると、
gadgets.rpctx.wpm.init(processFn,readyFn)を呼んでいる。

wpm.init()では、まず自分のwindowに対してpostMessageを送信して、
postMessageが非同期に行われるかを確認する。
非同期に実行されない場合、ラップして非同期で行うようにしている。


postMessage = function(win, msg, origin) {
  window.setTimeout(function() {
    win.postMessage(msg, origin);
  }, 0);
};



その後、windowのmessageイベントにwpm.onmessage()をバインドしている。


  • wpm.onmessage()は、なにやらセキュリティのチェックも行えるらしいが、
  • とりあえず、init()でセットしたrpc.process()を呼んでいる。


最後に、rpc.transportReady()を呼んでreturn;

  • ready('..', true);で、initで設定されたreadyFn※(rpc.transportReady()をコール.
  • receiverTx['..'] に gadgets.rpctx.wpm オブジェクトを設定している。
  • なにやら、 earlyRpcQueue[]にrpcを設定しておくと、このタイミングでcallしてくれる。

gadgets側だと、setupReceiver('..'); して終わっている。

setupReceiverについては、またあとで。