The event "freezing" problem is solved now by using Thread. There is a bug in the addRequest it looks like double times add the element to the js_request.

main
Balazs Birtalan 2023-11-09 20:22:58 +00:00
parent b8e1a5cb81
commit 3169d1cf14
11 changed files with 109 additions and 38 deletions

View File

@ -1,14 +1,15 @@
<link rel="stylesheet" type="text/css" href="content/logs/style.css">
<script>
$(document).ready(function(){
//getData("name", true);
});
function message(label,data) {
function recieveMessage(referral_name, data) {
/* DON'T PUT ANY WINDOW.SIGHT.CONSOLE function or other one which call the logs because causing infinity loop */
if(label === "logs") {
if(referral_name === "logs") {
//alert(data)
var data = JSON.parse(data);
//var data = JSON.parse(data);
var div = document.getElementById('display_logs');
div.innerHTML += "["+data.type+"]"+" ("+data.event_code+") "+data.msg+" ("+data.date+")<br\>";

View File

@ -7,6 +7,7 @@ from log import Log
print("---- [BOOT] ----")
from core.registration.registrar import Registrar
registrar = Registrar()
registrar.registry().register("message","logs")
registrar.registry().register("log","display")
registrar.registry().register("console","display")
print("---- [END OF BOOT] ----")
@ -14,7 +15,7 @@ print("---- [END OF BOOT] ----")
log = Log(3)
log.debugOn()
log.debug_level = 3
log.eventOn()
log.eventOff()
from mouseevents import MouseEvents
from pynput import mouse
@ -80,7 +81,7 @@ def loadConfigTemplate():
def start():
# Creating admin sight
#sights.create("sight-admin", "main")
#sights.create("sight-admin", "sight-admin")
#sights.show("sight-admin")
# Creating the main Sight

View File

@ -3,19 +3,27 @@ import base
class Broadcast:
def __init__(self):
print("MESSENGER")
print("")
def sendMessage(self, record):
if base.registrar.checkData(record) is not None:
for sight in base.sights.getSights().values():
if len(record.getHeader().getReceivers()) == 0:
sight.browser.page().runJavaScript("receiveData('" + record.getHeader().getType() + "', '" + record.getHeader().getReferralName() + "', '" + record.getData(
True) + "')", self.ready)
"""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:
if sight.getPageId() in record.getHeader().getReceivers():
sight.browser.page().runJavaScript(
print("ID " +str(sight.getId()))
"""sight.browser.page().runJavaScript(
"receiveData('" + record.getHeader().getType() + "', '" + record.getHeader().getReferralName() + "', '" + record.getData(
True) + "')", self.ready)
True) + "')", self.ready)"""
sight.js_worker.addRequest(
"receiveData('" + record.getHeader().getType() + "', '" + record.getHeader().getReferralName() + "', '" + record.getData(
True) + "')")
else:
print("Couldnt send message")
def ready(self, returnValue):
if returnValue is not None:

View File

@ -19,8 +19,13 @@ class RecordHeader():
print("wrong type value")
return False
self.__h_receiver_list = json.loads(self.__h_receiver_list)
return True
if type(self.__h_receiver_list) == str:
self.__h_receiver_list = json.loads(self.__h_receiver_list)
if type(self.__h_receiver_list) == list:
return True
elif type(self.__h_receiver_list) == list:
return True
return False
def getType(self):
return self.__h_type
@ -93,6 +98,7 @@ class Record():
def analyze(self):
if self.__state == "NEW":
#print(str(self.__r_header.analyze()) + " - data: " + str(self.__r_data.analyze()))
if self.__r_header.analyze() is True and self.__r_data.analyze() is True:
self.__state = "ANALYZED"
else:

View File

@ -15,14 +15,15 @@ class Registrar:
record.analyze()
if record.getState() == "ANALYZED":
if self.__registry.exist(record.getHeader().getType(), record.getHeader().getReferralName()):
print(record.getData())
print(record.getData(True))
#print(record.getData())
#print(record.getData(True))
return record
else:
print("the record not analyzed")
else:
print("The type or referral name wasnt registered yet")
print("Data is not received!")
#print(record.getState())
return None
"""def receiveData(self, type, referral_name, data):

View File

@ -20,18 +20,6 @@
/*addData("name", "Balazs", true);
getData("name");*/
});
function message(label, data) {
if(label === "price_change") {
sendMessage("changed_now")
return "I update my price - "+label+"; DATA - "+data
}
if(label === "test") {
return "MAIN GOT TEST MESSAGE"+"; DATA - "+data
}
}
</script>
</head>
<body>

18
log.py
View File

@ -3,6 +3,9 @@ import os.path
import datetime
import html
from core.messenger.broadcast import Broadcast
from core.registration.record import *
from log_event_codes import loge_codes
import base
@ -82,16 +85,17 @@ class Log():
# IT IS FREEZE BY EVENT (runJavascript cant execute lot of request in one time!
if type.upper() != "EVENT":
dict = {}
dict["type"] = type.upper()
dict["event_code"] = str(event_code)
d = {"type": type.upper(), "event_code": str(event_code)}
msg = msg.replace('\\', '\\\\')
msg = msg.replace('\'', "")
dict["msg"] = msg
d["msg"] = msg
d["event_state"] = str(event_state)
d["date"] = str(dnow)
r = Record(RecordHeader("message", "logs", ["sight-admin"]), RecordData(d))
msg_bc = Broadcast()
msg_bc.sendMessage(r)
dict["event_state"] = str(event_state)
dict["date"] = str(dnow)
base.sights.sendMessage("logs", ["sight-admin"], dict)
#base.sights.sendMessage("logs", ["sight-admin"], dict)
""" LOG FILE WRITING """

View File

@ -35,10 +35,11 @@
});
function recieveMessage(referral_name, data) {
if(referral_name === "price_change")
alert("MAIN got from OTHER (price_change): "+referral_name + " " + data.account_name+ " " + data.amount + " -> 12500")
if(referral_name === "price_change") {
alert("MAIN got from OTHER (price_change): " + referral_name + " " + data.account_name + " " + data.amount + " -> 12500")
data.amount = 12500
sendMessage("updated", data , ["other"])
sendMessage("updated", data, ["other"])
}
}
/*function recieveMessage(referral_name, data) {

View File

@ -3,8 +3,12 @@ from callhandler import CallHandler
from browser import Browser
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QMainWindow, QWidget, QVBoxLayout
from PyQt6.QtCore import QThread, QObject, pyqtSignal as Signal, pyqtSlot as Slot
import time
class Sight(QWidget):
js_work_requested = Signal(str)
def __init__(self, id, page):
super().__init__()
@ -13,6 +17,7 @@ class Sight(QWidget):
self.data = {} # private data(s) of the sight
self.children = []
self.parent = None
self.js_worker = self.JsRunWorker()
base.data["active_sight"] = self.id
self.title = id
@ -37,8 +42,28 @@ class Sight(QWidget):
self.setLayout(self.layout)
def runJs(self,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)
def closeEvent(self, event):
self.js_worker.dont_work()
self.js_worker_thread.quit()
base.sights.close(self.id)
def getParent(self):
@ -79,3 +104,38 @@ class Sight(QWidget):
return self.data[key]
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)

View File

@ -40,6 +40,7 @@ class SightFactory():
if self.checkKey(id):
self.list[id].show()
log.byCode("SF1000E","The '"+str(id)+"' sight is showed!")
self.list[id].st()
return True
log.byCode("SF1001W", "This '"+str(id)+"' id isn't exist to show!")
return False