{"id":2799,"date":"2023-10-03T17:37:38","date_gmt":"2023-10-03T23:37:38","guid":{"rendered":"http:\/\/egsclc.com\/?page_id=2799"},"modified":"2023-10-03T17:46:09","modified_gmt":"2023-10-03T23:46:09","slug":"ppt","status":"publish","type":"page","link":"http:\/\/egsclc.com\/index.php\/ppt\/","title":{"rendered":"PPT Control"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2799\" class=\"elementor elementor-2799\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5273c87 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5273c87\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bfc481c\" data-id=\"bfc481c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d373034 elementor-widget elementor-widget-html\" data-id=\"d373034\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!doctype html>\n\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n    <title>Mobile Control for PPT<\/title>\n    <meta name=\"description\" content=\"A Moblie friendly page for controlling PPT\">\n    <meta name=\"author\" content=\"Shuxin Qiao\">\n\n    <style>\n        html, body {width: auto!important; overflow-x: hidden!important;} \n        .background {\n            position: relative;\n            \n        }\n\n        .connect {\n            position: relative;\n            margin-top: 20px;\n            margin-bottom: 20px;\n        }\n\n        .status {\n            display: inline-block;\n            width: 100%;\n        }\n\n        .input {\n            width: 60%;\n            margin-top: 20px;\n            margin-bottom: 20px;\n        }\n\n        .vertical-center {\n            position: relative;\n            width: 100%;\n        }\n\n        .button-connect {\n            position: relative;\n            background-color: #04AA6D;\n            border: none;\n            font-size: 14px;\n            color: #FFFFFF;\n            padding-top: 6px;\n            padding-bottom: 6px;\n            padding-left: 20px;\n            padding-right: 20px;\n            margin-left: 20px;\n            text-align: center;\n            -webkit-transition-duration: 0.4s; \/* Safari *\/\n            transition-duration: 0.4s;\n            text-decoration: none;\n            overflow: hidden;\n            cursor: pointer;\n            border-radius: 15px;\n        }\n        .button-connect:after {\n            content: \"\";\n            background: #90EE90;\n            display: block;\n            position: absolute;\n            padding-top: 300%;\n            padding-left: 350%;\n            margin-left: -20px!important;\n            margin-top: -120%;\n            opacity: 0;\n            transition: all 0.8s\n        }\n        .button-connect:active:after {\n            padding: 0;\n            margin: 0;\n            opacity: 1;\n            transition: 0s\n        }\n\n        .button {\n            position: relative;\n            background-color: #04a8c5;\n            border: none;\n            font-size: 28px;\n            color: #FFFFFF;\n            padding-top: 60px;\n            padding-right: 20px;\n            padding-bottom: 60px;\n            padding-left: 20px;\n            margin-top: 10px;\n            margin-bottom: 10px;\n            width: 100%;\n            text-align: center;\n            -webkit-transition-duration: 0.4s; \/* Safari *\/\n            transition-duration: 0.4s;\n            text-decoration: none;\n            overflow: hidden;\n            cursor: pointer;\n            border-radius: 15px;\n        }\n        .button:after {\n            content: \"\";\n            background: #90EE90;\n            display: block;\n            position: absolute;\n            padding-top: 300%;\n            padding-left: 350%;\n            margin-left: -20px!important;\n            margin-top: -120%;\n            opacity: 0;\n            transition: all 0.8s\n        }\n        .button:active:after {\n            padding: 0;\n            margin: 0;\n            opacity: 1;\n            transition: 0s\n        }\n    <\/style>\n<\/head>\n\n<body>\n    <div class=\"background\">\n\n        <div class=\"connect\">\n            <div class=\"status\">\n                <h1>Server Status:<\/h1>\n                <h1 id=\"server_status\">Disconnected<\/h1>\n            <\/div>\n            \n            <input onfocus=\"this.value='184.68.254.78:53183'\" value=\"XXX.XXX.XXX.XXX:XXXX\" class=\"input\" id=\"ip_address\">\n            <button class=\"button-connect\" onclick=\"Connect()\">Connect<\/button>\n        <\/div>\n\n        <div class=\"vertical-center\">\n            <button class=\"button\" onclick=\"PreviousPage()\">Previous<\/button>\n            <button class=\"button\" onclick=\"NextPage()\">Next<\/button>\n        <\/div>\n            \n    <\/div>\n\n    <script>\n        var run = function (ip_address) {\n            var status = document.getElementById(\"server_status\");\n            \n            window.ws = new WebSocket(\"ws:\/\/\" + ip_address);\n\n            \/\/ listening\n            ws.onmessage = function (eve) {\n                console.log(eve.data);\n            }\n\n            \/\/ Socket status\n            ws.onopen = function () {\n                status.innerHTML = \"Connected\";\n                ws.send(\"Connected\");\n            }\n\n            \/\/ Socket close\n            ws.onclose = function () {\n                status.innerHTML = \"Disconnected\";\n            }\n\n        }\n\n        function Connect() {\n            let ip_address = document.getElementById(\"ip_address\").value;\n\n            if (useRegex(ip_address)) {\n                run(ip_address);\n            } else {\n                alert(\"Wrong IP format, please check.\");\n            }\n        }\n\n        function useRegex(input) {\n            let regex = \/\\b(?:(?:2(?:[0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9])\\.){3}(?:(?:2([0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9]))\\b:[0-9]+\/i;\n            return regex.test(input);\n        }\n\n        function PreviousPage() {\n            ws.send(\"Previous\");\n        }\n\n        function NextPage() {\n            ws.send(\"Next\");\n        }\n    <\/script>\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Mobile Control for PPT Server Status: Disconnected Connect Previous Next<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-2799","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/egsclc.com\/index.php\/wp-json\/wp\/v2\/pages\/2799","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/egsclc.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/egsclc.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/egsclc.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/egsclc.com\/index.php\/wp-json\/wp\/v2\/comments?post=2799"}],"version-history":[{"count":11,"href":"http:\/\/egsclc.com\/index.php\/wp-json\/wp\/v2\/pages\/2799\/revisions"}],"predecessor-version":[{"id":2811,"href":"http:\/\/egsclc.com\/index.php\/wp-json\/wp\/v2\/pages\/2799\/revisions\/2811"}],"wp:attachment":[{"href":"http:\/\/egsclc.com\/index.php\/wp-json\/wp\/v2\/media?parent=2799"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}