PS VitaでMiMicを使う方法について

PSVitaのブラウザからMiMicを使用する場合には、MiMicに追加スクリプトを加える必要があります。

MiMic_PSVita_patch.js

/**
 * This module does patch to loaded MiMic library for PSVita.
 * Load this module after MiMic library loaded.
 * MiMic will run on PSvita.
 * --
 * このモジュールは、ロード済のMiMicJSAPIに、PSVita向けのパッチを適応して、PSVitaからMiMicを使用できるようにします。
 * 以下のように、MiMicライブラリを読み込んだ後に、Javascriptを読み込んでください。
 * @example
 * <script src="LPCXpresso1769.All.js"></script>
 * <script src="MiMic_PSVita_patch.js"></script>
 */
(function(){
function MiMicJsAPI_psVitaPatch()
{
  MiMicRemoteMcuInterface.prototype._vita_tc=0;
  MiMicRemoteMcuInterface.prototype._vita_sc=0;
  //Xhrのコネクト前に、セッションIDの探索を実行する。
  var old_connect=MiMicRemoteMcuInterface.prototype.connect;
  MiMicRemoteMcuInterface.prototype.connect=function psVitaConnect(i_callback)
  {
    try{
      var _t=this;
      //接続中ならおわり
      if(this._keep_alive!=null){
        return;
      }
      var sc;
      //探索(session counterに適当なidを付けて、成功するまでつなぎ変える。)
        var xhr = window.XDomainRequest ? new XDomainRequest() : new XMLHttpRequest();
          for(var i=0;i<100;i++){
            var pr=0;
            try{
              sc=Math.floor( Math.random() * 0x4fffffff);
                xhr.open("GET","http://"+_t._mimic_host+"/status.api?sc="+sc,false);
                pr=1;
                xhr.send(null);
                pr=2;
            }catch(e){
              if(pr==1){
                //探索のやりなおし。
                continue;
              }
              throw new MiMicException(e);
            }
            //みつかった
            this._vita_sc=sc;
            old_connect.call(this,i_callback);
            return;
         }
         //ミツカンネ
         throw new MiMicException("s2");
    }catch(e){
      throw new MiMicException(e);
    }
  }
  //Xhrに、カウンタ機能を追加する。
  var oldmif=MiMicRemoteMcuInterface.prototype._xhrGet;
  MiMicRemoteMcuInterface.prototype._xhrGet=function psVitaConnect_xhrGet(i_url,i_async,i_callback)
  {
    var url=i_url;
    if(url.indexOf('?')==-1){
      url+='?';
    }else{
      url+='&';
    }
    //セッションidとメッセージidを追記する。
    var r=oldmif.call(this,url+"sc="+this._vita_sc+"&tc="+this._vita_tc,i_async,i_callback);
    this._vita_tc++;
    return r;
  }
}
MiMicJsAPI_psVitaPatch();
}());

Download-> MiMic_PSVita_patch-0.1.0

仕組み

PSVitaでは、(たぶん不具合で)連続して同じURLにクロスドメインXmlHttpRequestを発行できません。そこで、MiMicCore.jsが、ユニークなURLでXmlHttpRequestを実行するように修正します。

サンプル

スクリプトは、MiMicライブラリをロードした直後に、次のように呼び出してください。

<html lang="ja" xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="api.js/MiMicCore.js"></script>
<script src="api.js/LPCXpresso1769.All-mini.js"></script>
<script src="../../MiMic_PsVita_patch.js"></script>
</head>
:
:

既知の問題

PS Vitaでは、連続でMiMicAPIをコールすると、100~300回目くらいから、頻繁に通信遅延が発生します。理由は恐らくブラウザにありますが、今のところ回避方法がありません。

Comments are closed, but trackbacks and pingbacks are open.