-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgon.py
67 lines (61 loc) · 2.29 KB
/
gon.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
import sys
from netlib import Server, Client
from joylib import JoyReader
# main.py [-s port1,port2]/[-c ip:port1,port2] --send/--receive
def receiveProcedure(networkEndpoint):
def decodePacket(packet):
data = int.from_bytes(packet,byteorder="big")
event = data & 0b11
item = (data & 0b11111100) >> 2
value = data >> 8
return (event,item,value)
writer = JoyWriter()
def receiveEvent(packet,client):
event,item,value = decodePacket(packet)
writer.writeEvent(event,item,value)
networkEndpoint.addPacketListener(receiveEvent)
input("press a key to close")
def sendProcedure(networkEndpoint):
def encodePacket(event,control,value):
number = event + (control << 2) + (value << 8)
return number.to_bytes(3,byteorder="big")
def sendEvent(e,c,v=0):
packet = encodePacket(e,c,v)
if type(networkEndpoint) is Server:
for c in networkEndpoint.clients:
networkEndpoint.sendPacket(c,packet)
else:
networkEndpoint.sendPacket(packet)
reader = JoyReader()
joysticks = reader.listJoysticks()
for j in range(len(joysticks)):
print(j,": ",joysticks[j])
i = int(input("Enter joystick id [0-%d]:"%(len(joysticks)-1)))
reader.attachJoystick(i)
reader.addEventCallback(sendEvent)
input("press a key to close")
reader.dispose()
if not len(sys.argv) == 4:
print("expected usage: main.py [-s port1,port2]/[-c ip:port1,port2] "\
"--send/--receive")
sys.exit()
if sys.argv[1] == "-c":
addr = sys.argv[2]
ip,port1,port2 = (addr.split(":")[0],\
int(addr.split(":")[1].split(",")[0]),\
int(addr.split(":")[1].split(",")[1]))
networkEndpoint = Client(ip,port1,port2,debug=True)
elif sys.argv[1] == "-s":
ports = sys.argv[2].split(",")
networkEndpoint = Server(int(ports[0]),int(ports[1]),debug=True)
else:
print("first argument should be either -s or -c")
sys.exit()
if sys.argv[3] == "--send":
sendProcedure(networkEndpoint)
elif sys.argv[3] == "--receive":
from joylib import JoyWriter
receiveProcedure(networkEndpoint)
else:
print("last argument shuold be either --send or --receive")
sys.exit()