summaryrefslogtreecommitdiff
path: root/dashboard_website/datastructs.py
blob: 6870521737de1e335d648c4a26f66b42845bd5c3 (plain)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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