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()