Initialisation
This commit is contained in:
commit
58525ee3c1
21
ssl/cert.pem
Normal file
21
ssl/cert.pem
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDgTCCAmmgAwIBAgIUVyGdBuDwaKQLcWW2XwCKZqhhhfMwDQYJKoZIhvcNAQEL
|
||||||
|
BQAwUDELMAkGA1UEBhMCRlIxDjAMBgNVBAgMBVBhcmlzMQ4wDAYDVQQHDAVQYXJp
|
||||||
|
czEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMB4XDTI0MTEyMzE3
|
||||||
|
MjU0M1oXDTI1MTEyMzE3MjU0M1owUDELMAkGA1UEBhMCRlIxDjAMBgNVBAgMBVBh
|
||||||
|
cmlzMQ4wDAYDVQQHDAVQYXJpczEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ
|
||||||
|
dHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwtfNa1MqyIM2
|
||||||
|
6LozipkFa8m/kNb09V44uRnlnMxuD5+uzv0IW0DOHyYNmcmU9ceARlhwp01BOwQc
|
||||||
|
AygMDlhJ19R2DA2VsqS1HdbO15l6X0pMtbu1ftwVFsIOIz2x3bIbh715Cb49Zdj+
|
||||||
|
H7TZcIi+ENVJlZdWqmvtCGzerzdOzCU1sI7kZQlH3awGY7jeMdv/YwwkSlBQ8KuO
|
||||||
|
3snXHcJl4UdzuWI8An6Mq7Z1mcL+RUDCAOUREZaoSbzbH1s/8HBrzENWfbvTxgu+
|
||||||
|
Tf4y4tk0qs0ZJWPtC/w+V2wfXxCSzHJbqcL93z/bAY00XY+dpQyJdaXRETYYimpE
|
||||||
|
T+sPeHr+wQIDAQABo1MwUTAdBgNVHQ4EFgQUp7zxpRlQ3xKOuQywYuVpKaMg7HMw
|
||||||
|
HwYDVR0jBBgwFoAUp7zxpRlQ3xKOuQywYuVpKaMg7HMwDwYDVR0TAQH/BAUwAwEB
|
||||||
|
/zANBgkqhkiG9w0BAQsFAAOCAQEAecDaMLcLbbdKWfkMYscA9Dv8EoMQJxyFtzmx
|
||||||
|
NmMCW4uj907crCnD0DUXDisQZftApEUd1XxghG/si2lS3pE5108zHH0CGY9oWvup
|
||||||
|
XZL78JoTiFOjekuoHW7U4Y9Wc/0lQGFYQlPKPVtY2aLS2gHRmL/3ZPi/ovkdf27r
|
||||||
|
aG2sbUULAKwnEk1/ZedFiKQC2BAgluxuWJY2dJa2SsBfKjntVuozHpKqGFkvEGxS
|
||||||
|
SN0Ry1/bQOkjaxPooeImCABsOSXSbwKjbEDN6d3WAhACMENm8E9ZdbY5EF3Dbtl3
|
||||||
|
1MvVs9HZ7jGeYh/SJs4blr1nX3lsu0aoF+3n3JiozgnlAxiAiA==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
28
ssl/key.pem
Normal file
28
ssl/key.pem
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDC181rUyrIgzbo
|
||||||
|
ujOKmQVryb+Q1vT1Xji5GeWczG4Pn67O/QhbQM4fJg2ZyZT1x4BGWHCnTUE7BBwD
|
||||||
|
KAwOWEnX1HYMDZWypLUd1s7XmXpfSky1u7V+3BUWwg4jPbHdshuHvXkJvj1l2P4f
|
||||||
|
tNlwiL4Q1UmVl1aqa+0IbN6vN07MJTWwjuRlCUfdrAZjuN4x2/9jDCRKUFDwq47e
|
||||||
|
ydcdwmXhR3O5YjwCfoyrtnWZwv5FQMIA5RERlqhJvNsfWz/wcGvMQ1Z9u9PGC75N
|
||||||
|
/jLi2TSqzRklY+0L/D5XbB9fEJLMclupwv3fP9sBjTRdj52lDIl1pdERNhiKakRP
|
||||||
|
6w94ev7BAgMBAAECggEAHq3quTG+/JQWnwYErBfkn+CEQqrqJsGHhnPSsQIKeXjQ
|
||||||
|
BmUWvgGiAwsTnKm+RAX+B3WRBXLXaNLAk2monlCeDfc1ADhaYCbpotFqP835lAwH
|
||||||
|
sJzmGtvOEUeMgNWLzmfnSFQX/SYAlmsYtobcLwlE/jMLU1vhSFPWnps/5BB+Howd
|
||||||
|
6p+nC2mAjl6Xk7bvFg9Mi5WBSiLQ2KY5A5fkf/sj3jMFtT/ADykVi+wovRdnFEA9
|
||||||
|
xrbgx33Ox32YHu9gitmv5C2UxxWk0+KBtb/QpW0ROqAlY6Y08m9ttIzwv1GbBEOS
|
||||||
|
uS8jf5lq6I/ZvZh0gvUAp7OxvdWbVQIi5aAgIPT8HQKBgQDsPdd3iuaLxNY2kYoZ
|
||||||
|
VciEKtKeDPOxjk9D7H+VUROXFQmGM/nF0tleylymd4RbkSkRAudg49NTAl3Alhm6
|
||||||
|
H0bsskKcflk8MlkQBh3sp/R6/Ou51q/N78f1Lz5CP4y19fIu6XlYC3082zyc9xj6
|
||||||
|
XeXitrdqfUTxEbHB5ywUaDVOrQKBgQDTI5PHM4SMG+66AEA58olRFgzpCk9+T0/9
|
||||||
|
ecGpbpH45RCmOO6ljyigII53YBzBiTj6EklKbpWMp79eTGoUAsjptgu+DkjGfPjE
|
||||||
|
amIlltIHVGanJnmcBWo7xgdkPVtH5NTOwN/E1M95bZmzBOOBTKIZcl8Mjh2rA14E
|
||||||
|
s1SqeQPW5QKBgQC796SmICW6Ff7fYkPATsoBp1T3npSTtQiKofUNqHnu3zU5y8cz
|
||||||
|
yMVdr6OybCwq8z/6ohXZuMxfIuXXo1aLCfHTyS5I+BsmU2Ub49IRh7110iH5NsGh
|
||||||
|
GOU/x7xA1/Gsoil1fB0pmdKnBkWfGtiL9QRBtGIR3+Rn701BXB9tiVDI7QKBgFZJ
|
||||||
|
QNh0zmNv+uTau2SzILkZmNcYFpqZESiWvLVgcZlVC7PSqnzQf5rJE0/n4HibesR/
|
||||||
|
+qHHhaiA2W1RLzzUUoVol23paoZrhkLG8ytHcrf6HyWKTMKdV+frqxOlG4vLEckY
|
||||||
|
+5n2GoAWcWy+v7cUuV5K5ls8LRW5f4/ONfihEhedAoGAKgHDuzjayfnCsMqtzcS/
|
||||||
|
1tQH/KQrYEev/szDW7nnGPWRK06Sv4+N8n3nP3Kplc6WPtxmmMAJ12gOtGQ49tG4
|
||||||
|
Xa7WNpflF+dROw0psbaN0COh5BY90PnNIP7QNyQCxkVo+OAVOBfCFUzVMlc++iZ0
|
||||||
|
N6kfPnZhohhMIqeI7XIB20o=
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
121
templates/index.html
Normal file
121
templates/index.html
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Phone Mouse Controller</title>
|
||||||
|
<style>
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
height: 100dvh;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mouse {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 20px;
|
||||||
|
width: 95%;
|
||||||
|
margin-left: 2.5%;
|
||||||
|
border: 5px solid black;
|
||||||
|
height: 300px;
|
||||||
|
border-radius: 25px;
|
||||||
|
display: grid;
|
||||||
|
place-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#leftClick {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 330px;
|
||||||
|
width: 45%;
|
||||||
|
height: 50px;
|
||||||
|
margin-left: 2.5%;
|
||||||
|
border: 2px solid black;
|
||||||
|
border-radius: 15px;
|
||||||
|
font-weight: bold;
|
||||||
|
display: grid;
|
||||||
|
place-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mouse svg {
|
||||||
|
width: 50px
|
||||||
|
}
|
||||||
|
|
||||||
|
#textForm {
|
||||||
|
padding: 30px 2.5% 0 2.5%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 10px
|
||||||
|
}
|
||||||
|
#textForm textarea {
|
||||||
|
padding: 8px;
|
||||||
|
height: 200px;
|
||||||
|
border: 2px solid black;
|
||||||
|
border-radius: 15px;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
min-width: 100%;
|
||||||
|
}
|
||||||
|
#textForm input {
|
||||||
|
width: 45%;
|
||||||
|
height: 50px;
|
||||||
|
border-radius: 15px;
|
||||||
|
border: 2px solid black;
|
||||||
|
background: white;
|
||||||
|
align-self: end;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<script src="https://cdn.socket.io/4.0.0/socket.io.min.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<form id="textForm">
|
||||||
|
<textarea id="text" type="text" id="sendtext"></textarea>
|
||||||
|
<input type="submit" value="Send"/>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div id="leftClick">
|
||||||
|
Left Click
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="mouse">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"> <path d="M12 9V7M12 21C8.68629 21 6 18.3137 6 15V9C6 5.68629 8.68629 3 12 3C15.3137 3 18 5.68629 18 9V15C18 18.3137 15.3137 21 12 21Z" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </g></svg>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const socket = io();
|
||||||
|
|
||||||
|
if (window.DeviceOrientationEvent) {
|
||||||
|
window.addEventListener('deviceorientation', (event) => {
|
||||||
|
const data = {
|
||||||
|
alpha: event.alpha,
|
||||||
|
beta: event.beta,
|
||||||
|
gamma: event.gamma
|
||||||
|
};
|
||||||
|
socket.emit('orientation_data', data);
|
||||||
|
});
|
||||||
|
document.getElementById("leftClick").addEventListener('click', (event) => {
|
||||||
|
socket.emit('left');
|
||||||
|
})
|
||||||
|
document.getElementById("mouse").addEventListener('touchstart', (event) => {
|
||||||
|
socket.emit('touchstart');
|
||||||
|
})
|
||||||
|
document.getElementById("mouse").addEventListener('touchend', (event) => {
|
||||||
|
socket.emit('touchend');
|
||||||
|
})
|
||||||
|
document.getElementById("textForm").addEventListener('submit', (event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
socket.emit('text', document.getElementById("text").value);
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
alert('Device Orientation not supported on your device/browser.');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
19
templates/style.css
Normal file
19
templates/style.css
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
height: 100dvh;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mouse {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 95%;
|
||||||
|
margin-left: 2.5%;
|
||||||
|
border: 2px solid black;
|
||||||
|
border-bottom: 0px;
|
||||||
|
height: 450px;
|
||||||
|
border-radius: 150px 150px 0 0;
|
||||||
|
}
|
||||||
44
webserver.py
Normal file
44
webserver.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
from flask import Flask, render_template
|
||||||
|
from flask_socketio import SocketIO
|
||||||
|
import pyautogui
|
||||||
|
|
||||||
|
pyautogui.FAILSAFE = False
|
||||||
|
app = Flask(__name__)
|
||||||
|
socketio = SocketIO(app)
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
def index():
|
||||||
|
return render_template('index.html')
|
||||||
|
|
||||||
|
@socketio.on('text')
|
||||||
|
def handle_typewrite(text):
|
||||||
|
pyautogui.typewrite(text)
|
||||||
|
|
||||||
|
@socketio.on('touchstart')
|
||||||
|
def handle_mouseDown():
|
||||||
|
pyautogui.mouseDown()
|
||||||
|
|
||||||
|
@socketio.on('touchend')
|
||||||
|
def handle_mouseUp():
|
||||||
|
pyautogui.mouseUp()
|
||||||
|
|
||||||
|
@socketio.on('left')
|
||||||
|
def handle_leftClick():
|
||||||
|
pyautogui.click(button='right')
|
||||||
|
|
||||||
|
@socketio.on('orientation_data')
|
||||||
|
def handle_orientation_data(data):
|
||||||
|
|
||||||
|
alpha = data.get('alpha', 0)
|
||||||
|
beta = data.get('beta', 0)
|
||||||
|
gamma = data.get('gamma', 0)
|
||||||
|
|
||||||
|
sensitivity = 0.4
|
||||||
|
move_x = int(gamma * sensitivity)
|
||||||
|
move_y = -int(beta * sensitivity)
|
||||||
|
|
||||||
|
|
||||||
|
pyautogui.move(move_x, move_y)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
socketio.run(app, host='0.0.0.0', port=5000, ssl_context=('ssl/cert.pem', 'ssl/key.pem'))
|
||||||
Loading…
Reference in New Issue
Block a user