45 lines
1.0 KiB
Python
45 lines
1.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from threading import Thread, Lock, Event
|
|
|
|
|
|
class Monitor(Thread):
|
|
def __init__(self, client):
|
|
Thread.__init__(self)
|
|
self.daemon = True
|
|
self.listeners = []
|
|
self.lock = Lock()
|
|
self.wait_event = Event()
|
|
self.running = True
|
|
self.client = client
|
|
self.ses = None
|
|
self.client = client
|
|
|
|
def stop(self):
|
|
self.running = False
|
|
self.wait_event.set()
|
|
|
|
def add_listener(self, cb):
|
|
with self.lock:
|
|
if not cb in self.listeners:
|
|
self.listeners.append(cb)
|
|
|
|
def remove_listener(self, cb):
|
|
with self.lock:
|
|
try:
|
|
self.listeners.remove(cb)
|
|
except ValueError:
|
|
pass
|
|
|
|
def remove_all_listeners(self):
|
|
with self.lock:
|
|
self.listeners = []
|
|
|
|
def run(self):
|
|
while (self.running):
|
|
with self.lock:
|
|
for cb in self.listeners:
|
|
cb()
|
|
|
|
self.wait_event.wait(1.0)
|