meshcentral
Version:
Web based remote computer management server
1 lines • 23.6 kB
JavaScript
function isWindowsBrowser(){return navigator&&!!/win/i.exec(navigator.platform)}Uint8Array.prototype.slice||Object.defineProperty(Uint8Array.prototype,"slice",{value:function(e,t){return new Uint8Array(Array.prototype.slice.call(this,e,t))}});var CreateAgentRemoteDesktop=function(e,t){var n={};n.CanvasId=e,"string"==typeof e&&(n.CanvasId=Q(e)),n.Canvas=n.CanvasId.getContext("2d"),n.scrolldiv=t,n.State=0,n.PendingOperations=[],n.tilesReceived=0,n.TilesDrawn=0,n.KillDraw=0,n.ipad=!1,n.tabletKeyboardVisible=!1,n.LastX=0,n.LastY=0,n.touchenabled=0,n.submenuoffset=0,n.touchtimer=null,n.TouchArray={},n.connectmode=0,n.connectioncount=0,n.rotation=0,n.protocol=2,n.debugmode=0,n.firstUpKeys=[],n.stopInput=!1,n.localKeyMap=!0,n.remoteKeyMap=!1,n.pressedKeys=[],n._altGrArmed=!1,n._altGrTimeout=0,n.isWindowsBrowser=isWindowsBrowser(),n.sessionid=0,n.username,n.oldie=!1,n.ImageType=1,n.CompressionLevel=50,n.ScalingLevel=1024,n.FrameRateTimer=100,n.SwapMouse=!1,n.UseExtendedKeyFlag=!0,n.FirstDraw=!1,n.onRemoteInputLockChanged=null,n.RemoteInputLock=null,n.onKeyboardStateChanged=null,n.KeyboardState=0,n.ScreenWidth=960,n.ScreenHeight=701,n.width=960,n.height=960,n.displays=null,n.selectedDisplay=null,n.onScreenSizeChange=null,n.onMessage=null,n.onConnectCountChanged=null,n.onDebugMessage=null,n.onTouchEnabledChanged=null,n.onDisplayinfo=null,n.accumulator=null;var o=!0,a="default";n.mouseCursorActive=function(e){o!=e&&(o=e,n.CanvasId.style.cursor=1==e?a:"default")};var r=["default","progress","crosshair","pointer","help","text","no-drop","move","nesw-resize","ns-resize","nwse-resize","w-resize","alias","wait","none","not-allowed","col-resize","row-resize","copy","zoom-in","zoom-out"];n.Start=function(){n.State=0,n.accumulator=null},n.Stop=function(){n.setRotation(0),n.UnGrabKeyInput(),n.UnGrabMouseInput(),n.touchenabled=0,null!=n.onScreenSizeChange&&n.onScreenSizeChange(n,n.ScreenWidth,n.ScreenHeight,n.CanvasId),n.Canvas.clearRect(0,0,n.CanvasId.width,n.CanvasId.height)},n.xxStateChange=function(e){if(n.State!=e&&(n.State=e,n.CanvasId.style.cursor="default",0===e))n.Stop()},n.send=function(e){n.debugmode>2&&console.log("KSend("+e.length+"): "+rstr2hex(e)),null!=n.parent&&n.parent.send(e)},n.ProcessPictureMsg=function(e,t,o){var a=new Image;a.xcount=n.tilesReceived++;for(var r=n.tilesReceived,i=e.slice(4),s=0,c=[];i.byteLength-s>5e4;)c.push(String.fromCharCode.apply(null,i.slice(s,s+5e4))),s+=5e4;s>0?c.push(String.fromCharCode.apply(null,i.slice(s))):c.push(String.fromCharCode.apply(null,i)),a.src="data:image/jpeg;base64,"+btoa(c.join("")),a.onload=function(){if(null!=n.Canvas&&n.KillDraw<r&&0!=n.State)for(n.PendingOperations.push([r,2,a,t,o]);n.DoPendingOperations(););else n.PendingOperations.push([r,0])},a.error=function(){console.log("DecodeTileError")}},n.DoPendingOperations=function(){if(0==n.PendingOperations.length)return!1;for(var e=0;e<n.PendingOperations.length;e++){var t=n.PendingOperations[e];if(t[0]==n.TilesDrawn+1)return null!=n.onPreDrawImage&&n.onPreDrawImage(),1==t[1]?n.ProcessCopyRectMsg(t[2]):2==t[1]&&(n.Canvas.drawImage(t[2],n.rotX(t[3],t[4]),n.rotY(t[3],t[4])),delete t[2]),n.PendingOperations.splice(e,1),n.TilesDrawn++,n.TilesDrawn==n.tilesReceived&&n.KillDraw<n.TilesDrawn&&(n.KillDraw=n.TilesDrawn=n.tilesReceived=0),!0}return n.oldie&&n.PendingOperations.length>0&&n.TilesDrawn++,!1},n.ProcessCopyRectMsg=function(e){var t=((255&e.charCodeAt(0))<<8)+(255&e.charCodeAt(1)),o=((255&e.charCodeAt(2))<<8)+(255&e.charCodeAt(3)),a=((255&e.charCodeAt(4))<<8)+(255&e.charCodeAt(5)),r=((255&e.charCodeAt(6))<<8)+(255&e.charCodeAt(7)),i=((255&e.charCodeAt(8))<<8)+(255&e.charCodeAt(9)),s=((255&e.charCodeAt(10))<<8)+(255&e.charCodeAt(11));n.Canvas.drawImage(Canvas.canvas,t,o,i,s,a,r,i,s)},n.SendUnPause=function(){n.debugmode>1&&console.log("SendUnPause"),n.send(String.fromCharCode(0,8,0,5,0))},n.SendPause=function(){n.debugmode>1&&console.log("SendPause"),n.send(String.fromCharCode(0,8,0,5,1))},n.SendCompressionLevel=function(e,t,o,a){n.ImageType=e,t&&(n.CompressionLevel=t),o&&(n.ScalingLevel=o),a&&(n.FrameRateTimer=a),n.send(String.fromCharCode(0,5,0,10,e,n.CompressionLevel)+n.shortToStr(n.ScalingLevel)+n.shortToStr(n.FrameRateTimer))},n.SendRefresh=function(){n.send(String.fromCharCode(0,6,0,4))},n.ProcessScreenMsg=function(e,t){if(n.debugmode>0&&console.log("ScreenSize: "+e+" x "+t),n.ScreenWidth!=e||n.ScreenHeight!=t){for(n.Canvas.setTransform(1,0,0,1,0,0),n.rotation=0,n.FirstDraw=!0,n.ScreenWidth=n.width=e,n.ScreenHeight=n.height=t,n.KillDraw=n.tilesReceived;n.PendingOperations.length>0;)n.PendingOperations.shift();n.SendCompressionLevel(n.ImageType),n.SendUnPause(),n.SendRemoteInputLock(2),null!=n.onScreenSizeChange&&n.onScreenSizeChange(n,n.ScreenWidth,n.ScreenHeight,n.CanvasId)}},n.ProcessBinaryCommand=function(e,t,i){var s,c;3!=e&&4!=e&&7!=e||(s=(i[4]<<8)+i[5],c=(i[6]<<8)+i[7]),n.debugmode>2&&console.log("CMD",e,t,s,c);let l="";for(let e=0;e<i.length;e+=1e4)l+=String.fromCharCode.apply(null,i.slice(e,e+1e4));switch(null!=n.recordedData&&(t>65e3?n.recordedData.push(u(2,1,n.shortToStr(27)+n.shortToStr(8)+n.intToStr(t)+n.shortToStr(e)+n.shortToStr(0)+n.shortToStr(0)+n.shortToStr(0)+l)):n.recordedData.push(u(2,1,l))),e){case 3:n.FirstDraw&&n.onResize(),n.ProcessPictureMsg(i.slice(4),s,c);break;case 7:n.ProcessScreenMsg(s,c),n.SendKeyMsgKC(n.KeyAction.UP,16),n.SendKeyMsgKC(n.KeyAction.UP,17),n.SendKeyMsgKC(n.KeyAction.UP,18),n.SendKeyMsgKC(n.KeyAction.UP,91),n.SendKeyMsgKC(n.KeyAction.UP,92),n.SendKeyMsgKC(n.KeyAction.UP,16),n.send(String.fromCharCode(0,14,0,4));break;case 11:var d=0,h={},g=(i[4]<<8)+i[5];if(g>0){d=(i[6+2*g]<<8)+i[7+2*g];for(var p=0;p<g;p++){var S=(i[6+2*p]<<8)+i[7+2*p];h[S]=65535==S?"All Displays":"Display "+S}}n.displays=h,n.selectedDisplay=d,null!=n.onDisplayinfo&&n.onDisplayinfo(n,h,d);break;case 12:break;case 14:n.touchenabled=1,n.TouchArray={},null!=n.onTouchEnabledChanged&&n.onTouchEnabledChanged(n.touchenabled);break;case 15:n.TouchArray={};break;case 17:var v=String.fromCharCode.apply(null,i.slice(4));console.log("Got KVM Message: "+v),null!=n.onMessage&&n.onMessage(v,n);break;case 18:if(5!=t||n.KeyboardState==i[4])break;n.KeyboardState=i[4],n.onKeyboardStateChanged&&n.onKeyboardStateChanged(n,n.KeyboardState),console.log("MNG_KVM_KEYSTATE:"+(1&n.KeyboardState?" NumLock":"")+(2&n.KeyboardState?" ScrollLock":"")+(4&n.KeyboardState?" CapsLock":""));break;case 65:"."!=(v=String.fromCharCode.apply(null,i.slice(4)))[0]?(console.log(v),n.parent&&n.parent.setConsoleMessage&&n.parent.setConsoleMessage(v)):console.log("KVM: "+v.substring(1));break;case 82:if(t<4||(t-4)%10!=0)break;var f=(t-4)/10,C={},y=4;for(p=0;p<f;p++)C[(i[y+0]<<8)+i[y+1]]={x:(i[y+2]<<8)+i[y+3],y:(i[y+4]<<8)+i[y+5],w:(i[y+6]<<8)+i[y+7],h:(i[y+8]<<8)+i[y+9]},y+=10;break;case 87:if(5!=t)break;null!=n.RemoteInputLock&&n.RemoteInputLock===(0!=i[4])||(n.RemoteInputLock=0!=i[4],n.onRemoteInputLockChanged&&n.onRemoteInputLockChanged(n,n.RemoteInputLock));break;case 88:if(5!=t||n.stopInput)break;var m=i[4];m>r.length&&(m=0),a=r[m],o&&(n.CanvasId.style.cursor=a);break;default:console.log("Unknown command",e,t)}},n.MouseButton={NONE:0,LEFT:2,RIGHT:8,MIDDLE:32},n.KeyAction={NONE:0,DOWN:1,UP:2,SCROLL:3,EXUP:4,EXDOWN:5,DBLCLICK:6},n.InputType={KEY:1,MOUSE:2,CTRLALTDEL:10,TOUCH:15,KEYUNICODE:85},n.Alternate=0;var i={Pause:19,CapsLock:20,Space:32,Quote:222,Minus:189,NumpadMultiply:106,NumpadAdd:107,PrintScreen:44,Comma:188,NumpadSubtract:109,NumpadDecimal:110,Period:190,Slash:191,NumpadDivide:111,Semicolon:186,Equal:187,OSLeft:91,BracketLeft:219,OSRight:91,Backslash:220,BracketRight:221,ContextMenu:93,Backquote:192,NumLock:144,ScrollLock:145,Backspace:8,Tab:9,Enter:13,NumpadEnter:13,Escape:27,Delete:46,Home:36,PageUp:33,PageDown:34,ArrowLeft:37,ArrowUp:38,ArrowRight:39,ArrowDown:40,End:35,Insert:45,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,ShiftLeft:16,ShiftRight:16,ControlLeft:17,ControlRight:17,AltLeft:18,AltRight:18,MetaLeft:91,MetaRight:92,VolumeMute:181};var s=["ShiftRight","AltRight","ControlRight","Home","End","Insert","Delete","PageUp","PageDown","NumpadDivide","NumpadEnter","NumLock","Pause"];n.SendKeyMsg=function(e,t){if(null!=e){t||(t=window.event);var o,a,r=!1;if((n.UseExtendedKeyFlag||1==urlargs.extkeys)&&"string"==typeof t.code&&(t.code.startsWith("Arrow")||s.indexOf(t.code)>=0)&&(r=!0),!n.isWindowsBrowser||!n.checkAltGr(n,t,e))if(0==r&&t.code&&0==t.code.startsWith("NumPad")&&0==n.localKeyMap)null!=(o=(a=t).code.startsWith("Key")&&4==a.code.length?a.code.charCodeAt(3):a.code.startsWith("Digit")&&6==a.code.length?a.code.charCodeAt(5):a.code.startsWith("Numpad")&&7==a.code.length?a.code.charCodeAt(6)+48:i[a.code])&&n.SendKeyMsgKC(e,o,r);else 59==(o=t.keyCode)?o=186:173==o?o=189:61==o&&(o=187),n.SendKeyMsgKC(e,o,r)}};function u(e,t,o){var a=Date.now();return"number"==typeof o?(n.recordedSize+=o,n.shortToStr(e)+n.shortToStr(t)+n.intToStr(o)+n.intToStr(a>>32)+n.intToStr(32&a)):(n.recordedSize+=o.length,n.shortToStr(e)+n.shortToStr(t)+n.intToStr(o.length)+n.intToStr(a>>32)+n.intToStr(32&a)+o)}return n.checkAltGr=function(e,t,n){return e._altGrArmed&&(e._altGrArmed=!1,clearTimeout(e._altGrTimeout),"AltRight"===t.code&&t.timeStamp-e._altGrCtrlTime<50)?(e.SendKeyMsgKC(n,225,!1),!0):"ControlLeft"===t.code&&!(17 in e.pressedKeys)&&(e._altGrArmed=!0,e._altGrCtrlTime=t.timeStamp,1==n)&&(e._altGrTimeout=setTimeout(e._handleAltGrTimeout.bind(e),100),!0)},n._handleAltGrTimeout=function(){n._altGrArmed=!1,clearTimeout(n._altGrTimeout),n.SendKeyMsgKC(1,17,!1)},n.SendRemoteInputLock=function(e){n.send(String.fromCharCode(0,87,0,5,e))},n.SendMessage=function(e){3==n.State&&n.send(String.fromCharCode(0,17)+n.shortToStr(4+e.length)+e)},n.SendKeyMsgKC=function(e,t,o){if(3==n.State)if("object"==typeof e)for(var a in e)n.SendKeyMsgKC(e[a][0],e[a][1],e[a][2]);else{if(1==e)-1==n.pressedKeys.indexOf(t)&&n.pressedKeys.unshift(t);else if(2==e){-1!=(a=n.pressedKeys.indexOf(t))&&n.pressedKeys.splice(a,1)}n.debugmode>0&&console.log("Sending Key "+t+", action "+e);var r=e-1;o&&(r=1==r?3:4),n.send(String.fromCharCode(0,n.InputType.KEY,0,6,r,t))}},n.SendStringUnicode=function(e){if(3==n.State)for(var t=0;t<e.length;t++)n.send(String.fromCharCode(0,n.InputType.KEYUNICODE,0,7,0)+ShortToStr(e.charCodeAt(t))),n.send(String.fromCharCode(0,n.InputType.KEYUNICODE,0,7,1)+ShortToStr(e.charCodeAt(t)))},n.SendKeyUnicode=function(e,t){3==n.State&&(n.debugmode>0&&console.log("Sending UnicodeKey "+t+", action "+e),n.send(String.fromCharCode(0,n.InputType.KEYUNICODE,0,7,e-1)+ShortToStr(t)))},n.sendcad=function(){n.SendCtrlAltDelMsg()},n.SendCtrlAltDelMsg=function(){3==n.State&&n.send(String.fromCharCode(0,n.InputType.CTRLALTDEL,0,4))},n.SendEscKey=function(){3==n.State&&n.send(String.fromCharCode(0,n.InputType.KEY,0,6,0,27,0,n.InputType.KEY,0,6,1,27))},n.SendStartMsg=function(){n.SendKeyMsgKC(n.KeyAction.EXDOWN,91),n.SendKeyMsgKC(n.KeyAction.EXUP,91)},n.SendCharmsMsg=function(){n.SendKeyMsgKC(n.KeyAction.EXDOWN,91),n.SendKeyMsgKC(n.KeyAction.DOWN,67),n.SendKeyMsgKC(n.KeyAction.UP,67),n.SendKeyMsgKC(n.KeyAction.EXUP,91)},n.SendTouchMsg1=function(e,t,o,a){3==n.State&&n.send(String.fromCharCode(0,n.InputType.TOUCH)+n.shortToStr(14)+String.fromCharCode(1,e)+n.intToStr(t)+n.shortToStr(o)+n.shortToStr(a))},n.SendTouchMsg2=function(e,t){var o,a="";for(var r in n.TouchArray)r==e?o=t:1==n.TouchArray[r].f?(o=65542,n.TouchArray[r].f=3,"START"+r):2==n.TouchArray[r].f?(o=262144,"STOP"+r):o=131078,a+=String.fromCharCode(r)+n.intToStr(o)+n.shortToStr(n.TouchArray[r].x)+n.shortToStr(n.TouchArray[r].y),2==n.TouchArray[r].f&&delete n.TouchArray[r];3==n.State&&n.send(String.fromCharCode(0,n.InputType.TOUCH)+n.shortToStr(5+a.length)+String.fromCharCode(2)+a),0==Object.keys(n.TouchArray).length&&null!=n.touchtimer&&(clearInterval(n.touchtimer),n.touchtimer=null)},n.SendMouseMsg=function(e,t){if(3==n.State&&null!=e&&null!=n.Canvas){if(!t)t=window.event;var o=n.Canvas.canvas.height/n.CanvasId.clientHeight,a=n.Canvas.canvas.width/n.CanvasId.clientWidth,r=n.GetPositionOfControl(n.Canvas.canvas),i=(t.pageX-r[0])*a,s=(t.pageY-r[1])*o;if(t.addx&&(i+=t.addx),t.addy&&(s+=t.addy),i>=0&&i<=n.Canvas.canvas.width&&s>=0&&s<=n.Canvas.canvas.height){var c=0,u=0;e==n.KeyAction.UP||e==n.KeyAction.DOWN?t.which?c=1==t.which?n.MouseButton.LEFT:2==t.which?n.MouseButton.MIDDLE:n.MouseButton.RIGHT:"number"==typeof t.button&&(c=0==t.button?n.MouseButton.LEFT:1==t.button?n.MouseButton.MIDDLE:n.MouseButton.RIGHT):e==n.KeyAction.SCROLL&&(t.detail?u=120*t.detail*-1:t.wheelDelta&&(u=3*t.wheelDelta)),!0===n.SwapMouse&&(c==n.MouseButton.LEFT?c=n.MouseButton.RIGHT:c==n.MouseButton.RIGHT&&(c=n.MouseButton.LEFT)),n.ReverseMouseWheel&&(u*=-1);var l="";if(e==n.KeyAction.DBLCLICK)l=String.fromCharCode(0,n.InputType.MOUSE,0,10,0,136,i/256&255,255&i,s/256&255,255&s);else if(e==n.KeyAction.SCROLL){var d=0,h=0;u<0?(d=255-(Math.abs(u)>>8),h=255-(255&Math.abs(u))):(d=u>>8,h=255&u),l=String.fromCharCode(0,n.InputType.MOUSE,0,12,0,0,i/256&255,255&i,s/256&255,255&s,d,h)}else l=String.fromCharCode(0,n.InputType.MOUSE,0,10,0,e==n.KeyAction.DOWN?c:2*c&255,i/256&255,255&i,s/256&255,255&s);n.Action==n.KeyAction.NONE?0==n.Alternate||n.ipad?(n.send(l),n.Alternate=1):n.Alternate=0:n.send(l)}}},n.GetDisplayNumbers=function(){n.send(String.fromCharCode(0,11,0,4))},n.SetDisplay=function(e){n.send(String.fromCharCode(0,12,0,6,e>>8,255&e))},n.intToStr=function(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,255&e)},n.shortToStr=function(e){return String.fromCharCode(e>>8&255,255&e)},n.onResize=function(){0!=n.ScreenWidth&&0!=n.ScreenHeight&&(n.Canvas.canvas.width==n.ScreenWidth&&n.Canvas.canvas.height==n.ScreenHeight||(n.FirstDraw&&(n.Canvas.canvas.width=n.ScreenWidth,n.Canvas.canvas.height=n.ScreenHeight,n.Canvas.fillRect(0,0,n.ScreenWidth,n.ScreenHeight),null!=n.onScreenSizeChange&&n.onScreenSizeChange(n,n.ScreenWidth,n.ScreenHeight,n.CanvasId)),n.FirstDraw=!1,n.debugmode>1&&console.log("onResize: "+n.ScreenWidth+" x "+n.ScreenHeight)))},n.xxMouseInputGrab=!1,n.xxKeyInputGrab=!1,n.xxMouseMove=function(e){return 3==n.State&&n.SendMouseMsg(n.KeyAction.NONE,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},n.xxMouseUp=function(e){return 3==n.State&&n.SendMouseMsg(n.KeyAction.UP,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},n.xxMouseDown=function(e){return 3==n.State&&n.SendMouseMsg(n.KeyAction.DOWN,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},n.xxMouseDblClick=function(e){return 3==n.State&&n.SendMouseMsg(n.KeyAction.DBLCLICK,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},n.xxDOMMouseScroll=function(e){return 3!=n.State||(n.SendMouseMsg(n.KeyAction.SCROLL,e),!1)},n.xxMouseWheel=function(e){return 3!=n.State||(n.SendMouseMsg(n.KeyAction.SCROLL,e),!1)},n.xxKeyUp=function(e){return"Dead"!=e.key&&3==n.State&&("string"==typeof e.key&&1==e.key.length&&1!=e.ctrlKey&&1!=e.altKey&&0==n.remoteKeyMap?n.SendKeyUnicode(n.KeyAction.UP,e.key.charCodeAt(0)):n.SendKeyMsg(n.KeyAction.UP,e)),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},n.xxKeyDown=function(e){if("Dead"!=e.key&&3==n.State&&("string"!=typeof e.key||1!=e.key.length||1==e.ctrlKey||1==e.altKey||0!=n.remoteKeyMap))return n.SendKeyMsg(n.KeyAction.DOWN,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},n.xxKeyPress=function(e){return"Dead"!=e.key&&3==n.State&&"string"==typeof e.key&&1==e.key.length&&1!=e.ctrlKey&&1!=e.altKey&&0==n.remoteKeyMap&&n.SendKeyUnicode(n.KeyAction.DOWN,e.key.charCodeAt(0)),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},n.handleKeys=function(e){return 1!=n.stopInput&&3==desktop.State&&n.xxKeyPress(e)},n.handleKeyUp=function(e){if(1==n.stopInput||3!=desktop.State)return!1;if(n.firstUpKeys.length<5&&(n.firstUpKeys.push(e.keyCode),5==n.firstUpKeys.length)){var t=n.firstUpKeys.join(",");"16,17,91,91,16"!=t&&"16,17,18,91,92"!=t||(n.stopInput=!0)}return n.xxKeyUp(e)},n.handleKeyDown=function(e){return 1!=n.stopInput&&3==desktop.State&&n.xxKeyDown(e)},n.handleReleaseKeys=function(){var e=JSON.parse(JSON.stringify(n.pressedKeys));for(var t in e)n.SendKeyMsgKC(n.KeyAction.UP,e[t])},n.mousedblclick=function(e){return 1!=n.stopInput&&n.xxMouseDblClick(e)},n.mousedown=function(e){return 1!=n.stopInput&&n.xxMouseDown(e)},n.mouseup=function(e){return 1!=n.stopInput&&n.xxMouseUp(e)},n.mousemove=function(e){return 1!=n.stopInput&&n.xxMouseMove(e)},n.mousewheel=function(e){return 1!=n.stopInput&&n.xxMouseWheel(e)},n.xxMsTouchEvent=function(e){if(4!=e.originalEvent.pointerType){if(e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),"MSPointerDown"==e.type||"MSPointerMove"==e.type||"MSPointerUp"==e.type){var t=0,o=e.originalEvent.pointerId%256,a=e.offsetX*(Canvas.canvas.width/n.CanvasId.clientWidth),r=e.offsetY*(Canvas.canvas.height/n.CanvasId.clientHeight);"MSPointerDown"==e.type?t=65542:"MSPointerMove"==e.type?t=131078:"MSPointerUp"==e.type&&(t=262144),n.TouchArray[o]||(n.TouchArray[o]={x:a,y:r}),n.SendTouchMsg2(o,t),"MSPointerUp"==e.type&&delete n.TouchArray[o]}else alert(e.type);return!0}},n.xxTouchStart=function(e){if(3==n.State)if(e.preventDefault&&e.preventDefault(),0==n.touchenabled||1==n.touchenabled){if(e.originalEvent.touches.length>1)return;var t=e.originalEvent.touches[0];e.which=1,n.LastX=e.pageX=t.pageX,n.LastY=e.pageY=t.pageY,n.SendMouseMsg(KeyAction.DOWN,e)}else{var o=n.GetPositionOfControl(Canvas.canvas);for(var a in e.originalEvent.changedTouches)if(e.originalEvent.changedTouches[a].identifier){var r=e.originalEvent.changedTouches[a].identifier%256;n.TouchArray[r]||(n.TouchArray[r]={x:(e.originalEvent.touches[a].pageX-o[0])*(Canvas.canvas.width/n.CanvasId.clientWidth),y:(e.originalEvent.touches[a].pageY-o[1])*(Canvas.canvas.height/n.CanvasId.clientHeight),f:1})}Object.keys(n.TouchArray).length>0&&null==touchtimer&&(n.touchtimer=setInterval(function(){n.SendTouchMsg2(256,0)},50))}},n.xxTouchMove=function(e){if(3==n.State)if(e.preventDefault&&e.preventDefault(),0==n.touchenabled||1==n.touchenabled){if(e.originalEvent.touches.length>1)return;var t=e.originalEvent.touches[0];e.which=1,n.LastX=e.pageX=t.pageX,n.LastY=e.pageY=t.pageY,n.SendMouseMsg(n.KeyAction.NONE,e)}else{var o=n.GetPositionOfControl(Canvas.canvas);for(var a in e.originalEvent.changedTouches)if(e.originalEvent.changedTouches[a].identifier){var r=e.originalEvent.changedTouches[a].identifier%256;n.TouchArray[r]&&(n.TouchArray[r].x=(e.originalEvent.touches[a].pageX-o[0])*(n.Canvas.canvas.width/n.CanvasId.clientWidth),n.TouchArray[r].y=(e.originalEvent.touches[a].pageY-o[1])*(n.Canvas.canvas.height/n.CanvasId.clientHeight))}}},n.xxTouchEnd=function(e){if(3==n.State)if(e.preventDefault&&e.preventDefault(),0==n.touchenabled||1==n.touchenabled){if(e.originalEvent.touches.length>1)return;e.which=1,e.pageX=LastX,e.pageY=LastY,n.SendMouseMsg(KeyAction.UP,e)}else for(var t in e.originalEvent.changedTouches)if(e.originalEvent.changedTouches[t].identifier){var o=e.originalEvent.changedTouches[t].identifier%256;n.TouchArray[o]&&(n.TouchArray[o].f=2)}},n.GrabMouseInput=function(){if(1!=n.xxMouseInputGrab){var e=n.CanvasId;e.onmousemove=n.xxMouseMove,e.onmouseup=n.xxMouseUp,e.onmousedown=n.xxMouseDown,e.touchstart=n.xxTouchStart,e.touchmove=n.xxTouchMove,e.touchend=n.xxTouchEnd,e.MSPointerDown=n.xxMsTouchEvent,e.MSPointerMove=n.xxMsTouchEvent,e.MSPointerUp=n.xxMsTouchEvent,navigator.userAgent.match(/mozilla/i)?e.DOMMouseScroll=n.xxDOMMouseScroll:e.onmousewheel=n.xxMouseWheel,n.xxMouseInputGrab=!0}},n.UnGrabMouseInput=function(){if(0!=n.xxMouseInputGrab){var e=n.CanvasId;e.onmousemove=null,e.onmouseup=null,e.onmousedown=null,e.touchstart=null,e.touchmove=null,e.touchend=null,e.MSPointerDown=null,e.MSPointerMove=null,e.MSPointerUp=null,navigator.userAgent.match(/mozilla/i)?e.DOMMouseScroll=null:e.onmousewheel=null,n.xxMouseInputGrab=!1}},n.GrabKeyInput=function(){1!=n.xxKeyInputGrab&&(document.onkeyup=n.xxKeyUp,document.onkeydown=n.xxKeyDown,document.onkeypress=n.xxKeyPress,c,n.xxKeyInputGrab=!0)},n.UnGrabKeyInput=function(){0!=n.xxKeyInputGrab&&(document.onkeyup=null,document.onkeydown=null,document.onkeypress=null,n.xxKeyInputGrab=!1)},n.GetPositionOfControl=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},n.crotX=function(e,t){return 0==n.rotation?e:1==n.rotation?t:2==n.rotation?n.Canvas.canvas.width-e:3==n.rotation?n.Canvas.canvas.height-t:void 0},n.crotY=function(e,t){return 0==n.rotation?t:1==n.rotation?n.Canvas.canvas.width-e:2==n.rotation?n.Canvas.canvas.height-t:3==n.rotation?e:void 0},n.rotX=function(e,t){return 0==n.rotation||1==n.rotation?e:2==n.rotation?e-n.Canvas.canvas.width:3==n.rotation?e-n.Canvas.canvas.height:void 0},n.rotY=function(e,t){return 0==n.rotation||3==n.rotation?t:1==n.rotation?t-n.Canvas.canvas.width:2==n.rotation?t-n.Canvas.canvas.height:void 0},n.tcanvas=null,n.setRotation=function(e){for(;e<0;)e+=4;var t=e%4;if(t==n.rotation)return!0;var o=n.Canvas.canvas.width,a=n.Canvas.canvas.height;1!=n.rotation&&3!=n.rotation||(o=n.Canvas.canvas.height,a=n.Canvas.canvas.width),null==n.tcanvas&&(n.tcanvas=document.createElement("canvas"));var r=n.tcanvas.getContext("2d");return r.setTransform(1,0,0,1,0,0),r.canvas.width=o,r.canvas.height=a,r.rotate(-90*n.rotation*Math.PI/180),0==n.rotation&&r.drawImage(n.Canvas.canvas,0,0),1==n.rotation&&r.drawImage(n.Canvas.canvas,-n.Canvas.canvas.width,0),2==n.rotation&&r.drawImage(n.Canvas.canvas,-n.Canvas.canvas.width,-n.Canvas.canvas.height),3==n.rotation&&r.drawImage(n.Canvas.canvas,0,-n.Canvas.canvas.height),0!=n.rotation&&2!=n.rotation||(n.Canvas.canvas.height=o,n.Canvas.canvas.width=a),1!=n.rotation&&3!=n.rotation||(n.Canvas.canvas.height=a,n.Canvas.canvas.width=o),n.Canvas.setTransform(1,0,0,1,0,0),n.Canvas.rotate(90*t*Math.PI/180),n.rotation=t,n.Canvas.drawImage(n.tcanvas,n.rotX(0,0),n.rotY(0,0)),n.ScreenWidth=n.Canvas.canvas.width,n.ScreenHeight=n.Canvas.canvas.height,null!=n.onScreenSizeChange&&(console.log("s4",n.ScreenWidth,n.ScreenHeight),n.onScreenSizeChange(n,n.ScreenWidth,n.ScreenHeight,n.CanvasId)),!0},n.StartRecording=function(){null==n.recordedData&&n.CanvasId.toBlob(function(e){var t=new FileReader;t.readAsArrayBuffer(e),t.onload=function(e){for(var o="",a=new Uint8Array(t.result),r=a.byteLength,i=0;i<r;i++)o+=String.fromCharCode(a[i]);n.recordedData=[],n.recordedStart=Date.now(),n.recordedSize=0,n.recordedData.push(u(1,0,JSON.stringify({magic:"MeshCentralRelaySession",ver:1,time:(new Date).toLocaleString(),protocol:2}))),n.recordedData.push(u(2,1,n.shortToStr(7)+n.shortToStr(8)+n.shortToStr(n.ScreenWidth)+n.shortToStr(n.ScreenHeight)));var s=8+o.length;s>65e3?n.recordedData.push(u(2,1,n.shortToStr(27)+n.shortToStr(8)+n.intToStr(s)+n.shortToStr(3)+n.shortToStr(0)+n.shortToStr(0)+n.shortToStr(0)+o)):n.recordedData.push(u(2,1,n.shortToStr(3)+n.shortToStr(s)+n.shortToStr(0)+n.shortToStr(0)+o))}})},n.StopRecording=function(){if(null!=n.recordedData){var e=n.recordedData;return e.push(u(3,0,"MeshCentralMCREC")),delete n.recordedData,delete n.recordedStart,delete n.recordedSize,e}},n.MuchTheSame=function(e,t){return Math.abs(e-t)<4},n.Debug=function(e){console.log(e)},n.getIEVersion=function(){var e=-1;if("Microsoft Internet Explorer"==navigator.appName){var t=navigator.userAgent;null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(t)&&(e=parseFloat(RegExp.$1))}return e},n.haltEvent=function(e){return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},n}