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"> <link rel="stylesheet" type="text/css" href="content/logs/style.css">
<script> <script>
$(document).ready(function(){ $(document).ready(function(){
//getData("name", true); //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 */ /* 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) //alert(data)
var data = JSON.parse(data); //var data = JSON.parse(data);
var div = document.getElementById('display_logs'); var div = document.getElementById('display_logs');
div.innerHTML += "["+data.type+"]"+" ("+data.event_code+") "+data.msg+" ("+data.date+")<br\>"; div.innerHTML += "["+data.type+"]"+" ("+data.event_code+") "+data.msg+" ("+data.date+")<br\>";

View File

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

View File

@ -3,19 +3,27 @@ import base
class Broadcast: class Broadcast:
def __init__(self): def __init__(self):
print("MESSENGER") print("")
def sendMessage(self, record): def sendMessage(self, record):
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( """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: else:
if sight.getPageId() in record.getHeader().getReceivers(): 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( "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): def ready(self, returnValue):
if returnValue is not None: if returnValue is not None:

View File

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

View File

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

View File

@ -20,18 +20,6 @@
/*addData("name", "Balazs", true); /*addData("name", "Balazs", true);
getData("name");*/ 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> </script>
</head> </head>
<body> <body>

18
log.py
View File

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

View File

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

View File

@ -3,8 +3,12 @@ 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
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__()
@ -13,6 +17,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()
base.data["active_sight"] = self.id base.data["active_sight"] = self.id
self.title = id self.title = id
@ -37,8 +42,28 @@ class Sight(QWidget):
self.setLayout(self.layout) 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) # use when the frameSupported is False (for instance wayland)
def closeEvent(self, event): def closeEvent(self, event):
self.js_worker.dont_work()
self.js_worker_thread.quit()
base.sights.close(self.id) base.sights.close(self.id)
def getParent(self): def getParent(self):
@ -79,3 +104,38 @@ class Sight(QWidget):
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)

View File

@ -40,6 +40,7 @@ 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