The runJs thread fixed and every sight use own threadpool where in their thread runs without interrupt eachother.
parent
3169d1cf14
commit
2430db8be2
4
base.py
4
base.py
|
|
@ -81,8 +81,8 @@ def loadConfigTemplate():
|
||||||
|
|
||||||
def start():
|
def start():
|
||||||
# Creating admin sight
|
# Creating admin sight
|
||||||
#sights.create("sight-admin", "sight-admin")
|
sights.create("sight-admin", "sight-admin")
|
||||||
#sights.show("sight-admin")
|
sights.show("sight-admin")
|
||||||
|
|
||||||
# Creating the main Sight
|
# Creating the main Sight
|
||||||
sights.create("main", data["default_template_page"])
|
sights.create("main", data["default_template_page"])
|
||||||
|
|
|
||||||
|
|
@ -9,19 +9,13 @@ class Broadcast:
|
||||||
if base.registrar.checkData(record) is not None:
|
if base.registrar.checkData(record) is not None:
|
||||||
for sight in base.sights.getSights().values():
|
for sight in base.sights.getSights().values():
|
||||||
if len(record.getHeader().getReceivers()) == 0:
|
if len(record.getHeader().getReceivers()) == 0:
|
||||||
"""sight.browser.page().runJavaScript("receiveData('" + record.getHeader().getType() + "', '" + record.getHeader().getReferralName() + "', '" + record.getData(
|
print("EVERY ID " + str(sight.getPageId()))
|
||||||
True) + "')", self.ready)"""
|
sight.addJob("receiveData('" + record.getHeader().getType() + "', '" + record.getHeader().getReferralName() + "', '" + record.getData(
|
||||||
sight.js_worker.addRequest("receiveData('" + record.getHeader().getType() + "', '" + record.getHeader().getReferralName() + "', '" + record.getData(
|
True) + "')", sight.getPageId())
|
||||||
True) + "')")
|
elif sight.getPageId() in record.getHeader().getReceivers():
|
||||||
else:
|
print("ID " + str(sight.getPageId()))
|
||||||
if sight.getPageId() in record.getHeader().getReceivers():
|
sight.addJob("receiveData('" + record.getHeader().getType() + "', '" + record.getHeader().getReferralName() + "', '" + record.getData(
|
||||||
print("ID " +str(sight.getId()))
|
True) + "')", sight.getPageId())
|
||||||
"""sight.browser.page().runJavaScript(
|
|
||||||
"receiveData('" + record.getHeader().getType() + "', '" + record.getHeader().getReferralName() + "', '" + record.getData(
|
|
||||||
True) + "')", self.ready)"""
|
|
||||||
sight.js_worker.addRequest(
|
|
||||||
"receiveData('" + record.getHeader().getType() + "', '" + record.getHeader().getReferralName() + "', '" + record.getData(
|
|
||||||
True) + "')")
|
|
||||||
else:
|
else:
|
||||||
print("Couldnt send message")
|
print("Couldnt send message")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
import time
|
||||||
|
from PyQt6.QtCore import QRunnable, QObject, QThreadPool, pyqtSignal as Signal, pyqtSlot as Slot
|
||||||
|
import base
|
||||||
|
|
||||||
|
class Signals(QObject):
|
||||||
|
started = Signal(str)
|
||||||
|
jsrun = Signal(str)
|
||||||
|
completed = Signal(str)
|
||||||
|
|
||||||
|
|
||||||
|
class JsRunWorker(QRunnable):
|
||||||
|
def __init__(self, js_script, page_id):
|
||||||
|
super().__init__()
|
||||||
|
self.page_id = page_id
|
||||||
|
self.js_script = js_script
|
||||||
|
self.signals = Signals()
|
||||||
|
|
||||||
|
@Slot()
|
||||||
|
def run(self):
|
||||||
|
self.signals.started.emit(self.page_id)
|
||||||
|
time.sleep(0.5)
|
||||||
|
#print("PAGE ID is " + str(self.page_id) + " - " + self.js_script)
|
||||||
|
self.signals.jsrun.emit(self.js_script)
|
||||||
|
self.signals.completed.emit(self.page_id)
|
||||||
69
sight.py
69
sight.py
|
|
@ -1,13 +1,14 @@
|
||||||
import base
|
import base
|
||||||
|
from core.sight.threads.jsrun_worker import JsRunWorker
|
||||||
from callhandler import CallHandler
|
from callhandler import CallHandler
|
||||||
from browser import Browser
|
from browser import Browser
|
||||||
from PyQt6.QtCore import Qt
|
from PyQt6.QtCore import Qt
|
||||||
from PyQt6.QtWidgets import QMainWindow, QWidget, QVBoxLayout
|
from PyQt6.QtWidgets import QMainWindow, QWidget, QVBoxLayout
|
||||||
from PyQt6.QtCore import QThread, QObject, pyqtSignal as Signal, pyqtSlot as Slot
|
from PyQt6.QtCore import QThread,QThreadPool, QObject, pyqtSignal as Signal, pyqtSlot as Slot
|
||||||
|
from queue import Queue
|
||||||
import time
|
import time
|
||||||
|
|
||||||
class Sight(QWidget):
|
class Sight(QWidget):
|
||||||
js_work_requested = Signal(str)
|
|
||||||
|
|
||||||
def __init__(self, id, page):
|
def __init__(self, id, page):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
@ -17,7 +18,7 @@ class Sight(QWidget):
|
||||||
self.data = {} # private data(s) of the sight
|
self.data = {} # private data(s) of the sight
|
||||||
self.children = []
|
self.children = []
|
||||||
self.parent = None
|
self.parent = None
|
||||||
self.js_worker = self.JsRunWorker()
|
self.pool = QThreadPool.globalInstance()
|
||||||
|
|
||||||
base.data["active_sight"] = self.id
|
base.data["active_sight"] = self.id
|
||||||
self.title = id
|
self.title = id
|
||||||
|
|
@ -42,27 +43,25 @@ class Sight(QWidget):
|
||||||
|
|
||||||
self.setLayout(self.layout)
|
self.setLayout(self.layout)
|
||||||
|
|
||||||
|
def addJob(self, js_script, page_id):
|
||||||
|
worker = JsRunWorker(js_script, page_id)
|
||||||
|
worker.signals.completed.connect(self.complete)
|
||||||
|
worker.signals.jsrun.connect(self.runJs)
|
||||||
|
worker.signals.started.connect(self.start)
|
||||||
|
self.pool.start(worker)
|
||||||
|
|
||||||
|
def start(self, n):
|
||||||
|
print(f'Job in "{n}" page started...')
|
||||||
|
|
||||||
|
def complete(self, n):
|
||||||
|
print(f'Job in "{n}" page completed.')
|
||||||
|
|
||||||
def runJs(self,request_js):
|
def runJs(self,request_js):
|
||||||
self.browser.page().runJavaScript(request_js)
|
self.browser.page().runJavaScript(request_js)
|
||||||
|
|
||||||
|
|
||||||
def st(self):
|
|
||||||
self.js_worker_thread = QThread()
|
|
||||||
self.js_worker.js_run.connect(self.runJs)
|
|
||||||
|
|
||||||
self.js_work_requested.connect(self.js_worker.do_work)
|
|
||||||
# move worker to the worker thread
|
|
||||||
self.js_worker.moveToThread(self.js_worker_thread)
|
|
||||||
# start the thread
|
|
||||||
self.js_worker_thread.start()
|
|
||||||
self.js_work_requested.emit(self.page)
|
|
||||||
|
|
||||||
# use when the frameSupported is False (for instance wayland)
|
# use when the frameSupported is False (for instance wayland)
|
||||||
def closeEvent(self, event):
|
def closeEvent(self, event):
|
||||||
self.js_worker.dont_work()
|
self.pool.clear()
|
||||||
self.js_worker_thread.quit()
|
|
||||||
|
|
||||||
base.sights.close(self.id)
|
base.sights.close(self.id)
|
||||||
|
|
||||||
|
|
@ -103,39 +102,3 @@ class Sight(QWidget):
|
||||||
if key in self.data:
|
if key in self.data:
|
||||||
return self.data[key]
|
return self.data[key]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
class JsRunWorker(QObject):
|
|
||||||
__js_requests = []
|
|
||||||
__infinitive = True
|
|
||||||
js_run = Signal(str)
|
|
||||||
|
|
||||||
def addRequest(self, js):
|
|
||||||
self.__js_requests.append(js)
|
|
||||||
#print("REQUESTS: ")
|
|
||||||
#print(self.__js_requests)
|
|
||||||
|
|
||||||
@Slot(str)
|
|
||||||
def do_work(self, name):
|
|
||||||
sec_sleep = 0.5
|
|
||||||
while self.__infinitive:
|
|
||||||
rs = self.__js_requests
|
|
||||||
self.__js_requests.clear()
|
|
||||||
|
|
||||||
time.sleep(sec_sleep)
|
|
||||||
for request in rs:
|
|
||||||
time.sleep(sec_sleep)
|
|
||||||
print(name + " " +request)
|
|
||||||
try:
|
|
||||||
self.js_run.emit(request)
|
|
||||||
except Exception as error:
|
|
||||||
print("Error " + str(error))
|
|
||||||
|
|
||||||
#break
|
|
||||||
# self.__js_requests.remove(request)
|
|
||||||
# base.sights.get(page).browser.page().runJavaScript("receiveData('message', 'logs', {'event_code':'do_work', 'msg':'test', 'date':'ye'})", self.ready)
|
|
||||||
|
|
||||||
def dont_work(self):
|
|
||||||
self.__infinitive = False
|
|
||||||
def ready(self, returnValue):
|
|
||||||
if returnValue is not None:
|
|
||||||
print(returnValue)
|
|
||||||
|
|
@ -4,11 +4,17 @@ import json
|
||||||
import random
|
import random
|
||||||
from sight import Sight
|
from sight import Sight
|
||||||
|
|
||||||
|
|
||||||
class SightFactory():
|
class SightFactory():
|
||||||
|
__job_jsrun = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.list = {}
|
self.list = {}
|
||||||
self.data = {} #Global data(s) for the sight(s)
|
self.data = {} #Global data(s) for the sight(s)
|
||||||
|
|
||||||
|
def addJsJob(self, script, page_id):
|
||||||
|
self.__job_jsrun.addJob(script,page_id)
|
||||||
|
|
||||||
def create(self, id, page):
|
def create(self, id, page):
|
||||||
log.byCode("SF1000E","The page '" + str(page) + "' with '"+str(id)+"' id.")
|
log.byCode("SF1000E","The page '" + str(page) + "' with '"+str(id)+"' id.")
|
||||||
if str(id) == "main" and self.checkKey(id):
|
if str(id) == "main" and self.checkKey(id):
|
||||||
|
|
@ -40,7 +46,6 @@ class SightFactory():
|
||||||
if self.checkKey(id):
|
if self.checkKey(id):
|
||||||
self.list[id].show()
|
self.list[id].show()
|
||||||
log.byCode("SF1000E","The '"+str(id)+"' sight is showed!")
|
log.byCode("SF1000E","The '"+str(id)+"' sight is showed!")
|
||||||
self.list[id].st()
|
|
||||||
return True
|
return True
|
||||||
log.byCode("SF1001W", "This '"+str(id)+"' id isn't exist to show!")
|
log.byCode("SF1001W", "This '"+str(id)+"' id isn't exist to show!")
|
||||||
return False
|
return False
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue