forked from PSU-AVT/QuadHLFC
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontrolgw.py
37 lines (29 loc) · 976 Bytes
/
controlgw.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
import socket
import struct
import logging
import afproto
import evloop
import settings
class ControlGw(evloop.UdpSocketWatcher):
def __init__(self, host, port, controller):
evloop.FdWatcher.__init__(self)
self.controller = controller
# Create and bind socket
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.socket.bind((host, port))
self.setup_socket(self.socket)
def handle_read(self, fd):
data, addr = self.socket.recvfrom(2048)
cmd_id = struct.unpack('B', data[:1])[0]
data = data[1:]
self.handle_command(cmd_id, data, addr)
def handle_command(self, command_id, data, addr):
logging.debug("Got command %d of length %d" % (command_id, len(data)))
if self.controller == None:
return
if settings.ControlGw.command_id['Ping'] == command_id:
msg = struct.pack('B', settings.ControlGw.response_id['Pong'])
msg += data
self.socket.sendto(msg, addr)
else:
self.controller.send_msg(chr(command_id) + data)