forked from helloparthshah/StadiaWireless
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontroller.py
140 lines (127 loc) · 5.54 KB
/
controller.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import asyncio
from websockets import serve
import vgamepad as vg
import json
import os
import socket
from pystray import Icon as icon, Menu as menu, MenuItem as item
from PIL import Image
port = os.environ.get('PORT', '80')
gamepad = vg.VX360Gamepad()
def create_image():
# Open logo.png
image = Image.open("logo.png")
# Resize the image heigh 64 and preserve the aspect ratio
image.thumbnail((64, 64), Image.ANTIALIAS)
return image
async def handler(websocket):
async for message in websocket:
if message.startswith('{'):
message = json.loads(message)
gamepad.left_joystick(
int(message['lx']*32767), -int(message['ly']*32767))
gamepad.right_joystick(
int(message['rx']*32767), -int(message['ry']*32767))
if message['0'] == True:
gamepad.press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_A)
elif message['0'] == False:
gamepad.release_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_A)
if message['1'] == True:
gamepad.press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_B)
elif message['1'] == False:
gamepad.release_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_B)
if message['2'] == True:
gamepad.press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_X)
elif message['2'] == False:
gamepad.release_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_X)
if message['3'] == True:
gamepad.press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_Y)
elif message['3'] == False:
gamepad.release_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_Y)
if message['4'] == True:
gamepad.press_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_LEFT_SHOULDER)
elif message['4'] == False:
gamepad.release_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_LEFT_SHOULDER)
if message['5'] == True:
gamepad.press_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_RIGHT_SHOULDER)
elif message['5'] == False:
gamepad.release_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_RIGHT_SHOULDER)
gamepad.left_trigger(int(message['6']*255))
gamepad.right_trigger(int(message['7']*255))
if message['8'] == True:
gamepad.press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_BACK)
elif message['8'] == False:
gamepad.release_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_BACK)
if message['9'] == True:
gamepad.press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_START)
elif message['9'] == False:
gamepad.release_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_START)
if message['10'] == True:
gamepad.press_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_LEFT_THUMB)
elif message['10'] == False:
gamepad.release_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_LEFT_THUMB)
if message['11'] == True:
gamepad.press_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_RIGHT_THUMB)
elif message['11'] == False:
gamepad.release_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_RIGHT_THUMB)
if message['12'] == True:
gamepad.press_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_UP)
elif message['12'] == False:
gamepad.release_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_UP)
if message['13'] == True:
gamepad.press_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_DOWN)
elif message['13'] == False:
gamepad.release_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_DOWN)
if message['14'] == True:
gamepad.press_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_LEFT)
elif message['14'] == False:
gamepad.release_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_LEFT)
if message['15'] == True:
gamepad.press_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_RIGHT)
elif message['15'] == False:
gamepad.release_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_RIGHT)
if message['16'] == True:
gamepad.press_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_GUIDE)
elif message['16'] == False:
gamepad.release_button(
button=vg.XUSB_BUTTON.XUSB_GAMEPAD_GUIDE)
gamepad.update()
async def main():
print(socket.gethostbyname(socket.gethostname()))
with open('ip.js', 'w') as f:
f.write("let ip=\"" + socket.gethostbyname(socket.gethostname())+"\";")
print("Connecting to: " + '0.0.0.0' + ":" + str(port))
async with serve(handler, '0.0.0.0', port):
while icon.visible == True:
await asyncio.sleep(1)
# await asyncio.Future()
def exit(icon, item):
icon.visible = False
icon.stop()
def setup(icon):
# set visible to true to show the icon
icon.visible = True
asyncio.run(main())
icon('test', create_image(), menu=menu(
item(
'Exit',
action=exit
))).run_detached(setup=setup)