import time # time since last ping before deactivating/deleting BIKE_TIMEOUT = 60 BIKE_DELETE = 1800 # time before bike deletes itself # data structures class Point: def __init__(self, lat, long): self.longitude = long self.latitude = lat def toJSON(self): json_dict = {'longitude' : self.longitude, 'latitude' : self.latitude} return json_dict def setCoords(self, lat, long): self.longitude = long self.latitude = lat def move(self, d_lat, d_long): self.longitude += d_long self.latitude += d_lat def __str__(self): return f"{self.longitude},{self.latitude}" class Clue(Point): def __init__(self, lat, long, name, info, status): self.longitude = long self.latitude = lat self.name = name self.info = info self.status = status # UNVISITED | ASSIGNED | VISITED def visit(self): self.status = "VISITED" def toJSON(self): json_dict = {'longitude' : self.longitude, 'latitude' : self.latitude, 'clue_name' : self.name.replace('"', "'"), 'clue_info' : self.info.replace('"', "'"), 'clue_status' : self.status} return json_dict class Bike(Point): def __init__(self, lat, long, name, status): self.longitude = long self.latitude = lat self.name = name self.last_contact = time.time() self.target = "N/A" self.route_to_next = [] # list of coords if target isnt' N/A self.status = status # ACTIVE | INACTIVE def setTarget(self, clue_name): self.target = clue_name def ping(self): if self.status != "ACTIVE": updateRoutes() self.status = "ACTIVE" self.last_contact = time.time() def checkStatus(self): if time.time() - self.last_contact > BIKE_TIMEOUT: self.status = "INACTIVE" self.target = "N/A" if time.time() - self.last_contact > BIKE_DELETE: return -1 return 0 def toJSON(self): json_dict = {'longitude' : self.longitude, 'latitude' : self.latitude, 'time_since_last_contact' : time.time()-self.last_contact, 'team_name' : self.name, 'team_status' : self.status, 'target_clue' : self.target} return json_dict