From 66406ed739d52fcc65f0abd4ab351ea16a8991d4 Mon Sep 17 00:00:00 2001 From: Caleb Fontenot Date: Wed, 3 Jun 2020 14:15:09 -0500 Subject: [PATCH] Begin rewrite of socket connections --- Client.py | 7 ++-- Server.py | 100 ++++++++++++++++++++++++++---------------------------- 2 files changed, 53 insertions(+), 54 deletions(-) diff --git a/Client.py b/Client.py index 0fc52b1..89e6e51 100644 --- a/Client.py +++ b/Client.py @@ -13,10 +13,11 @@ MyVirtual = pyxinput.vController() client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((ip, port)) while True: - from_server = client.recv(8144) + from_server = client.makefile(mode='rb') #Decode Sever message - decodedServerData = pickle.loads(from_server) - print("Raw Data:", str(decodedServerData)) + unpickler = pickle.Unpickler(from_server) + decodedServerData = unpickler.load() + print("Raw Data:", decodedServerData) # pyxinput will only accept values one at a time, so we need to apply the itme in the dictionary one by one for event, state in decodedServerData.items(): MyVirtual.set_value(event, state) diff --git a/Server.py b/Server.py index e55743e..78431af 100644 --- a/Server.py +++ b/Server.py @@ -18,57 +18,55 @@ controllerData = "" controllerDataDict = {'AxisLx': 0, 'AxisLy': 0, 'AxisRx': 0, 'AxisRy': 0, 'BtnBack': 0, 'BtnStart': 0, 'BtnA': 0, 'BtnB': 0, 'BtnX': 0, 'BtnY': 0, 'BtnThumbL': 0, 'BtnThumbR': 0, 'BtnShoulderL': 0, 'BtnShoulderR': 0, 'Dpad': 0, 'TriggerL': 0, 'TriggerR': 0} #Lookup table to convert values from the "inputs" library lookup_table = {'ABS_X': 'AxisLx', 'ABS_Y': 'AxisLy', 'ABS_RX': 'AxisRx', 'ABS_RY': 'AxisRy', 'BTN_SELECT': 'BtnBack', 'BTN_START': 'BtnStart', 'BTN_SOUTH': 'BtnA', 'BTN_EAST': 'BtnB', 'BTN_NORTH': 'BtnX', 'BTN_WEST': 'BtnY', 'BTN_THUMBL': 'BtnThumbL', 'BTN_THUMBR': 'BtnThumbR', 'BTN_TL': 'BtnShoulderL', 'BTN_TR': 'BtnShoulderR', 'ABS_Z': 'TriggerL', 'ABS_RZ': 'TriggerR'} -print("Waiting for connection...") +#print("Waiting for connection...") def sendData(): #Pickle for transmittion - encodedControllerData = pickle.dumps(controllerDataDict) - #print(encodedControllerData) - conn.send(encodedControllerData) -with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - s.bind((ip, port)) - s.listen(1) - #s.setblocking(False) - conn, addr = s.accept() - with conn: - print(colored('Connected by', 'red'), addr) + encodedControllerData = pickle.Pickler(controllerDataDict) + #print(encodedControllerData) + pickler.dump(encodedControllerData) + file.flush() +#Create Socket +conn = socket.create_server((ip, port)) +file = conn.makefile(mode='wb') +pickler = pickle.Pickler(file) +#print(colored('Connected by', 'red'), addr) +print(controllerDataDict) +with conn: + while True: + events = get_gamepad() + for event in events: + #controllerDataTuple = event.ev_type, event.code, event.state + controllerDataTuple = event.code, event.state + controllerData = controllerDataTuple + #print("controllerData is a", type(controllerData)) + print(controllerData) print(controllerDataDict) - while True: - events = get_gamepad() - for event in events: - #controllerDataTuple = event.ev_type, event.code, event.state - controllerDataTuple = event.code, event.state - controllerData = controllerDataTuple - #print("controllerData is a", type(controllerData)) - print(controllerData) - print(controllerDataDict) - #If event.code is SYN_REPORT, ignore it - if event.code == "SYN_REPORT": - continue - if event.code == "BTN_MODE": - print(colored('The home button is unimplemented on PYXinput, ignoring', 'red')) - continue - #Ugh, PYXinput and inputs handle the Dpad in the most annoying way possible - elif event.code == "ABS_HAT0X": - #if ABS_HAT0X is 0, then there is no input on the dpad - if event.state == 0: - controllerDataDict['Dpad'] = 0 #No input - if event.state == 1: - controllerDataDict['Dpad'] = 8 #Right - if event.state == -1: - controllerDataDict['Dpad'] = 4 #Left - sendData() - elif event.code == "ABS_HAT0Y": - #if ABS_HAT0Y is 0, then there is no input on the dpad - if event.state == 0: - controllerDataDict['Dpad'] = 0 #No input - if event.state == 1: - controllerDataDict['Dpad'] = 2 #Down - if event.state == -1: - controllerDataDict['Dpad'] = 1 #Up - sendData() - else: - # Add values to controllerDataDict - controllerDataDict[lookup_table[str(event.code)]] = event.state - sendData() -#Execute everything -controllerLoop() + #If event.code is SYN_REPORT, ignore it + if event.code == "SYN_REPORT": + continue + if event.code == "BTN_MODE": + print(colored('The home button is unimplemented on PYXinput, ignoring', 'red')) + continue + #Ugh, PYXinput and inputs handle the Dpad in the most annoying way possible + elif event.code == "ABS_HAT0X": + #if ABS_HAT0X is 0, then there is no input on the dpad + if event.state == 0: + controllerDataDict['Dpad'] = 0 #No input + if event.state == 1: + controllerDataDict['Dpad'] = 8 #Right + if event.state == -1: + controllerDataDict['Dpad'] = 4 #Left + sendData() + elif event.code == "ABS_HAT0Y": + #if ABS_HAT0Y is 0, then there is no input on the dpad + if event.state == 0: + controllerDataDict['Dpad'] = 0 #No input + if event.state == 1: + controllerDataDict['Dpad'] = 2 #Down + if event.state == -1: + controllerDataDict['Dpad'] = 1 #Up + sendData() + else: + # Add values to controllerDataDict + controllerDataDict[lookup_table[str(event.code)]] = event.state + sendData()