8 isUndef:function isUndef(a){return typeof a==="undefined"}
\r
14 * エラーコードテーブル。[エラーコード、メッセージ]*の配列。
\r
23 0xF0-0xFF:UserDefine
\r
25 bit 15-8: ERROR_ClassID
\r
30 OK:[0x00000000,"OK"],
\r
31 NG:[0x40000000,"NG"], //汎用NG
\r
36 return (0x40000000 & v)==0x00000000;
\r
41 MID_MiMic:0x00390000,
\r
42 CAID_RemoteMCU :0x0100, //
\r
43 CAID_LPCXPresso1769:0x0200 //リモートAPI
\r
49 例外送信は、ランタイムエラーには使わないこと。
\r
52 [1]:[e:MiMicException|o:object|c:MiMicError]
\r
53 e:例外を引きついで、メッセージを更新する。
\r
54 o:toString()+MiMicError.NG
\r
58 コールスタックを構成する為に、全てのpublic関数は名前をつけ、かつtry-catchツリーを作ること。
\r
61 function MiMicException(/*...*/)
\r
64 if(typeof arguments.callee.caller=="function"){
\r
65 if(arguments.callee.caller.name.toString().length>0){
\r
66 pfx="function '"+arguments.callee.caller.name+'.';
\r
68 var s=arguments.callee.caller.toString();
\r
69 pfx="closure '"+s.substring(0,s.indexOf("{"))+"...'";
\r
72 pfx="root document";
\r
75 switch(arguments.length){
\r
78 this.code=MiMicError.NG[0];
\r
79 this.message=pfx+" code(0x"+this.code.toString(16)+")"+MiMicError.NG[1];
\r
83 if(v instanceof MiMicException){
\r
86 sfx=" \nfrom "+v.message;
\r
87 }else if(typeof v=="object" && v.length==2){
\r
93 this.code=MiMicError.NG[0];
\r
94 sfx=MiMicError.NG[1]+(((typeof v)!='undefined')?v.toString():"v==undefined");
\r
96 this.message=pfx+" code(0x"+this.code.toString(16)+")"+sfx;
\r
100 if(v instanceof MiMicException){
\r
103 this.message=pfx+" code(0x"+this.code.toString(16)+")"+"\nfrom "+v.message+":"+arguments[1];
\r
105 }else if(typeof v!="string" && v.length==2){
\r
106 //Errorコードテーブル+メッセージ
\r
108 this.message=pfx+" code(0x"+this.code.toString(16)+")"+v[1]+":"+arguments[1];
\r
116 throw new MiMicException("Invalid MiMicException argument.");
\r
118 MiMicException.prototype={
\r
119 code:MiMicError.OK,
\r
122 alert(this.message);
\r
124 toString:function()
\r
126 return "MiMicException:"+this.message;
\r
140 var MiMicRemoteMcuInterface;
\r
146 var EE=function(i_base)
\r
149 NG:[i_base|0x00,"Unknown exception in MiMicRemoteMcuInterface"],
\r
150 TCP_CONNECT:[i_base|0x01,"TCP CONNECT FAILED"],//接続エラー
\r
151 HTTP :[i_base|0x02,"HTTP FAILED"]}//HTTPエラー
\r
152 }(MiMicError.NG[0]|MiMicError.MID_MiMic|MiMicError.CAID_RemoteMCU);
\r
154 MiMicRemoteMcuInterface=function MiMicRemoteMcuInterface(server)
\r
156 this._mimic_host=server;
\r
159 MiMicRemoteMcuInterface.prototype=
\r
164 * XmlHttpRequestを実行する。
\r
170 _xhrGet:function(i_url,i_async,i_callback)
\r
172 var xhr = window.XDomainRequest ? new XDomainRequest() : new XMLHttpRequest();
\r
176 xhr.onreadystatechange = function(){
\r
177 if (xhr.readyState == 4){
\r
182 xhr.open("GET",i_url,i_async);
\r
187 throw new MiMicException(
\r
190 case 1:return EE.HTTP;
\r
192 return EE.TCP_CONNECT;
\r
198 * MiMicの応答から、オンラインチェックを実行します。
\r
200 レスポンスを格納済みのXHRオブジェクト
\r
203 入力文章から状態が判定できなかった場合、false
\r
205 _isOnline_parseResponse: function(res)
\r
208 if(res.status!=200){
\r
211 var ret=eval("("+res.responseText+")");
\r
212 if(ret.application.split(";")[0]!="MiMicRemoteMCU/1.0a"){
\r
221 * MvmのレスポンスをJSONにする。
\r
227 _parseMvmResult:function(i_mvmresult)
\r
229 var ret=eval("("+i_mvmresult+")");
\r
230 if(ret.version=="MiMicVM/1.0a;Json/1.0"){
\r
231 if(ret.result!=undefined){
\r
232 if(ret.result!=0x0 || ret.stream!=undefined){
\r
238 throw new MiMicException(EE.NG);
\r
244 isConnected:function isConnected()
\r
246 return this._keep_alive!=null;
\r
252 Response JSONを返します。
\r
253 {version:JSONバージョン文字列,result:実行結果,stream:[]}
\r
254 Appendix 1. MiMicVM HTTP Interfaceを参照してください。
\r
256 Response Jsonが得られないとき.
\r
258 execBc:function execBc(i_bc)
\r
261 var res=this._xhrGet("http://"+this._mimic_host+"/mvm.api?v=1&bc="+i_bc,false);
\r
262 if(res.status!=200){
\r
263 throw new MiMicException(EE.HTTP,"i_bc="+i_bc+",XHR.status="+res.status);
\r
265 return this._parseMvmResult(res.responseText,false);
\r
267 throw new MiMicException(e);
\r
275 コールバック関数 f(boolean)を指定します。非同期チェックにより、状態が更新されるとtrueです。
\r
279 connect:function connect(i_callback)
\r
284 if(this._keep_alive!=null){
\r
287 var res=this._xhrGet("http://"+this._mimic_host+"/status.api",false,null);
\r
288 function startCheck()
\r
290 function checkProc(res)
\r
293 if(!_t._isOnline_parseResponse(res)){
\r
294 _t._keep_alive=null;
\r
302 tid:setTimeout(function(){_t._keep_alive.xhr=_t._xhrGet("http://"+_t._mimic_host+"/status.api",true,checkProc);},3000),
\r
308 throw new MiMicException(e);
\r
313 * RemoteMCUから切断します。
\r
314 既に切断済みなら何もしません。この関数は、非同期チェックをキャンセルします。
\r
316 disconnect:function disconnect()
\r
319 if(this._keep_alive!=null){
\r
320 clearTimeout(this._keep_alive.tid);
\r
321 if(this._keep_alive.xhr!=null){
\r
322 this._keep_alive.xhr.abort();
\r
324 this._keep_alive=null;
\r
327 throw new MiMicException(e);
\r