From 6c90bd5b50e421bac364793bbf69a118184f1f26 Mon Sep 17 00:00:00 2001 From: Bandinopla <71508858+bandinopla@users.noreply.github.com> Date: Thu, 28 Apr 2022 15:55:46 -0300 Subject: [PATCH] improving the docs and some cleanup --- README.md | 6 +++++ img/A.jpg | Bin 0 -> 13676 bytes img/B.jpg | Bin 0 -> 14334 bytes img/C.jpg | Bin 0 -> 12713 bytes img/cover.jpg | Bin 0 -> 16529 bytes py-src/app.py | 47 +----------------------------------- py-src/server/httpserver.py | 3 ++- src/App.js | 6 +++-- 8 files changed, 13 insertions(+), 49 deletions(-) create mode 100644 img/A.jpg create mode 100644 img/B.jpg create mode 100644 img/C.jpg create mode 100644 img/cover.jpg diff --git a/README.md b/README.md index c45f378..cb5a9aa 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,12 @@ PC-Remote is a python desktop app that runs on the PC you want to control, it will open a console window showing a QR code and a url, you must access that url from your phone to start controlling the mouse and keyboard. +| +| +| + + + # How it's made The server is written in Python and it uses [pyautogui](https://pyautogui.readthedocs.io/) to control the mouse and keyboard. It creates a WebSocket server and a simple HTTPServer used to deliver the front end app which is done in [React](https://reactjs.org/) diff --git a/img/A.jpg b/img/A.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d2e4d36bf09d7c30c71706cf667998317a63184a GIT binary patch literal 13676 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 literal 0 HcmV?d00001 diff --git a/img/B.jpg b/img/B.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2491ed28737c6c49341695e7a3c01b677148f1b5 GIT binary patch literal 14334 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 X;AS8wKmTB>jDIJ+{qtuC;?REphQYEg literal 0 HcmV?d00001 diff --git a/img/C.jpg b/img/C.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a116320bfba555e1e0015ffe0e4b78d9b65a4083 GIT binary patch literal 12713 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 H$vyuC*Qs?O literal 0 HcmV?d00001 diff --git a/img/cover.jpg b/img/cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b07d8c14d9522ae517a9265ef55491e70bb45950 GIT binary patch literal 16529 zcmeHN3piA3+g?toXj7<=LtEukNe&e;N(f2FA%`T1A=%0y#}P@{l}?C4Mox*TjEFKt zrO0v0F(l^*ISgjZ%)i!}!Hn$MU;nqSZ~x!F>spso#fYYpLsPLujZ$4`Jcr;^JAtBf`roq9!dNt@bbf zqdo(cE@a7PwP$1b6<}S;!nTx!`T`IG02U5#w$Oy>|5#Yr*f|z(E?l&j3mlNc3$U`V zv9YqVad5D+gQEk$`vCh=j%BOmcP!vDvg7>KoqzM`D~Sswc0PD6U|c=4M&a;@;6;m< zuUIK4w051Ol(dYZlJb_V+f+1nX=&^1*3~oFZ)#?4alq34h{I7wC#3U94^J=eQ$D^S zXF|`0ojV_X_1g8wsOTFpvFM~b$tkI6>31JyV{;zm<~`0YDt__uRmtl&r8W3>?`!Mo z8yed_wRd!Ob@%js{yID|Iz||um?T1Ru>fqeux28g6W3BOE>?DSHg--ZE*4gA@L*fY z&aqm4!Ll7joObSfzivLgkbmcu#0Sq8NhlZ(2^>CAy?FT=#kRFyq0r#S{#;1tYoHA@16#~Ng zZ*F*k84QR;C}agvnp-o)=DP@(qBBuW$v1iW{~9FkEdeQX_`iN+ zDzs%DF0qAhNx=`)2H`QaSJS!V) zr=-|6&%H9wec{@o0Tp#LAP9X#c5~2TDKvP@odNADe`ZqH%CkB5H+ux=h@2#tQ-Q@i z%%{Lx^tU6%?iXB&NDEp(`vf=yjDu;OP-s%OS?6AcrZ2l^!o`YBQsBRrhD^v}i4y!znsd=tjJkufa=Z3J_$Z^5Xb$o}`o5*C*gQxYkC zj)S395nhJP^?T*lWo8Z2R~dNn&TlQKPEEW&C$`ljZ}8|T4r;4 z#D=cmOM>S}1t&Hk8WqEeed}#Xblz#OZ6nE2fl$l)Ie8I9Dmlf^WuC7-vnF(*+3Jel ze1(9b%pZQeX2TRtQN(<#I%dC-7QjzG1a5CQOa;z(G#?`mJGO2zXY@x9ov z^cFIThrHa$4-wrJa+i{?AoC5rnNh;3s=u-WFDG}L>&&_J?i}K7kr8b1&lX4yjolSU zPO~W{-?X=PCMBKc&Q@O7EbH0V!y56d)>TBKYWV|Hk;?H$ffF_h$B&Sk&$NrE)CM?5 zO!D8P;KC@sE8>|GGOU1-FK#8*mmZ^qOjzP_=tvLol1g_!hQcqlq|eS@q$T

