11import _thread
22import random
3+ import uuid
34
45import paho .mqtt .publish as mqtt_pub
56import paho .mqtt .client as mqtt
67import json
78
8- RANDOM_TOPIC_BID = "RandomTopicBid"
9-
10- START_RANDOM_DRIVER_BID = "StartRandomDriverBid"
11-
129MOBBER_LIST = "MobberList"
1310
1411TIME_CHANGE = "TimeChange"
1512
13+ SAY_HELLO = "SayHello"
14+
15+ START_TIMER = "StartTimer"
16+
1617
1718class DojoManager (object ):
1819 def __init__ (self , controller ):
1920 if not controller .settings_manager .get_dojo_enabled ():
2021 return
22+
23+ self .time_change_increment = 0
24+ self .mobber_change_increment = 0
25+ self .session_id = uuid .uuid4 ().__str__ ()
26+
27+
2128 self .switch_dictionary = {
2229 MOBBER_LIST : self .sub_mobber_list ,
2330 TIME_CHANGE : self .sub_time_change ,
24- START_RANDOM_DRIVER_BID : self .sub_start_random_driver_bid ,
25- RANDOM_TOPIC_BID : self .sub_random_topic_bid
31+ SAY_HELLO : self .sub_say_hello ,
32+ START_TIMER : self .sub_start_timer ,
2633 }
2734 self .station_drivers = {}
35+ self .other_stations = []
2836 self .controller = controller
2937 self .dojo_broker = self .controller .settings_manager .get_dojo_broker ()
3038 self .dojo_port = self .controller .settings_manager .get_dojo_port ()
31- self .dojo_mob_station_name = self .controller .settings_manager .get_dojo_mob_station_name ()
39+ self .dojo_mob_station_name = self .controller .settings_manager .get_dojo_mob_station_name () + uuid . uuid4 (). __str__ ()
3240 self .dojo_session_id = self .controller .settings_manager .get_dojo_session_id ()
3341 self .dojo_topic_root = self .controller .settings_manager .get_dojo_topic_root ()
3442 self .controller .mobber_manager .subscribe_to_mobber_list_change (self .publish_mobber_list_changes )
3543 self .controller .time_options_manager .subscribe_to_timechange (self .publish_time_change )
3644 self .subscribe_to_time_change ()
45+ self .say_hello ()
46+
47+ def say_hello (self ):
48+ topic = self .generate_topic (SAY_HELLO )
49+ self .publish (topic , "" )
3750
38- def publish_time_change (self , time_string , minutes , seconds ):
51+ def publish_time_change (self , time_string , minutes , seconds , origin_station_name = None ):
3952 topic = self .generate_topic (TIME_CHANGE )
53+ station_name = self .dojo_mob_station_name
54+ if origin_station_name is not None :
55+ return
4056 payload_dictionary = {
4157 "minutes" : minutes ,
42- "seconds" : seconds
58+ "seconds" : seconds ,
59+ "station_name" : station_name
4360 }
4461 payload = json .dumps (payload_dictionary )
4562 self .publish (topic , payload )
@@ -73,6 +90,7 @@ def on_message(self, client, userdata, msg):
7390 session_id = topic_parts [1 ]
7491 station_name = topic_parts [2 ]
7592 message_type = topic_parts [3 ]
93+ print ("on_message" ,msg .topic )
7694 self .switch_statement_dictionary_trick (station_name , message_type , msg .payload )
7795
7896 def switch_statement_dictionary_trick (self , station_name , message_type , payload ):
@@ -81,43 +99,42 @@ def switch_statement_dictionary_trick(self, station_name, message_type, payload)
8199 def sub_mobber_list (self , station_name , message_type , payload ):
82100 if not station_name == self .dojo_mob_station_name :
83101 payload_dictionary = json .loads (payload .decode ("utf-8" ))
84- for mobber in payload_dictionary ["mobber_list" ]:
85- self .controller .mobber_manager .add_mobber (mobber )
86- topic = self .generate_topic (START_RANDOM_DRIVER_BID )
87- self .publish (topic , "" )
102+ mobber_list = payload_dictionary ["mobber_list" ]
103+ print ("sub_mobber_list" ,mobber_list )
104+ self .controller .mobber_manager .set_mobber_list (mobber_list )
88105
89106 def generate_topic (self , message_type ):
90107 topic = "{}/{}/{}/{}" .format (self .dojo_topic_root , self .dojo_session_id , self .dojo_mob_station_name ,
91108 message_type )
109+ print ("generate_topic" ,topic )
92110 return topic
93111
94112 def sub_time_change (self , station_name , message_type , payload ):
113+ print (payload )
95114 if not station_name == self .dojo_mob_station_name :
96115 payload_dictionary = json .loads (payload .decode ("utf-8" ))
97116 minutes = payload_dictionary ["minutes" ]
98117 seconds = payload_dictionary ["seconds" ]
118+ origin_station_name = payload_dictionary ["station_name" ]
99119 if not (
100120 self .controller .time_options_manager .minutes == minutes and self .controller .time_options_manager .seconds == seconds ):
101- self .controller .time_options_manager .set_countdown_time (minutes , seconds )
121+ self .controller .time_options_manager .set_countdown_time (minutes , seconds , origin_station_name )
102122
103- def sub_start_random_driver_bid (self , station_name , message_type , payload ):
104- print (message_type )
105- # topic = self.generate_topic(RANDOM_TOPIC_BID)
106- # if self.controller.mobber_manager.mobber_list.__len__() > 1:
107- # payload_dictionary = {"bid": random.randint(0, 100),
108- # "mobber": random.choice(self.controller.mobber_manager.mobber_list)}
109- # self.publish(topic, json.dumps(payload_dictionary))
123+ def sub_say_hello (self , station_name , message_type , payload ):
124+ if not station_name == self .dojo_mob_station_name :
125+ if not self .other_stations .__contains__ (station_name ):
126+ self .other_stations .append (station_name )
127+ topic = self .generate_topic (SAY_HELLO )
128+ self .publish (topic , "" )
110129
111- def sub_random_topic_bid (self , station_name , message_type , payload ):
112- print (payload )
113- # payload_dictionary = json.loads(payload.decode("utf-8"))
114- # self.station_drivers[payload_dictionary["mobber"]] = station_name
115- # print(self.station_drivers)
116- # self.controller.mobber_manager.fire_time_change_callbacks()
130+ def sub_start_timer (self , station_name , message_type , payload ):
131+ if not station_name == self .dojo_mob_station_name :
132+ self .controller .launch_transparent_countdown_if_blocking ()
117133
118134 def subscribe_to_dojo (self ):
119135 client = mqtt .Client ()
120136 client .on_connect = self .on_connect
121137 client .on_message = self .on_message
122138 client .connect (self .dojo_broker , self .dojo_port , 60 )
123139 client .loop_forever ()
140+
0 commit comments