-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathslave.py
98 lines (77 loc) · 3.42 KB
/
slave.py
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import paho.mqtt.client as paho
from mqtt_point import *
from data import *
import threading
class SlaveClient(MqttPoint):
def makeOnRequestCallback(self_inst):
def cb_func(mesage):
if self_inst.on_request_cb:
self_inst.on_request_cb(mesage)
return cb_func
def __init__(self):
self._uuid = str(uuid.uuid4())
id = self._uuid[:4] + '-' + self._uuid[-4:]
slave_name = f'Slave[{id}]'
super().__init__(name=slave_name,
listen_channel="com.ashimgaev.home/channel/master_dbg",
request_channel="com.ashimgaev.home/channel/slave_dbg",
on_request_cb=SlaveClient.makeOnRequestCallback(self))
self.on_request_cb = None
self.config_request_loop = (False, threading.Timer)
self.config_request_loop_period = 10
def getName(self):
return super().getMyName()
def setConfigLoopPeriod(self, val: int):
self.config_request_loop_period = val
def startConfigRequestLoop(self, execTarget: str, on_reply_cb, pre_request_cb, config_loop_period: int):
self.config_request_loop_period = config_loop_period
def send_request_func():
if self.config_request_loop[0] and self.config_request_loop_period > 0:
msg = Data_SlaveConfigRequest(section_name=execTarget)
if pre_request_cb:
pre_request_cb(execTarget)
def on_reply(mesage: Data_MasterConfigReply):
if on_reply_cb:
on_reply_cb(mesage.cfg_section)
self.sendMessage(msg, on_reply)
self.config_request_loop = (True, threading.Timer(self.config_request_loop_period, send_request_func))
self.config_request_loop[1].start()
self.config_request_loop = (True, None)
send_request_func()
def stopConfigRequestLoop(self):
if self.config_request_loop[1]:
self.config_request_loop[1].cancel()
self.config_request_loop = (False, None)
def start(self, on_request_cb = None):
self.on_request_cb = on_request_cb
super().start()
def stop(self):
super().stop()
self.setConfigLoopPeriod(0)
self.stopConfigRequestLoop()
def sendConfigListReply(self, reqMessage: Data_MessageBase, cfg_sections: list[Data_ConfigSection]):
msg = Data_SlaveConfigListReply(cfg_sections=cfg_sections)
msg.uuid = reqMessage.uuid
self.sendMessage(msg)
def sendConfigUpdateReply(self, reqMessage: Data_MessageBase):
msg = Data_SlaveConfigUpdateReply(status=True)
msg.uuid = reqMessage.uuid
self.sendMessage(msg)
def sendStatisticReply(self, reqMessage: Data_MessageBase, games: list[str]):
msg = Data_SlaveStatisticReply(games=games)
msg.uuid = reqMessage.uuid
self.sendMessage(msg)
def sendLogMessageRequest(self, msg: str):
self.sendMessage(Data_SlaveLogMessageRequest(msg=msg))
def sendMasterRoleRequest(self, name: str):
self.sendMessage(Data_SlaveMasterRoleRequest(name=name))
def sendMasterRoleReply(self, name: str):
self.sendMessage(Data_SlaveMasterRoleReply(name=name))
def main():
slaveClient = SlaveClient()
slaveClient.start()
slaveClient.startConfigRequestLoop("cossaks", None)
while True:
pass
if __name__ == "__main__":
main()