41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
from threading import Timer, Thread
|
|
from concurrent import futures
|
|
import time
|
|
|
|
import control.motorService_pb2 as motorService_pb2
|
|
import control.motorService_pb2_grpc as motorService_pb2_grpc
|
|
|
|
class MotorServicer(motorService_pb2_grpc.CarControlServicer):
|
|
def __init__(self, vehicle):
|
|
self.vehicle = vehicle
|
|
self._timer = None
|
|
|
|
def SetThrottle(self, request, context):
|
|
# gRPC streams currently don't work between python and android.
|
|
# If we don't get a response every 3 seconds, stop the car.
|
|
print('Setting throttle to: ' + str(request.throttle))
|
|
self.set_timeout(3)
|
|
self.vehicle.throttle = request.throttle
|
|
return motorService_pb2.ThrottleResponse(throttleSet=True)
|
|
|
|
def SetSteering(self, request, context):
|
|
print('Setting steering to: ' + str(request.steering))
|
|
self.vehicle.steering = request.steering
|
|
return motorService_pb2.SteeringResponse(steeringSet=True)
|
|
|
|
def set_timeout(self, min_timeout):
|
|
"""Stops the old timer and restarts it to the specified time.
|
|
|
|
min_timeout -- The minimum time that can be used for the timer.
|
|
"""
|
|
if self._timer is not None:
|
|
self._timer.cancel()
|
|
self._timer = Timer(min_timeout, self.timeout_elapsed)
|
|
self._timer.start()
|
|
|
|
def timeout_elapsed(self):
|
|
"""Election or heartbeat timeout has elapsed."""
|
|
print("Node timeout elapsed")
|
|
self.vehicle.stop()
|
|
|