diff --git a/jsphi.byte b/jsphi.byte index 3220e00..05aa05c 100755 Binary files a/jsphi.byte and b/jsphi.byte differ diff --git a/jsphi.cmi b/jsphi.cmi index daa122c..b274d82 100644 Binary files a/jsphi.cmi and b/jsphi.cmi differ diff --git a/jsphi.cmo b/jsphi.cmo index 1140111..eeb7d2e 100644 Binary files a/jsphi.cmo and b/jsphi.cmo differ diff --git a/jsphi.command.js b/jsphi.command.js index 977b7f0..e5368f6 100644 --- a/jsphi.command.js +++ b/jsphi.command.js @@ -34,7 +34,6 @@ if (!com.napthats.jsphi) com.napthats.jsphi = {}; var state = 'ch-srv'; var ip; var port; - return function(command) { switch (state) { case 'ch-srv': @@ -302,4 +301,4 @@ if (!com.napthats.jsphi) com.napthats.jsphi = {}; return commandExecutor; } -})(); \ No newline at end of file +})(); diff --git a/jsphi.js b/jsphi.js index fa8b722..1c8f72d 100644 --- a/jsphi.js +++ b/jsphi.js @@ -173,7 +173,20 @@ function MlWrappedString (s) { this.string = s; } MlWrappedString.prototype = new MlString(); function MlMakeString (l) { this.bytes = ""; this.len = l; } MlMakeString.prototype = new MlString (); -function caml_js_eval_string () {return eval(arguments[0].toString());} +function caml_blit_string(s1, i1, s2, i2, len) { + if (len === 0) return; + if (i2 === s2.last && s2.bytes != null) { + var b = s1.bytes; + if (b == null) b = s1.toBytes (); + if (i1 > 0 || s1.last > len) b = b.slice(i1, i1 + len); + s2.bytes += b; + s2.last += b.length; + return; + } + var a = s2.array; + if (!a) a = s2.toArray(); else { s2.bytes = s2.string = null; } + s1.blitToArray (i1, a, i2, len); +} function caml_call_gen(f, args) { if(f.fun) return caml_call_gen(f.fun, args); @@ -186,6 +199,10 @@ function caml_call_gen(f, args) { else return function (x){ return caml_call_gen(f, args.concat([x])); }; } +function caml_create_string(len) { + if (len < 0) caml_invalid_argument("String.create"); + return new MlMakeString(len); +} function caml_js_wrap_callback(f) { var toArray = Array.prototype.slice; return function () { @@ -200,4 +217,4 @@ var caml_named_values = {}; function caml_register_named_value(nm,v) { caml_named_values[nm] = v; return 0; } -(function(){caml_register_global(5,[0,new MlString("Division_by_zero")]);caml_register_global(3,[0,new MlString("Invalid_argument")]);caml_register_global(2,[0,new MlString("Failure")]);var g=new MlString("Pervasives.do_at_exit"),f=new MlString("\n var NS_JSPHI = com.napthats.jsphi;\n NS_JSPHI.CLIENT_VERSION = '05103010';\n var NS_WEBSOCKET = com.napthats.websocket;\n var URL_WEBSOCKT = 'ws://napthats.com/ws/';\n var CONTROL_COMMAND = {\n 49: ['1'],\n 50: ['2'],\n 51: ['3'],\n 52: ['4'],\n 53: ['5'],\n 54: ['6'],\n 55: ['7'],\n 56: ['8'],\n 57: ['9'],\n 65: ['read'],\n 66: ['board'],\n 67: ['use'],\n 68: ['erase'],\n 70: ['floor item'],\n 71: ['guard'],\n 72: ['hi'],\n 77: ['check', 'look'],\n //80: ['pay'],\n 81: ['equip'],\n 82: ['spells'],\n 83: ['write'],\n 86: ['sort'],\n 87: ['unequip'],\n 88: ['put'],\n 89: ['y'],\n 90: ['get'],\n 96: ['check', 'look'],\n 97: ['hit'],\n 98: ['go b'],\n 99: ['cast'],\n 100: ['go l'],\n 101: ['turn b'],\n 102: ['go r'],\n 103: ['turn l'],\n 104: ['go f'],\n 105: ['turn r'],\n 106: ['use'],\n 107: ['get'],\n 109: ['put'],\n 110: ['.'],\n 111: ['equip'],\n 190: ['.']\n };\n var CONTROL_COMMAND_SHIFT = {\n 65: ['cast', 'analyze'],\n 66: ['cast', 'call'],\n 67: ['cast', 'create'],\n 68: ['cast', 'detect'],\n 69: ['cast', 'eagle eye'],\n 70: ['cast', 'forget'],\n 73: ['cast', 'identify'],\n 75: ['cast', 'list'],\n 76: ['cast', 'wizard lock'],\n 77: ['cast', 'disappear'],\n 78: ['cast', 'appear'],\n 80: ['cast', 'party eye'],\n 81: ['cast', 'wizard light'],\n 82: ['cast', 'return'],\n 83: ['cast', 'search'],\n 85: ['cast', 'unlock'],\n 87: ['cast', 'wizard eye'],\n 88: ['cast', 'charge spell'],\n 90: ['cast', 'destroy']\n };\n var phiUI;\n var commandExecutor;\n var ws;\n var userId;\n var serverIpPort;\n\n var login = function(id, ipPort) {\n userId = id;\n serverIpPort = ipPort;\n if (!userId) {\n phiUI.showErrorMessage('Please set user id first.');\n return;\n }\n //tentative\n ws.send('$open$:' + serverIpPort);\n commandExecutor.setUserId(userId);\n ws.send('#open ' + userId);\n sendMessageEnterWorld();\n };\n\n var logout = function() {\n commandExecutor.resetExecutor();\n ws.send('exit');\n };\n\n var recvMessage = function(msg){\n var phidmMessage = NS_JSPHI.phidmMessageParse(msg.data);\n if (!phidmMessage) return; //message does not exist or not end\n commandExecutor.exec(phidmMessage);\n };\n\n var sendMessage = function(msg) {\n ws.send(msg);\n };\n\n var sendMessageEnterWorld = function() {\n //test default setting\n ws.send('#map-iv 1');\n ws.send('#status-iv 1');\n ws.send('#version-cli ' + NS_JSPHI.CLIENT_VERSION);\n ws.send('#ex-switch eagleeye=form');\n ws.send('#ex-map size=57');\n ws.send('#ex-map style=turn');\n ws.send('#ex-switch ex-move-recv=true');\n ws.send('#ex-switch ex-list-mode-end=true');\n ws.send('#ex-switch ex-disp-magic=false');\n //end test\n };\n\n var changeWorld = function(ipPort) {\n serverIpPort = ipPort;\n savePhirc(userId, serverIpPort);\n phiUI.setPhirc(readPhircCookie(), userId + '@' + serverIpPort);\n sendMessageEnterWorld();\n };\n\n var finishNewuser = function(id) {\n userId = id;\n savePhirc(userId, serverIpPort);\n phiUI.setPhirc(readPhircCookie(), userId + '@' + serverIpPort);\n commandExecutor.setUserId(id);\n sendMessageEnterWorld();\n };\n\n var startNewuser = function(name, ipPort) {\n serverIpPort = ipPort;\n ws.send('$open$:' + serverIpPort);\n commandExecutor.startNewuser(name);\n };\n\n var importPhirc = function(id, ipPort) {\n userId = id;\n serverIpPort = ipPort;\n savePhirc(userId, serverIpPort);\n phiUI.setPhirc(readPhircCookie(), userId + '@' + serverIpPort);\n phiUI.showClientMessage('.phirc load completed.');\n };\n\n var showPhirc = function() {\n if (userId) {\n phiUI.showClientMessage(userId + ' ' + serverIpPort);\n }\n else {\n phiUI.showErrorMessage('No user login.');\n }\n };\n\n var savePhirc = function(id, ipPort) {\n var savedPhircList = readPhircCookie();\n if (!savedPhircList) savedPhircList = [];\n for (var i = 0; i < savedPhircList.length; i++) {\n if (id === savedPhircList[i][0]) {\n savedPhircList[i][1] = ipPort;\n break;\n }\n }\n if (i === savedPhircList.length) {\n savedPhircList.push([id, ipPort]);\n }\n writePhircCookie(savedPhircList);\n };\n\n //var loadPhirc = function(id) {\n // var savedPhircList = readPhircCookie();\n // if (!savedPhircList) return;\n // for (var i = 0; i < savedPhircList.length; i++) {\n // if (id === savedPhircList[i][0]) {\n // return savedPhircList[i];\n // }\n // }\n //};\n\n NS_JSPHI.readCookie = function(key){\n var allcookies = document.cookie;\n var pos = allcookies.indexOf(key + '=');\n var value;\n if (pos !== -1) {\n var start = pos + key.length + 1;\n var end = allcookies.indexOf(';', start);\n if (end === -1) end = allcookies.length;\n value = allcookies.substring(start, end);\n value = decodeURIComponent(value);\n }\n return value;\n };\n\n var readPhircCookie = function() {\n var value = NS_JSPHI.readCookie('phirc');\n if (!value) return;\n var phircList = [];\n var _phircList = value.split(',');\n for (var i = 0; i < _phircList.length; i++) {\n phircList.push(_phircList[i].split('@'));\n }\n return phircList;\n };\n\n var writePhircCookie = function(_phircList) {\n var phircList = _phircList;\n for (var i = 0; i < phircList.length; i++) {\n phircList[i] = phircList[i].join('@');\n }\n document.cookie = 'phirc=' + encodeURIComponent(phircList.join(',')) + '; max-age=' + (60*60*24*365*10);\n };\n\n \n ws = NS_WEBSOCKET.connectWebSocket(URL_WEBSOCKT, recvMessage);\n phiUI = NS_JSPHI.makePhiUI();\n phiUI.setPhirc(readPhircCookie());\n phiUI.bind('send', sendMessage);\n phiUI.bind('login', login);\n phiUI.bind('logout', logout);\n phiUI.bind('newuser', startNewuser);\n phiUI.bind('phirc_load', importPhirc);\n phiUI.bind('phirc_show', showPhirc);\n commandExecutor = NS_JSPHI.makeCommandExecutor(phiUI, ws);\n commandExecutor.bind('change_world', changeWorld);\n commandExecutor.bind('finish_newuser', finishNewuser);\n\n //keypad control and shortcut key\n (function(){\n var isShiftPressed = false;\n\n phiUI.bind('control_keydown', function(e){\n var keycode = e.keyCode;\n var controlCommand = isShiftPressed ? CONTROL_COMMAND_SHIFT : CONTROL_COMMAND;\n if (keycode === 9) {\n $('#text').focus();\n }\n if (keycode === 16) {\n isShiftPressed = true;\n }\n if (controlCommand[keycode]) {\n var commands = controlCommand[keycode];\n for (var i = 0; i < commands.length; i++) {\n ws.send(commands[i]);\n }\n }\n e.preventDefault();\n });\n\n phiUI.bind('control_keyup', function(e) {\n var keycode = e.keyCode;\n if (keycode === 16) {\n isShiftPressed = false;\n }\n });\n })();\n\n");function e(d){var a=caml_ml_out_channels_list(0);for(;;){if(a){var b=a[2];try {}catch(c){}var a=b;continue;}return 0;}}caml_register_named_value(g,e);var h=[0,0],l=undefined,k=false,j=Array;function m(i){return i instanceof j?0:[0,new MlWrappedString(i.toString())];}h[1]=[0,m,h[1]];var n=window;window.HTMLElement===l;function p(o){caml_js_eval_string(f);return k;}n.onload=caml_js_wrap_callback(function(q){if(q){var r=p(q);if(!(r|0))q.preventDefault();return r;}var s=event,t=p(s);s.returnValue=t;return t;});e(0);return;}()); +(function(){function ao(a1,a2,a3){return a1.length==2?a1(a2,a3):caml_call_gen(a1,[a2,a3]);}caml_register_global(5,[0,new MlString("Division_by_zero")]);caml_register_global(3,[0,new MlString("Invalid_argument")]);caml_register_global(2,[0,new MlString("Failure")]);var V=new MlString("Pervasives.do_at_exit"),U=new MlString(" "),T=new MlString("No user login."),S=new MlString("@"),R=new MlString(".phirc load compin leted."),Q=new MlString("$open$:"),P=new MlString("@"),O=new MlString("@"),N=new MlString("exit"),M=new MlString("Please set user id first."),L=new MlString("napthats.com:20017"),K=new MlString("$open$:"),J=new MlString("guest1"),I=new MlString("guest1"),H=new MlString("#open "),G=new MlString("#map-iv 1"),F=new MlString("#status-iv 1"),E=new MlString("05103010"),D=new MlString("#version-cli "),C=new MlString("#ex-switch eagleeye=form"),B=new MlString("#ex-map size=57"),A=new MlString("#ex-map style=turn"),z=new MlString("#ex-switch ex-move-recv=true"),y=new MlString("#ex-switch ex-list-mode-end=true"),x=new MlString("#ex-switch ex-disp-magic=false"),w=new MlString(""),v=new MlString(""),u=new MlString(""),t=new MlString("ws://napthats.com/ws/"),s=new MlString(""),r=new MlString("send"),q=new MlString("login"),p=new MlString("logout"),o=new MlString("newuser"),n=new MlString("phirc_load"),m=new MlString("phirc_show"),l=new MlString("change_world"),k=new MlString("finish_newuser");function j(a,c){var b=a.getLen(),d=c.getLen(),e=caml_create_string(b+d|0);caml_blit_string(a,0,e,0,b);caml_blit_string(c,0,e,b,d);return e;}function W(i){var f=caml_ml_out_channels_list(0);for(;;){if(f){var g=f[2];try {}catch(h){}var f=g;continue;}return 0;}}caml_register_named_value(V,W);var X=[0,0],aa=null,$=undefined,_=false,Z=Array;function ab(Y){return Y instanceof Z?0:[0,new MlWrappedString(Y.toString())];}X[1]=[0,ab,X[1]];function ad(ac){return ac;}var ae=window;window.HTMLElement===$;function aW(aV){var af=[0,v],ag=[0,u],ah=com.napthats.jsphi,ai=ah.makePhiUI(0),aj=[0,0];function an(ak){var al=ad(ah.phidmMessageParse(ak.data)),am=al==aa?0:[0,al];return am?aj[1].exec(am[1]):0;}var ap=ao(com.napthats.websocket.connectWebSocket,t.toString(),an);aj[1]=ah.makeCommandExecutor(ai,ap);function az(aq){return w;}function au(ar){ap.send(G.toString());ap.send(F.toString());ap.send(j(D,E).toString());ap.send(C.toString());ap.send(B.toString());ap.send(A.toString());ap.send(z.toString());ap.send(y.toString());return ap.send(x.toString());}function aM(as,at){ae.alert(as.toString());ae.alert(at.toString());af[1]=as;ag[1]=at;return 0?ai.showErrorMessage(M.toString()):(ap.send(j(K,L).toString()),aj[1].setUserId(J.toString()),ap.send(j(H,I).toString()),au(0));}function aN(av){aj[1].resetExecutor(0);return ap.send(N.toString());}function aO(aw){return ap.send(aw.toString());}function aP(ax){ag[1]=ax;var ay=j(O,ag[1]),aA=j(af[1],ay).toString();ai.setPhirc(az(0).toString(),aA);return au(0);}function aQ(aB){af[1]=aB;var aC=j(P,ag[1]),aD=j(af[1],aC).toString();ai.setPhirc(az(0).toString(),aD);aj[1].setUserId(aB.toString());return au(0);}function aR(aF,aE){ag[1]=aE;ap.send(j(Q,ag[1]).toString());return aj[1].startNewuser(aF);}function aS(aG,aH){af[1]=aG;ag[1]=aH;var aI=j(S,ag[1]),aJ=j(af[1],aI).toString();ai.setPhirc(az(0).toString(),aJ);return ai.showClientMessage(R.toString());}function aT(aL){if(0){var aK=j(U,ag[1]);return ai.showClientMessage(j(af[1],aK).toString());}return ai.showErrorMessage(T.toString());}var aU=s.toString();ai.setPhirc(az(0).toString(),aU);ai.bind(r.toString(),aO);ai.bind(q.toString(),aM);ai.bind(p.toString(),aN);ai.bind(o.toString(),aR);ai.bind(n.toString(),aS);ai.bind(m.toString(),aT);aj[1].bind(l.toString(),aP);aj[1].bind(k.toString(),aQ);return _;}ae.onload=ad(caml_js_wrap_callback(function(aX){if(aX){var aY=aW(aX);if(!(aY|0))aX.preventDefault();return aY;}var aZ=event,a0=aW(aZ);aZ.returnValue=a0;return a0;}));W(0);return;}()); diff --git a/jsphi.ml b/jsphi.ml index 601fe34..b0a70a4 100644 --- a/jsphi.ml +++ b/jsphi.ml @@ -1,12 +1,43 @@ open Js -let func () = Unsafe.eval_string " - var NS_JSPHI = com.napthats.jsphi; - NS_JSPHI.CLIENT_VERSION = '05103010'; - var NS_WEBSOCKET = com.napthats.websocket; - var URL_WEBSOCKT = 'ws://napthats.com/ws/'; - var CONTROL_COMMAND = { +class type phi_ui = object + method showErrorMessage: js_string t -> unit meth + method bind: js_string t -> 'a -> unit meth + method setPhirc: js_string t -> js_string t -> unit meth + method showClientMessage: js_string t -> unit meth +end + + +class type com = object + method setUserId: js_string t -> unit meth + method bind: js_string t -> 'a -> unit meth + method exec: js_string t -> unit meth + method resetExecutor: unit -> unit meth + method startNewuser: js_string t -> unit meth +end + +class type phi_message = object + method data: js_string t readonly_prop +end + +class type ws = object + method send: js_string t -> unit meth +end + +class type ns = object + method _CLIENT_VERSION: js_string t prop + method readCookie: (js_string t -> js_string t) prop + method makePhiUI: unit -> phi_ui t meth + method makeCommandExecutor: phi_ui t -> ws t -> com t meth + method phidmMessageParse: js_string t -> js_string t meth +end + + +let _ = Dom_html.window##onload <- Dom_html.handler (fun _ -> + +let _CONTROL_COMMAND = Unsafe.variable " + { 49: ['1'], 50: ['2'], 51: ['3'], @@ -49,8 +80,11 @@ let func () = Unsafe.eval_string " 110: ['.'], 111: ['equip'], 190: ['.'] - }; - var CONTROL_COMMAND_SHIFT = { + } +" + +in let _CONTROL_COMMAND_SHIFT = Unsafe.variable " + { 65: ['cast', 'analyze'], 66: ['cast', 'call'], 67: ['cast', 'create'], @@ -70,100 +104,34 @@ let func () = Unsafe.eval_string " 87: ['cast', 'wizard eye'], 88: ['cast', 'charge spell'], 90: ['cast', 'destroy'] - }; - var phiUI; - var commandExecutor; - var ws; - var userId; - var serverIpPort; - - var login = function(id, ipPort) { - userId = id; - serverIpPort = ipPort; - if (!userId) { - phiUI.showErrorMessage('Please set user id first.'); - return; - } - //tentative - ws.send('$open$:' + serverIpPort); - commandExecutor.setUserId(userId); - ws.send('#open ' + userId); - sendMessageEnterWorld(); - }; - - var logout = function() { - commandExecutor.resetExecutor(); - ws.send('exit'); - }; - - var recvMessage = function(msg){ - var phidmMessage = NS_JSPHI.phidmMessageParse(msg.data); - if (!phidmMessage) return; //message does not exist or not end - commandExecutor.exec(phidmMessage); - }; - - var sendMessage = function(msg) { - ws.send(msg); - }; - - var sendMessageEnterWorld = function() { - //test default setting - ws.send('#map-iv 1'); - ws.send('#status-iv 1'); - ws.send('#version-cli ' + NS_JSPHI.CLIENT_VERSION); - ws.send('#ex-switch eagleeye=form'); - ws.send('#ex-map size=57'); - ws.send('#ex-map style=turn'); - ws.send('#ex-switch ex-move-recv=true'); - ws.send('#ex-switch ex-list-mode-end=true'); - ws.send('#ex-switch ex-disp-magic=false'); - //end test - }; - - var changeWorld = function(ipPort) { - serverIpPort = ipPort; - savePhirc(userId, serverIpPort); - phiUI.setPhirc(readPhircCookie(), userId + '@' + serverIpPort); - sendMessageEnterWorld(); - }; - - var finishNewuser = function(id) { - userId = id; - savePhirc(userId, serverIpPort); - phiUI.setPhirc(readPhircCookie(), userId + '@' + serverIpPort); - commandExecutor.setUserId(id); - sendMessageEnterWorld(); - }; - - var startNewuser = function(name, ipPort) { - serverIpPort = ipPort; - ws.send('$open$:' + serverIpPort); - commandExecutor.startNewuser(name); - }; - - var importPhirc = function(id, ipPort) { - userId = id; - serverIpPort = ipPort; - savePhirc(userId, serverIpPort); - phiUI.setPhirc(readPhircCookie(), userId + '@' + serverIpPort); - phiUI.showClientMessage('.phirc load completed.'); - }; - - var showPhirc = function() { - if (userId) { - phiUI.showClientMessage(userId + ' ' + serverIpPort); - } - else { - phiUI.showErrorMessage('No user login.'); - } - }; - - var savePhirc = function(id, ipPort) { - var savedPhircList = readPhircCookie(); - if (!savedPhircList) savedPhircList = []; - for (var i = 0; i < savedPhircList.length; i++) { - if (id === savedPhircList[i][0]) { - savedPhircList[i][1] = ipPort; + } +" + +in let userId = ref "" +in let serverIpPort = ref "" +in let _NS_JSPHI : ns t = Unsafe.variable "com.napthats.jsphi" +in let phiUI = _NS_JSPHI##makePhiUI(()) + + + +in let commandExecutor = ref (Unsafe.variable "0") +in let recvMessage msg = + let phidmMessage = _NS_JSPHI##phidmMessageParse(msg##data) in + match Opt.to_option (some phidmMessage) with + | None -> () + | Some msg -> (!commandExecutor)##exec(msg) + +in let ws: ws t = (Unsafe.variable "com.napthats.websocket.connectWebSocket") (Js.string "ws://napthats.com/ws/") recvMessage + +in let _ = commandExecutor := _NS_JSPHI##makeCommandExecutor(phiUI, ws) + + +in let savePhirc id ipPort = () +(* in let savedPhircList = readPhircCookie () in + if (!savedPhircList) savedPhircList = []; + for (var i = 0; i < savedPhircList.length; i++) { + if (id === savedPhircList[i][0]) { + savedPhircList[i][1] = ipPort; break; } } @@ -171,19 +139,102 @@ let func () = Unsafe.eval_string " savedPhircList.push([id, ipPort]); } writePhircCookie(savedPhircList); - }; - - //var loadPhirc = function(id) { - // var savedPhircList = readPhircCookie(); - // if (!savedPhircList) return; - // for (var i = 0; i < savedPhircList.length; i++) { - // if (id === savedPhircList[i][0]) { - // return savedPhircList[i]; - // } - // } - //}; - - NS_JSPHI.readCookie = function(key){ + }*) + +in let readPhircCookie () = "" +(*Unsafe.variable " +function() { + var value = readCookie('phirc'); + if (!value) return; + var phircList = []; + var _phircList = value.split(','); + for (var i = 0; i < _phircList.length; i++) { + phircList.push(_phircList[i].split('@')); + } + return phircList; + } +"*) + + +in let sendMessageEnterWorld () = + ws##send(Js.string "#map-iv 1"); + ws##send(Js.string "#status-iv 1"); + ws##send(Js.string ("#version-cli " ^ "05103010")); (* TODO: extract version number *) + ws##send(Js.string "#ex-switch eagleeye=form"); + ws##send(Js.string "#ex-map size=57"); + ws##send(Js.string "#ex-map style=turn"); + ws##send(Js.string "#ex-switch ex-move-recv=true"); + ws##send(Js.string "#ex-switch ex-list-mode-end=true"); + ws##send(Js.string "#ex-switch ex-disp-magic=false") + + +in let login id ipPort = + Dom_html.window##alert(Js.string id); + Dom_html.window##alert(Js.string ipPort); + userId := id; + serverIpPort := ipPort; +(* if !userId = "" *) + if false + then phiUI##showErrorMessage(Js.string "Please set user id first.") + else ( + ws##send(Js.string ("$open$:" ^ ipPort)); + (!commandExecutor)##setUserId (Js.string id); + ws##send(Js.string ("#open " ^ id)); +(* ws##send(Js.string ("$open$:" ^ "napthats.com:20017")); + (!commandExecutor)##setUserId (Js.string "guest1"); + ws##send(Js.string ("#open " ^ "guest1")); *) + + sendMessageEnterWorld () + ) + +in let logout () = + (!commandExecutor)##resetExecutor(()); + ws##send(Js.string "exit") + + +in let sendMessage msg = + ws##send(Js.string msg) + + +in let changeWorld ipPort = + serverIpPort := ipPort; + savePhirc(!userId, !serverIpPort); + phiUI##setPhirc(Js.string (readPhircCookie ()), Js.string (!userId ^ "@" ^ !serverIpPort)); + sendMessageEnterWorld() + + +in let finishNewuser id = + userId := id; + savePhirc(!userId, !serverIpPort); + phiUI##setPhirc(Js.string (readPhircCookie ()), Js.string (!userId ^ "@" ^ !serverIpPort)); + (!commandExecutor)##setUserId(Js.string id); + sendMessageEnterWorld() + +in let startNewuser name ipPort = + serverIpPort := ipPort; + ws##send(Js.string ("$open$:" ^ !serverIpPort)); + (!commandExecutor)##startNewuser(name) + + +in let importPhirc id ipPort = + userId := id; + serverIpPort := ipPort; + savePhirc(!userId, !serverIpPort); + phiUI##setPhirc(Js.string (readPhircCookie ()), Js.string (!userId ^ "@" ^ !serverIpPort)); + phiUI##showClientMessage(Js.string ".phirc load compin leted.") + +in let showPhirc () = +(* if (!userId != "") *) + if false + then phiUI##showClientMessage(Js.string (!userId ^ " " ^ !serverIpPort)) + else phiUI##showErrorMessage(Js.string "No user login.") + + + +in let readCookie key = "" + +(*Unsafe.variable " +function(key){ var allcookies = document.cookie; var pos = allcookies.indexOf(key + '='); var value; @@ -195,41 +246,33 @@ let func () = Unsafe.eval_string " value = decodeURIComponent(value); } return value; - }; + } +"*) - var readPhircCookie = function() { - var value = NS_JSPHI.readCookie('phirc'); - if (!value) return; - var phircList = []; - var _phircList = value.split(','); - for (var i = 0; i < _phircList.length; i++) { - phircList.push(_phircList[i].split('@')); - } - return phircList; - }; - var writePhircCookie = function(_phircList) { +in let writePhircCookie _phircList = () +(* +Unsafe.variable " +function(_phircList) { var phircList = _phircList; for (var i = 0; i < phircList.length; i++) { phircList[i] = phircList[i].join('@'); } document.cookie = 'phirc=' + encodeURIComponent(phircList.join(',')) + '; max-age=' + (60*60*24*365*10); - }; - - - ws = NS_WEBSOCKET.connectWebSocket(URL_WEBSOCKT, recvMessage); - phiUI = NS_JSPHI.makePhiUI(); - phiUI.setPhirc(readPhircCookie()); - phiUI.bind('send', sendMessage); - phiUI.bind('login', login); - phiUI.bind('logout', logout); - phiUI.bind('newuser', startNewuser); - phiUI.bind('phirc_load', importPhirc); - phiUI.bind('phirc_show', showPhirc); - commandExecutor = NS_JSPHI.makeCommandExecutor(phiUI, ws); - commandExecutor.bind('change_world', changeWorld); - commandExecutor.bind('finish_newuser', finishNewuser); + } +"*) +in let _ = + phiUI##setPhirc(Js.string (readPhircCookie ()), Js.string ""); + phiUI##bind(Js.string "send", sendMessage); + phiUI##bind(Js.string "login", login); + phiUI##bind(Js.string "logout", logout); + phiUI##bind(Js.string "newuser", startNewuser); + phiUI##bind(Js.string "phirc_load", importPhirc); + phiUI##bind(Js.string "phirc_show", showPhirc); + (!commandExecutor)##bind(Js.string "change_world", changeWorld); + (!commandExecutor)##bind(Js.string "finish_newuser", finishNewuser) +(* Unsafe.eval_string " //keypad control and shortcut key (function(){ var isShiftPressed = false; @@ -259,7 +302,9 @@ let func () = Unsafe.eval_string " } }); })(); +"*) -" -let _ = Dom_html.window##onload <- Dom_html.handler (fun _ -> ignore (func ()); Js._false) +in Js._false) + +(*let _ = Dom_html.window##onload <- Dom_html.handler (fun _ -> ignore (func ()); Js._false)*) diff --git a/jsphi.ui.js b/jsphi.ui.js index 102f698..5c202a4 100644 --- a/jsphi.ui.js +++ b/jsphi.ui.js @@ -11,6 +11,21 @@ if (!com) com = {}; if (!com.napthats) com.napthats = {}; if (!com.napthats.jsphi) com.napthats.jsphi = {}; +var readCookie = function(key){ + var allcookies = document.cookie; + var pos = allcookies.indexOf(key + '='); + var value; + if (pos !== -1) { + var start = pos + key.length + 1; + var end = allcookies.indexOf(';', start); + if (end === -1) end = allcookies.length; + value = allcookies.substring(start, end); + value = decodeURIComponent(value); + } + return value; +}; + + (function() { var ns = com.napthats.jsphi; var MAP_WIDTH = 7; @@ -426,21 +441,21 @@ if (!com.napthats.jsphi) com.napthats.jsphi = {}; ctx.font = FONT_DEFAULT; var initialMapScale = 0; - if (initialMapScale = ns.readCookie(COOKIE_MAP_SCALE)) { + if (initialMapScale = readCookie(COOKIE_MAP_SCALE)) { $('#map_scale').val(initialMapScale); } else { $('#map_scale').val(DEFAULT_MAP_SCALE); } var initialLogHeight = 0; - if (initialLogHeight = ns.readCookie(COOKIE_LOG_HEIGHT)) { + if (initialLogHeight = readCookie(COOKIE_LOG_HEIGHT)) { $('#log_height').val(initialLogHeight); } else { $('#log_height').val(DEFAULT_LOG_HEIGHT); } var initialLogWidth = 0; - if (initialLogWidth = ns.readCookie(COOKIE_LOG_WIDTH)) { + if (initialLogWidth = readCookie(COOKIE_LOG_WIDTH)) { $('#log_width').val(initialLogWidth); } else {