6%ZVHA&LK643e5!!b7CsvVw4!KH_IZ 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 literal 0 HcmV?d00001 diff --git a/py-src/app.py b/py-src/app.py index 4d96c6c..11caee3 100644 --- a/py-src/app.py +++ b/py-src/app.py @@ -1,27 +1,7 @@ - -from email.mime import image -import http.server -import socketserver # Establish the TCP Socket connections -import os -import socket -import pyautogui -import sys -import asyncio -from websockets import serve - import threading -from threading import Thread -from PIL import Image -import qrcode -import io - - -from utils import resource_path, get_ip from server.httpserver import startHTTPServer from server.websocketserver import startWebSocketServer - - if __name__ == "__main__": print(''' ------------------------------------------------------- @@ -34,29 +14,4 @@ a = threading.Thread(target=startHTTPServer) b = threading.Thread(target=startWebSocketServer) a.start() - b.start() - - - - -#//asyncio.run(main()) - -#//----------------------------------------------- -# def thishost( _thishost ): -# """Return the IP addresses of the current host.""" - -# if _thishost is None: -# try: -# _thishost = tuple(socket.gethostbyname_ex(socket.gethostname())[2]) -# except socket.gaierror: -# _thishost = tuple(socket.gethostbyname_ex('localhost')[2]) -# return _thishost - -# def resolve_host(host): -# data = socket.gethostbyname_ex(host) -# return data[2][0] - - -# hostname = socket.getfqdn() -# print("IP Address:", get_ip() ) - + b.start() \ No newline at end of file diff --git a/py-src/server/httpserver.py b/py-src/server/httpserver.py index 4a5bb5a..2ecc549 100644 --- a/py-src/server/httpserver.py +++ b/py-src/server/httpserver.py @@ -3,10 +3,11 @@ from utils import resource_path, get_ip import qrcode import io +import http.server PORT = 9000 - + class MyHttpRequestHandler(http.server.SimpleHTTPRequestHandler): def do_GET(self): if( self.path == "/"): diff --git a/src/App.js b/src/App.js index 7277bde..6147445 100644 --- a/src/App.js +++ b/src/App.js @@ -14,7 +14,7 @@ var server; const HOST = "ws://" + (document.location.hostname || "localhost") + ":8000"; function App() { - const [tab, setTab] = useState(1); + const [tab, setTab] = useState(0); const [error, setError] = useState(); const [connected, setConnected] = useState(false); @@ -41,7 +41,7 @@ function App() { const onServerError = ev => { - setError("Connection with the server app lost. Check your connection and see if the server app is open, then try refreshing the page.") + setError("Oops! Something went wrong.") } const onServerConnected = ev => { @@ -105,6 +105,8 @@ function App() { if( error ) { return

window.location.reload()}> + + {error}
click to refresh the page