mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2024-12-28 16:15:54 -05:00
1 line
3.4 KiB
JavaScript
1 line
3.4 KiB
JavaScript
var CreateRDPDesktop=function(e){var s={};function a(e){return(!0===s.m.SwapMouse?[2,0,1,0,0]:[1,0,2,0,0])[e]}function i(e){s.State!=e&&(s.State=e,null!=s.onStateChanged&&s.onStateChanged(s,s.State))}function n(e){var t=s.Canvas.canvas.height/s.CanvasId.clientHeight,a=s.Canvas.canvas.width/s.CanvasId.clientWidth,n=function(e){var t=Array(2);for(t[0]=t[1]=0;e;)t[0]+=e.offsetLeft,t[1]+=e.offsetTop,e=e.offsetParent;return t}(s.Canvas.canvas),a=(e.pageX-n[0])*a,t=(e.pageY-n[1])*t;return e.addx&&(a+=e.addx),e.addy&&(t+=e.addy),{x:a,y:t}}return s.m={},s.State=0,s.canvas=Q(e),"string"==typeof(s.CanvasId=e)&&(s.CanvasId=Q(e)),s.Canvas=s.CanvasId.getContext("2d"),s.ScreenWidth=s.width=1280,s.ScreenHeight=s.height=1024,s.Start=function(e,t,a){i(1),s.nodeid=e,s.port=t;var n={savepass:(s.credentials=a).savecred,useServerCreds:a.servercred,width:a.width,height:a.height,flags:a.flags};a.width&&a.height&&(n.width=s.ScreenWidth=s.width=a.width,n.height=s.ScreenHeight=s.height=a.height,delete a.width,delete a.height),s.render=new Mstsc.Canvas.create(s.canvas),s.socket=new WebSocket("wss://"+window.location.host+"/mstscrelay.ashx"),s.socket.binaryType="arraybuffer",s.socket.onopen=function(){i(2),s.socket.send(JSON.stringify(["infos",{ip:s.nodeid,port:s.port,screen:{width:s.width,height:s.height},domain:a.domain,username:a.username,password:a.password,options:n,locale:Mstsc.locale()}]))},s.socket.onmessage=function(e){if("string"==typeof e.data){var t=JSON.parse(e.data);switch(t[0]){case"rdp-connect":i(3),s.rotation=0,s.Canvas.setTransform(1,0,0,1,0,0),s.Canvas.canvas.width=s.ScreenWidth,s.Canvas.canvas.height=s.ScreenHeight,s.Canvas.fillRect(0,0,s.ScreenWidth,s.ScreenHeight),null!=s.m.onScreenSizeChange&&s.m.onScreenSizeChange(s,s.ScreenWidth,s.ScreenHeight,s.CanvasId);break;case"rdp-bitmap":if(null==s.bitmapData)break;var a=t[1];a.data=s.bitmapData,delete s.bitmapData,s.render.update(a);break;case"rdp-close":s.Stop();break;case"rdp-error":a=t[1];console.log("[mstsc.js] error : "+a.code+"("+a.message+")"),s.Stop()}}else s.bitmapData=e.data},s.socket.onclose=function(){i(0)},i(1)},s.Stop=function(){s.Canvas.fillRect(0,0,s.ScreenWidth,s.ScreenHeight),s.socket&&s.socket.close()},s.m.mousemove=function(e){if(s.socket&&3==s.State){var t=n(e);if(!(t.x<0||t.y<0||t.x>s.ScreenWidth||t.y>s.ScreenHeight))return s.mouseNagleData=["mouse",t.x,t.y,0,!1],null==s.mouseNagleTimer&&(s.mouseNagleTimer=setTimeout(function(){s.socket.send(JSON.stringify(s.mouseNagleData)),s.mouseNagleTimer=null},50)),e.preventDefault(),!1}},s.m.mouseup=function(e){if(s.socket&&3==s.State){var t=n(e);if(!(t.x<0||t.y<0||t.x>s.ScreenWidth||t.y>s.ScreenHeight))return null!=s.mouseNagleTimer&&(clearTimeout(s.mouseNagleTimer),s.mouseNagleTimer=null),s.socket.send(JSON.stringify(["mouse",t.x,t.y,a(e.button),!1])),e.preventDefault(),!1}},s.m.mousedown=function(e){if(s.socket&&3==s.State){var t=n(e);if(!(t.x<0||t.y<0||t.x>s.ScreenWidth||t.y>s.ScreenHeight))return null!=s.mouseNagleTimer&&(clearTimeout(s.mouseNagleTimer),s.mouseNagleTimer=null),s.socket.send(JSON.stringify(["mouse",t.x,t.y,a(e.button),!0])),e.preventDefault(),!1}},s.m.handleKeyUp=function(e){if(s.socket&&3==s.State)return s.socket.send(JSON.stringify(["scancode",Mstsc.scancode(e),!1])),e.preventDefault(),!1},s.m.handleKeyDown=function(e){if(s.socket&&3==s.State)return s.socket.send(JSON.stringify(["scancode",Mstsc.scancode(e),!0])),e.preventDefault(),!1},s.m.mousedblclick=function(){},s.m.handleKeyPress=function(){},s.m.setRotation=function(){},s} |