345 lines
12 KiB
Python
345 lines
12 KiB
Python
|
# coding: gb2312
|
|||
|
import concurrent.futures
|
|||
|
|
|||
|
import ping3
|
|||
|
from ping3.errors import PingError
|
|||
|
|
|||
|
from AcrossPlatform.get_platform import *
|
|||
|
from DeviceDefine.consensus import UNKNOWN, MANAGER, SLAVER
|
|||
|
from LSZXNetWork.consensus import *
|
|||
|
from LSZXNetWork.encrypt import wifi_ap_name_generate, wifi_password_generate, SSID_HEAD
|
|||
|
from LSZXNetWork.transmission import Client, Server
|
|||
|
from LogRecord.log_recorder import GLOBAL_LOG
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD>ƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>İ<EFBFBD>
|
|||
|
if SYS_PLATFORM == WINDOWS:
|
|||
|
from LSZXNetWork.NetworkDriverWin32 import wifi
|
|||
|
from LSZXNetWork.NetworkDriverWin32 import wifi_ap
|
|||
|
from LSZXNetWork.NetworkDriverWin32.wifi_ap import (
|
|||
|
get_self_ip_address, kill_port, get_machine_ip_address, get_wifi_ap_status
|
|||
|
)
|
|||
|
elif SYS_PLATFORM == LINUX:
|
|||
|
from LSZXNetWork.NetworkDriverLinux import wifi
|
|||
|
from LSZXNetWork.NetworkDriverLinux import wifi_ap
|
|||
|
from LSZXNetWork.NetworkDriverLinux.wifi_ap import (
|
|||
|
kill_port, get_machine_ip_address, get_wifi_ap_status
|
|||
|
)
|
|||
|
from LSZXNetWork.NetworkDriverLinux.wifi import get_self_ip_address
|
|||
|
import threading
|
|||
|
import time
|
|||
|
import traceback
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
DATA_LENGTH = 5
|
|||
|
# Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
DEFAULT_MASTER_ADDRESS = "192.168.137.1"
|
|||
|
# <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD>չʾ<D5B9><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ip<69><70><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>192.168.138.32<EFBFBD><EFBFBD>
|
|||
|
DEFAULT_DISPLAY_SEGMENT = "192.168.138."
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
DEFAULT_MASTER_SEGMENT = "192.168.137."
|
|||
|
|
|||
|
DEFAULT_SELF_IP = '0.0.0.0'
|
|||
|
|
|||
|
|
|||
|
class Network:
|
|||
|
NETWORK_SERVER_PORT = 13131
|
|||
|
NETWORK_CLIENT_PORT = 13132
|
|||
|
|
|||
|
def __init__(self, master_mode=True, device_type=UNKNOWN):
|
|||
|
"""
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>ֻ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɴӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ip<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼ip<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>ip<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ôӻ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD><EFBFBD>Ǵӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>arp<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӻ<EFBFBD>ȡ<EFBFBD><EFBFBD>ͬʱͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ping<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δѰ<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD>
|
|||
|
"""
|
|||
|
super().__init__()
|
|||
|
kill_port(Network.NETWORK_SERVER_PORT)
|
|||
|
kill_port(Network.NETWORK_CLIENT_PORT)
|
|||
|
# <20>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
|||
|
self.device_type = device_type
|
|||
|
# <20>豸<EFBFBD>ȵ<EFBFBD>
|
|||
|
self.ap = wifi_ap.WiFiAP()
|
|||
|
# <20>豸WiFi
|
|||
|
self.wifi = wifi.WIFI()
|
|||
|
# AP<41><50><EFBFBD><EFBFBD>
|
|||
|
self.ssid = wifi_ap_name_generate()
|
|||
|
self.master_mode = master_mode
|
|||
|
self.ap_is_start = False
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磬<EFBFBD><E7A3AC><EFBFBD><EFBFBD>AP
|
|||
|
if master_mode:
|
|||
|
GLOBAL_LOG.write("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸AP<EFBFBD><EFBFBD>")
|
|||
|
self.start_ap()
|
|||
|
|
|||
|
self.master_ip = DEFAULT_MASTER_ADDRESS
|
|||
|
self.ip = DEFAULT_SELF_IP
|
|||
|
self.other_ip = {}
|
|||
|
self.device_lookup = {}
|
|||
|
self.connected_wifi_mes = None
|
|||
|
self.last_time = time.time()
|
|||
|
|
|||
|
self.client = Client(ip=DEFAULT_SELF_IP)
|
|||
|
self.server = Server(ip=DEFAULT_SELF_IP, port=Network.NETWORK_SERVER_PORT)
|
|||
|
|
|||
|
self.alive_timeout = 10
|
|||
|
|
|||
|
threading.Thread(target=self._threading_wifi_daemon, daemon=True).start()
|
|||
|
threading.Thread(target=self._threading_ap_daemon, daemon=True).start()
|
|||
|
threading.Thread(target=self._threading_ping, daemon=True).start()
|
|||
|
threading.Thread(target=self._threading_ip_receiver, daemon=True).start()
|
|||
|
threading.Thread(target=self._threading_ip_distribution, daemon=True).start()
|
|||
|
threading.Thread(target=self._threading_ip_report, daemon=True).start()
|
|||
|
|
|||
|
def get_ssid(self):
|
|||
|
return self.ssid
|
|||
|
|
|||
|
# <20><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ӵ<EFBFBD>WiFi
|
|||
|
def get_connected_wifi(self):
|
|||
|
wifi_name = self.wifi.get_connected_wifi_name()
|
|||
|
return wifi_name
|
|||
|
|
|||
|
# <20><><EFBFBD>ÿ<EFBFBD><C3BF>õ<EFBFBD>WiFi
|
|||
|
def get_available_wifi(self):
|
|||
|
available_wifi = self.wifi.scan_wifi()
|
|||
|
available_wifi_name = [str(_wifi) for _wifi in available_wifi]
|
|||
|
available_wifi_name = list(filter(lambda s: SSID_HEAD in s, available_wifi_name))
|
|||
|
available_wifi_name = list(set(available_wifi_name))
|
|||
|
return available_wifi_name
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD>
|
|||
|
def start_ap(self):
|
|||
|
password = wifi_password_generate(self.ssid)
|
|||
|
self.ap.set_ssid(self.ssid)
|
|||
|
self.ap.set_password(password)
|
|||
|
self.ap.start()
|
|||
|
self.ap_is_start = True
|
|||
|
|
|||
|
# <20>ر<EFBFBD><D8B1>ȵ<EFBFBD>
|
|||
|
def stop_ap(self):
|
|||
|
self.ap.stop()
|
|||
|
self.ap_is_start = False
|
|||
|
|
|||
|
# <20><><EFBFBD>ӵ<EFBFBD>WiFi
|
|||
|
def connect2wifi(self, ssid):
|
|||
|
self.stop_ap()
|
|||
|
self.wifi.wifi_device_initial()
|
|||
|
password = wifi_password_generate(ssid)
|
|||
|
self.connected_wifi_mes = (ssid, password)
|
|||
|
self.other_ip.clear()
|
|||
|
self.device_lookup.clear()
|
|||
|
return self.wifi.connect_wifi(ssid=ssid, password=password)
|
|||
|
|
|||
|
# <20><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ӵ<EFBFBD>WiFi<46><69><EFBFBD><EFBFBD>
|
|||
|
def get_connected_wifi_name(self):
|
|||
|
return self.wifi.get_connected_wifi_name()
|
|||
|
|
|||
|
# <20>Ͽ<EFBFBD><CFBF><EFBFBD>ǰ<EFBFBD><C7B0>WiFi<46><69><EFBFBD><EFBFBD>
|
|||
|
def disconnect(self):
|
|||
|
self.connected_wifi_mes = None
|
|||
|
self.wifi.disconnect()
|
|||
|
self.start_ap()
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ip
|
|||
|
def get_master_ip(self):
|
|||
|
return self.master_ip
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ip
|
|||
|
def get_self_ip(self):
|
|||
|
return self.ip
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ip
|
|||
|
def get_other(self):
|
|||
|
this_time = time.time()
|
|||
|
other_ip = list(
|
|||
|
filter(
|
|||
|
lambda ip: ip != self.ip and this_time - self.device_lookup[ip][TIME] < self.alive_timeout,
|
|||
|
self.device_lookup.keys()
|
|||
|
)
|
|||
|
)
|
|||
|
return other_ip
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD>Manager<65><72>ip
|
|||
|
def get_manager(self):
|
|||
|
this_time = time.time()
|
|||
|
manager_list = list(
|
|||
|
filter(
|
|||
|
lambda ip: self.device_lookup[ip][DEVICE_TYPE] == MANAGER
|
|||
|
and this_time - self.device_lookup[ip][TIME] < self.alive_timeout,
|
|||
|
self.device_lookup.keys()
|
|||
|
)
|
|||
|
)
|
|||
|
return manager_list
|
|||
|
|
|||
|
# <20><><EFBFBD>ôӻ<C3B4>IP
|
|||
|
def get_slaver(self):
|
|||
|
this_time = time.time()
|
|||
|
slaver_list = list(
|
|||
|
filter(
|
|||
|
lambda ip: self.device_lookup[ip][DEVICE_TYPE] == SLAVER
|
|||
|
and ip != DEFAULT_MASTER_ADDRESS
|
|||
|
and this_time - self.device_lookup[ip][TIME] < self.alive_timeout,
|
|||
|
self.device_lookup.keys()
|
|||
|
)
|
|||
|
)
|
|||
|
return slaver_list
|
|||
|
|
|||
|
# wifi<66>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD>WiFi<46><69><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>
|
|||
|
def _threading_wifi_daemon(self):
|
|||
|
while True:
|
|||
|
try:
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>APģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>WiFi<46><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WiFi<46>ػ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WiFi<46>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
|||
|
if not self.ap_is_start:
|
|||
|
if not self.connected_wifi_mes:
|
|||
|
time.sleep(1)
|
|||
|
continue
|
|||
|
ssid, password = self.connected_wifi_mes
|
|||
|
if self.get_connected_wifi_name() != ssid:
|
|||
|
# <20><><EFBFBD><EFBFBD>WiFiû<69><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>WiFi
|
|||
|
self.wifi.connect_wifi(ssid=ssid, password=password)
|
|||
|
except Exception as e:
|
|||
|
GLOBAL_LOG.write(f"wifi<EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>{e.args},\n{traceback.format_exc()}")
|
|||
|
time.sleep(1)
|
|||
|
time.sleep(2)
|
|||
|
|
|||
|
# ap<61>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD>ap<61><70><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
def _threading_ap_daemon(self):
|
|||
|
while True:
|
|||
|
try:
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>APģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ap<61>ػ<EFBFBD>ģʽ
|
|||
|
if self.ap_is_start:
|
|||
|
if not get_wifi_ap_status():
|
|||
|
self.ap.reboot()
|
|||
|
except Exception as e:
|
|||
|
GLOBAL_LOG.write(f"ap<EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>{e.args},\n{traceback.format_exc()}")
|
|||
|
time.sleep(1)
|
|||
|
|
|||
|
@staticmethod
|
|||
|
def ping_task(ip):
|
|||
|
try:
|
|||
|
ping3.ping(ip, timeout=30, unit="ms", size=1)
|
|||
|
except PingError:
|
|||
|
return
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD>ping<6E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磬<EFBFBD><E7A3AC>֤<EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>
|
|||
|
def network_discover(self):
|
|||
|
ping_pool_num = 16
|
|||
|
self_ip = get_self_ip_address()
|
|||
|
base_segments = self_ip.split(".")[0:3]
|
|||
|
# <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>̳߳أ<CCB3><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>Ϊping_pool_num
|
|||
|
with concurrent.futures.ThreadPoolExecutor(max_workers=ping_pool_num) as executor:
|
|||
|
# <20>ύ<EFBFBD><E1BDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳߳<DFB3>
|
|||
|
for i in range(2, 255):
|
|||
|
ip = ".".join(base_segments + [str(i)])
|
|||
|
executor.submit(self.ping_task, ip)
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD>豸ʶ<E8B1B8><CAB6>
|
|||
|
def _threading_ping(self):
|
|||
|
while True:
|
|||
|
# <20><><EFBFBD><EFBFBD>pingͨ<67><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8>
|
|||
|
self.network_discover()
|
|||
|
# ÿ<><C3BF>30<33><30><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
|
|||
|
if time.time() - self.last_time > 30:
|
|||
|
self.last_time = time.time()
|
|||
|
print(
|
|||
|
"@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>ӡ<EFBFBD><D3A1>",
|
|||
|
"SELF", self.get_self_ip(),
|
|||
|
"MASTER", self.get_master_ip(),
|
|||
|
"SLAVER", self.get_slaver(),
|
|||
|
"MANAGER", self.get_manager(),
|
|||
|
"OTHERS", self.get_other(),
|
|||
|
)
|
|||
|
# print(self.device_lookup)
|
|||
|
time.sleep(1)
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ȡ<EFBFBD><C8A1>
|
|||
|
def _threading_ip_receiver(self):
|
|||
|
while True:
|
|||
|
try:
|
|||
|
data = self.server.get_data()
|
|||
|
mes_command = data[MES_COMMAND]
|
|||
|
reported_time = time.time()
|
|||
|
if mes_command == UPDATE:
|
|||
|
for ip, device_type in data[DATA].items():
|
|||
|
self.device_lookup[ip] = {
|
|||
|
DEVICE_TYPE: device_type,
|
|||
|
TIME: reported_time
|
|||
|
}
|
|||
|
elif mes_command == DEL:
|
|||
|
self.device_lookup.clear()
|
|||
|
# print(self.device_lookup)
|
|||
|
except Exception as e:
|
|||
|
print(f"WiFi<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>{e.args},\n{traceback.format_exc()}")
|
|||
|
GLOBAL_LOG.write(f"WiFi<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>{e.args},\n{traceback.format_exc()}")
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD>豸Ϊ<E8B1B8><CEAA><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ӻ<EFBFBD><D3BB>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸ip
|
|||
|
def _threading_ip_distribution(self):
|
|||
|
while True:
|
|||
|
try:
|
|||
|
# <20><><EFBFBD><EFBFBD>û<EFBFBD>з<EFBFBD><D0B7><EFBFBD>ap
|
|||
|
if not self.ap_is_start:
|
|||
|
time.sleep(1)
|
|||
|
continue
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ap
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>б<EFBFBD>
|
|||
|
this_time = time.time()
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뵽<EFBFBD>б<EFBFBD><D0B1><EFBFBD>
|
|||
|
self.ip = DEFAULT_MASTER_ADDRESS
|
|||
|
self.device_lookup[self.ip] = {
|
|||
|
DEVICE_TYPE: self.device_type,
|
|||
|
TIME: this_time
|
|||
|
}
|
|||
|
|
|||
|
alive_device_info = {}
|
|||
|
for ip, mes in self.device_lookup.items():
|
|||
|
last_report_time = mes[TIME]
|
|||
|
if this_time - last_report_time < self.alive_timeout:
|
|||
|
alive_device_info[ip] = mes[DEVICE_TYPE]
|
|||
|
|
|||
|
report_pkg = {
|
|||
|
MES_COMMAND: UPDATE,
|
|||
|
DATA: alive_device_info
|
|||
|
}
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>ձ<EFBFBD>
|
|||
|
lookup_table = self.device_lookup.copy()
|
|||
|
address_list = [(ip, Network.NETWORK_SERVER_PORT) for ip in lookup_table.keys()]
|
|||
|
pkg_list = [report_pkg for _ in lookup_table.keys()]
|
|||
|
self.client.distributed_send(address_list, pkg_list)
|
|||
|
# <20><>Ϣһ<CFA2><D2BB>
|
|||
|
time.sleep(1)
|
|||
|
except Exception as e:
|
|||
|
GLOBAL_LOG.write(f"<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{e.args}\n{traceback.format_exc()}")
|
|||
|
continue
|
|||
|
|
|||
|
# <20><>ʱ<EFBFBD>㱨<EFBFBD><E3B1A8><EFBFBD><EFBFBD>ip
|
|||
|
def _threading_ip_report(self):
|
|||
|
while True:
|
|||
|
# ʶ<><CAB6>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|||
|
if self.ap_is_start:
|
|||
|
time.sleep(1)
|
|||
|
continue
|
|||
|
self.ip = get_self_ip_address()
|
|||
|
if self.ip == DEFAULT_SELF_IP:
|
|||
|
time.sleep(1)
|
|||
|
continue
|
|||
|
report_pkg = {
|
|||
|
MES_COMMAND: UPDATE,
|
|||
|
DATA: {
|
|||
|
self.ip: self.device_type
|
|||
|
}
|
|||
|
}
|
|||
|
# ʶ<><CAB6>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磬<EFBFBD><E7A3AC><EFBFBD>ұ<EFBFBD><D2B1><EFBFBD>û<EFBFBD>п<EFBFBD><D0BF><EFBFBD><EFBFBD>ȵ㣬<C8B5><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>
|
|||
|
if DEFAULT_MASTER_SEGMENT in self.ip:
|
|||
|
self.master_ip = DEFAULT_MASTER_ADDRESS
|
|||
|
self.client.connect2(self.master_ip, Network.NETWORK_SERVER_PORT)
|
|||
|
self.client.send(report_pkg)
|
|||
|
# ʶ<><CAB6>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磬<EFBFBD><E7A3AC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
|||
|
else:
|
|||
|
# <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>豸ip
|
|||
|
all_ip = get_machine_ip_address()
|
|||
|
if not all_ip:
|
|||
|
continue
|
|||
|
self.ip = all_ip[0]
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ip<69><70>Ϣ
|
|||
|
address_list = [(ip, Network.NETWORK_SERVER_PORT) for ip in all_ip]
|
|||
|
pkg_list = [report_pkg for _ in all_ip]
|
|||
|
self.client.distributed_send(address_list, pkg_list)
|
|||
|
# <20><>Ϣһ<CFA2><D2BB>
|
|||
|
time.sleep(1)
|