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