diff --git a/admin/base/content/logs/content.html b/admin/base/content/logs/content.html
index 4b1141e..5569c5d 100644
--- a/admin/base/content/logs/content.html
+++ b/admin/base/content/logs/content.html
@@ -5,7 +5,6 @@
});
function message(label,data) {
-
/* DON'T PUT ANY WINDOW.SIGHT.CONSOLE function or other one which call the logs because causing infinity loop */
if(label === "logs") {
//alert(data)
diff --git a/admin/base/content/main/content.html b/admin/base/content/main/content.html
deleted file mode 100644
index 5fc9920..0000000
--- a/admin/base/content/main/content.html
+++ /dev/null
@@ -1,3 +0,0 @@
-Create an "Other" sight!
-
-Create an "Other" no id sight!
\ No newline at end of file
diff --git a/admin/base/content/main_text/content.html b/admin/base/content/main_text/content.html
deleted file mode 100644
index cddb42e..0000000
--- a/admin/base/content/main_text/content.html
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
This is a sentence.
-
-
-
-
\ No newline at end of file
diff --git a/admin/base/content/main_text/test.css b/admin/base/content/main_text/test.css
deleted file mode 100644
index 11c8899..0000000
--- a/admin/base/content/main_text/test.css
+++ /dev/null
@@ -1,3 +0,0 @@
-#example {
- background-color: yellow;
-}
\ No newline at end of file
diff --git a/admin/base/main.html b/admin/base/main.html
index 84a08a5..a14c41d 100644
--- a/admin/base/main.html
+++ b/admin/base/main.html
@@ -22,17 +22,6 @@
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
- }
- }
-
diff --git a/base.py b/base.py
index c2fa15c..7b65720 100644
--- a/base.py
+++ b/base.py
@@ -3,10 +3,18 @@ import os
import platform
import configparser
from log import Log
+
+print("---- [BOOT] ----")
+from core.registration.registrar import Registrar
+registrar = Registrar()
+registrar.registry().register("log","display")
+registrar.registry().register("console","display")
+print("---- [END OF BOOT] ----")
+
log = Log(3)
log.debugOn()
log.debug_level = 3
-log.eventOff()
+log.eventOn()
from mouseevents import MouseEvents
from pynput import mouse
@@ -14,10 +22,16 @@ from sightfactory import SightFactory
from PyQt6.QtWidgets import QApplication
from pynput.mouse import Controller
import subprocess
+import time
+
+
+def getTimeStamp():
+ return int(time.time())
def init():
global sights, mousectrl, app, data
data = {}
+ data["started_time"] = int(time.time())
#init the basic values
app = QApplication(sys.argv)
mousectrl = Controller()
@@ -66,12 +80,11 @@ def loadConfigTemplate():
def start():
# Creating admin sight
- sights.create("sight-admin", "main")
- sights.show("sight-admin")
+ #sights.create("sight-admin", "main")
+ #sights.show("sight-admin")
# Creating the main Sight
sights.create("main", data["default_template_page"])
sights.show("main")
-
-
+
app.exec()
diff --git a/callhandler.py b/callhandler.py
index 0cf2069..88152d6 100644
--- a/callhandler.py
+++ b/callhandler.py
@@ -3,6 +3,8 @@ import random
import base
from base import log
from PyQt6.QtCore import QObject, pyqtSlot
+from core.messenger.broadcast import Broadcast
+from core.registration.record import *
class CallHandler(QObject):
@@ -14,10 +16,11 @@ class CallHandler(QObject):
def console(self, msg):
log.console(msg)
- @pyqtSlot(str, result=str)
+ """@pyqtSlot(str, result=str)
def test2(self, t):
print(t+"s")
return t + "_return"
+ """
@pyqtSlot(result=str)
def getDefaultTemplate(self):
@@ -37,11 +40,11 @@ class CallHandler(QObject):
@pyqtSlot(int, int)
def setSize(self, width, height):
- self.sight.resize(width,height);
+ self.sight.resize(width, height);
- @pyqtSlot(int,int)
+ @pyqtSlot(int, int)
def setPosition(self, x, y):
- self.sight.move(x,y)
+ self.sight.move(x, y)
@pyqtSlot(result=str)
def system(self):
@@ -56,7 +59,6 @@ class CallHandler(QObject):
self.sight.addChild(new_id)
""" The child remember its parent. When the child is closed the parent will be know about that. """
base.sights.get(new_id).setParent(self.sight.getId())
- print("PARENT " + str(base.sights.get(new_id).getParent()))
return new_id;
@pyqtSlot(str, str, bool)
@@ -75,7 +77,7 @@ class CallHandler(QObject):
@pyqtSlot()
def activeSight(self):
if base.data["active_sight"] != self.sight.getId():
- print("Active - " + self.sight.getId())
+ log.byCode("CLA1000E", "Active Sight is " + self.sight.getId())
base.data["active_sight"] = self.sight.getId()
@pyqtSlot()
@@ -114,8 +116,6 @@ class CallHandler(QObject):
def endmove(self):
base.data["move"] = False
-
-
@pyqtSlot()
def resize(self):
new_height = base.mousectrl.position[1] - self.sight.pos().y()
@@ -126,7 +126,7 @@ class CallHandler(QObject):
new_width = 250
self.sight.resize(new_width, new_height)
- @pyqtSlot(str, str, str)
+ """@pyqtSlot(str, str, str)
def message(self, label, sight_id_json, data):
sight_list = json.loads(sight_id_json)
@@ -136,7 +136,23 @@ class CallHandler(QObject):
else:
for sight_id in sight_list:
if base.sights.checkKey(sight_id):
- base.sights.get(sight_id).browser.page().runJavaScript("message('" + label + "', '"+data+"')", self.ready)
+ base.sights.get(sight_id).browser.page().runJavaScript("message('" + label + "', '"+data+"')", self.ready)"""
+
+ @pyqtSlot(str, str)
+ def register(self, type, referral_name):
+ base.registrar.registry().register(type, referral_name)
+
+ @pyqtSlot(str, str, str, str)
+ def dataReceiver(self, h_type, h_referral_data, d_json_data, receiver_array=None):
+ if receiver_array is None:
+ receiver_array = []
+
+ if h_type == "message":
+ r = Record(RecordHeader(h_type, h_referral_data, receiver_array), RecordData(d_json_data))
+ msg = Broadcast()
+ msg.sendMessage(r)
+ # base.sights.get("main").browser.page().runJavaScript("receiveData('" + type + "', '" + referral_data + "', '"+json_data+"')", self.ready)
+ # print("RECEIVEEEE " + base.registrar.receiveData(type, referral_data, json_data))
def ready(self, returnValue):
if returnValue is not None:
diff --git a/core/messenger/broadcast.py b/core/messenger/broadcast.py
new file mode 100644
index 0000000..87b6314
--- /dev/null
+++ b/core/messenger/broadcast.py
@@ -0,0 +1,22 @@
+import base
+
+
+class Broadcast:
+ def __init__(self):
+ print("MESSENGER")
+
+ 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)
+ else:
+ if sight.getPageId() in record.getHeader().getReceivers():
+ sight.browser.page().runJavaScript(
+ "receiveData('" + record.getHeader().getType() + "', '" + record.getHeader().getReferralName() + "', '" + record.getData(
+ True) + "')", self.ready)
+
+ def ready(self, returnValue):
+ if returnValue is not None:
+ print(returnValue)
diff --git a/core/registration/policy.py b/core/registration/policy.py
new file mode 100644
index 0000000..e69de29
diff --git a/core/registration/record.py b/core/registration/record.py
new file mode 100644
index 0000000..337126d
--- /dev/null
+++ b/core/registration/record.py
@@ -0,0 +1,114 @@
+import json
+
+
+class RecordHeader():
+ __h_type = ""
+ __h_referral_name = ""
+ __h_receiver_list = []
+
+ def __init__(self, header_type: str, referral_name: str, receiver_list=None):
+ if receiver_list is None:
+ receiver_list = []
+ self.__h_receiver_list = receiver_list
+
+ self.__h_type = header_type
+ self.__h_referral_name = referral_name
+
+ def analyze(self):
+ if type(self.__h_type) != str:
+ print("wrong type value")
+ return False
+
+ self.__h_receiver_list = json.loads(self.__h_receiver_list)
+ return True
+
+ def getType(self):
+ return self.__h_type
+
+ def getReferralName(self):
+ return self.__h_referral_name
+
+ def getReceivers(self):
+ return self.__h_receiver_list
+
+
+
+# NO LIST [] just DICT {} any list in the dict will cause error.
+def replaceDictCharacters(d):
+ for key, value in d.items():
+ if type(value) == dict:
+ d[key] = replaceDictCharacters(value)
+ else:
+ d[key] = str(value).replace('\\', '\\').replace('\'', "")
+ return d
+
+
+class RecordData():
+ __data = ""
+ __data_json = ""
+
+ def __init__(self, user_data):
+ if user_data is None:
+ user_data = {}
+ self.__data = user_data
+ self.__data_json = ""
+
+ def analyze(self):
+ if type(self.__data) == str:
+ try:
+ # CREATING PYTHON DICT
+ self.__data = json.loads(self.__data)
+ # CREATING JSON STRING (for sight.js)
+ except ValueError:
+ print("wrong data value")
+ return False
+ if type(self.__data) == dict:
+ self.__data_json = json.dumps(replaceDictCharacters(self.__data))
+ return True
+ return False
+
+ def getData(self):
+ return self.__data
+
+ def getDataJson(self):
+ return self.__data_json
+
+
+class Record():
+ __state = "CREATING"
+ __r_header = ""
+
+ def __init__(self, record_header, record_data):
+ if record_header.__class__.__name__ != "RecordHeader":
+ print("ERROR IT IS NOT A RECORD HEADER")
+ self.__state = "ERROR"
+ return
+ if record_data.__class__.__name__ != "RecordData":
+ print("ERROR IT IS NOT A RECORD DATA")
+ self.__state = "ERROR"
+ return
+ self.__r_header = record_header
+ self.__r_data = record_data
+ self.__state = "NEW"
+
+ def analyze(self):
+ if self.__state == "NEW":
+ if self.__r_header.analyze() is True and self.__r_data.analyze() is True:
+ self.__state = "ANALYZED"
+ else:
+ self.__state = "ANALYZE_FAILED"
+
+ def getState(self):
+ return self.__state
+
+ def getHeader(self):
+ if self.__state == "ANALYZED":
+ return self.__r_header
+ return None
+
+ def getData(self, json_data=False):
+ if self.__state == "ANALYZED":
+ if json_data:
+ return self.__r_data.getDataJson()
+ return self.__r_data.getData()
+ return None
diff --git a/core/registration/registrar.py b/core/registration/registrar.py
new file mode 100644
index 0000000..7e71230
--- /dev/null
+++ b/core/registration/registrar.py
@@ -0,0 +1,58 @@
+from core.registration.record import *
+from core.registration.registry import Registry
+
+class Registrar:
+ __registry = ""
+
+ def __init__(self):
+ print("Registrar init")
+ self.__registry = Registry()
+
+ def registry(self):
+ return self.__registry
+
+ def checkData(self, record):
+ record.analyze()
+ if record.getState() == "ANALYZED":
+ if self.__registry.exist(record.getHeader().getType(), record.getHeader().getReferralName()):
+ 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!")
+ return None
+
+ """def receiveData(self, type, referral_name, data):
+ if self.__registry.exist(type, referral_name):
+ record = Record(RecordHeader(type, referral_name), RecordData(data))
+ record.analyze()
+ if record.getState() == "ANALYZED":
+ print("RECEIVED")
+ print(record.getData())
+ print(record.getData(True))
+ return True
+ else:
+ print("the record not analyzed")
+ else:
+ print("The type or referral name wasnt registered yet")
+ print("Data is not received!")
+ return False
+
+ def sendData(self, type, referral_name, data):
+ if self.__registry.exist(type, referral_name):
+ record = Record(RecordHeader(type, referral_name), RecordData(data))
+ record.analyze()
+ if record.getState() == "ANALYZED":
+ print("SENT")
+ print(record.getData())
+ print(record.getData(True))
+ return True
+ else:
+ print("the record not analyzed")
+ else:
+ print("The type or referral name wasnt registered yet")
+ print("Data is not sent!")
+ return False"""
\ No newline at end of file
diff --git a/core/registration/registry.py b/core/registration/registry.py
new file mode 100644
index 0000000..66359b4
--- /dev/null
+++ b/core/registration/registry.py
@@ -0,0 +1,53 @@
+from typing import Set, List, Any
+
+from core.registration.types import types
+from core.registration.record import RecordHeader
+
+class Registry:
+ __registry_store = {}
+
+ def __init__(self):
+ self.__registry_store = self.__RegistryStore()
+
+ def register(self, type, referral_name, parameters=None, policy=""):
+ if parameters is None:
+ parameters = {}
+
+ if types.exist(type):
+ self.__registry_store.add(type, referral_name)
+ print("["+type+"] - " + referral_name + " registered.")
+ return True
+ else:
+ print("["+type+"] - " + referral_name + " couldn't registered. Missing the type.")
+ return False
+
+ def unregister(self, type, referral_name):
+ self.__registry_store.remove(type,referral_name)
+
+ def exist(self, type, referral_name):
+ return self.__registry_store.exist(type, referral_name)
+ class __RegistryStore:
+ __store = {}
+
+ def __init__(self):
+ print("Registry Store")
+
+ def add(self, type, referral_name):
+ if type not in self.__store:
+ self.__store[type] = {}
+ if referral_name not in self.__store[type]:
+ self.__store[type][referral_name] = {}
+ self.__store[type][referral_name]["policy"] = ""
+ self.__store[type][referral_name]["parameters"] = ""
+ else:
+ print("This '"+referral_name+"' referral in this '"+type+"' type is already exist!")
+
+ def exist(self, type, referral_name):
+ if type not in self.__store or referral_name not in self.__store[type]:
+ return False
+ return True
+
+ def remove(self, type, referral_name):
+ self.__store[type].pop(referral_name)
+ if len(self.__store[type]) == 0:
+ self.__store.pop(type)
diff --git a/core/registration/types.py b/core/registration/types.py
new file mode 100644
index 0000000..9e00b44
--- /dev/null
+++ b/core/registration/types.py
@@ -0,0 +1,13 @@
+class Types():
+ __types = {}
+
+ def __init__(self):
+ self.__types["message"] = []
+ self.__types["log"] = []
+ self.__types["console"] = []
+
+ def exist(self, type):
+ return type in self.__types
+
+
+types = Types()
\ No newline at end of file
diff --git a/core/template_files/js/sight.js b/core/template_files/js/sight.js
index 13bba14..bf3aedf 100644
--- a/core/template_files/js/sight.js
+++ b/core/template_files/js/sight.js
@@ -133,8 +133,25 @@ label = any unique short message (one word)
sight_id_array = a id list of those sight where the message will be sent to
data = it is a javascript dict (this can contains any key and value) which will be sent
*/
-function sendMessage(label, sight_id_array = [], data = {}) {
+/*function sendMessage(label, sight_id_array = [], data = {}) {
window.sight.message(label, JSON.stringify(sight_id_array), JSON.stringify(data));
+}*/
+
+function sendMessage(referral_name, data, to) {
+ sendData("message", referral_name, data, to)
+}
+
+function sendData(type, referral_name, data, receiver_array = []) {
+ window.sight.dataReceiver(type, referral_name, JSON.stringify(data), JSON.stringify(receiver_array))
+}
+
+function receiveData(type, referral_name, data) {
+ data = JSON.parse(data);
+ if(type === "message") {
+ if (recieveMessage !== "undefined") {
+ recieveMessage(referral_name, data)
+ }
+ }
}
function eventMsg(label, where, data) {
diff --git a/log.py b/log.py
index a7a0128..9ee223d 100644
--- a/log.py
+++ b/log.py
@@ -80,6 +80,20 @@ class Log():
if len(wheres) == 0:
wheres = self.whereis()
+ # 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)
+ msg = msg.replace('\\', '\\\\')
+ msg = msg.replace('\'', "")
+ dict["msg"] = msg
+
+ dict["event_state"] = str(event_state)
+ dict["date"] = str(dnow)
+ base.sights.sendMessage("logs", ["sight-admin"], dict)
+
+
""" LOG FILE WRITING """
if type not in self.debug_modes[0] and type.upper() != "EVENT":
filename = str(dnow.strftime("%d"))+"-"+str(dnow.strftime("%m"))+"-"+str(dnow.year)+".log"
@@ -98,6 +112,8 @@ class Log():
f.close()
""" END LOG FILE WRITING """
+
+
""" LOG DISPLAY """
if serious_error is False:
if type.upper() == "EVENT" and self.event_on is False:
@@ -105,13 +121,7 @@ class Log():
if type not in self.debug_modes[0] and self.debug_level != 3:
if self.debug is True and type not in self.debug_modes[self.debug_level]:
return
- dict = {}
- dict["type"] = type.upper()
- dict["event_code"] = str(event_code)
- dict["msg"] = msg.replace('\\', '\\\\')
- dict["event_state"] = str(event_state)
- dict["date"] = str(dnow)
- base.sights.sendMessage("logs", ["sight-admin"], dict)
+
print("["+type.upper()+"]",event_code, str(msg), wheres, "["+str(dnow)+"]", sep='\t')
""" END LOG DISPLAY """
diff --git a/log_event_codes.py b/log_event_codes.py
index 8250370..4b14fe3 100644
--- a/log_event_codes.py
+++ b/log_event_codes.py
@@ -32,6 +32,8 @@ loge_codes.addEventCode("BLC1001S", "The admin html file content is loaded in th
loge_codes.addEventCode("SF1000E", "The sight is being created.","CREATING")
loge_codes.addEventCode("SF1000W", "The sight is already exist with that ID. It can't be create a new one with that id.s")
loge_codes.addEventCode("SF1001W", "The sight ID is not exist. It can't be shown!")
+loge_codes.addEventCode("CLA1000E", "New Active Sight.")
+
#EVENT BASED
loge_codes.addEventCode("MES1000E", "Mouse dragged the Sight and move to other position.", "MOVING")
diff --git a/main.py b/main.py
index 9a8b87d..de270a6 100644
--- a/main.py
+++ b/main.py
@@ -1,2 +1,28 @@
+from core.registration.record import *
+
+from core.registration.registrar import Registrar
+
+#record = Record(RecordHeader("message", "say_name"),RecordData({"name":"Bala\zs", "details" : {"born" : "budapest"}}))
+#record0 = Record(RecordHeader("message", "say_name"),RecordData('{"name":"Balazs2", "details" : [{"born" : "budapest2"}]}'))
+"""
+print(record.getData())
+record.analyze()
+
+print(record.getState())
+
+if record.getState() == "ANALYZED":
+ print(record.getData())
+ print(record.getData(True))
+"""
+"""
+registrar = Registrar()
+registrar.registry().register("message","say_name")
+
+user_data = '{"name":"Balazs2", "details" : {"born" : "budapest2"}}'
+user_data2 = {"name":"Balazs", "details" : {"born" : "budapest"}}
+print(registrar.receiveData("message","say_name", user_data))
+print(registrar.sendData("message","say_name", user_data2))
+"""
+
import base
base.init()
diff --git a/place/templates/base/main.html b/place/templates/base/main.html
index 7aa40f1..cb15c3e 100644
--- a/place/templates/base/main.html
+++ b/place/templates/base/main.html
@@ -22,18 +22,40 @@
$(document).ready(function(){
/*addData("name", "Balazs", true);
getData("name");*/
+ window.sight.register("message","price_change")
+ window.sight.register("message","updated")
+ /*dict = {}
+ dict["account_id"] = 10227;
+ dict["account_name"] = "Test Bank";
+ dict["details"] = {};
+ dict["details"]["phone"] = 123456789
+ dict["details"]["place"] = "New York"
+
+ sendMessage("test",dict, ["other"])*/
});
- function message(label, data) {
+ 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")
+ data.amount = 12500
+ sendMessage("updated", data , ["other"])
+ }
+
+ /*function recieveMessage(referral_name, data) {
+
+ alert(referral_name + " " + data.account_name)
+ }*/
+
+ /*function message(label, data) {
if(label === "price_change") {
- sendMessage("changed_now")
+ //sendMessage("changed_now")
return "I update my price - "+label+"; DATA - "+data
}
if(label === "test") {
return "MAIN GOT TEST MESSAGE"+"; DATA - "+data
}
- }
+ }*/
diff --git a/place/templates/base/other.html b/place/templates/base/other.html
index fe08795..5682d21 100644
--- a/place/templates/base/other.html
+++ b/place/templates/base/other.html
@@ -9,23 +9,29 @@
diff --git a/sight.py b/sight.py
index 8351e35..b60af0e 100644
--- a/sight.py
+++ b/sight.py
@@ -44,6 +44,9 @@ class Sight(QWidget):
def getParent(self):
return self.parent
+ def getPageId(self):
+ return self.page
+
def setParent(self, id):
self.parent = id
diff --git a/sightfactory.py b/sightfactory.py
index 42990fa..d202cae 100644
--- a/sightfactory.py
+++ b/sightfactory.py
@@ -33,7 +33,6 @@ class SightFactory():
return None
if len(id) == 0:
id = self.createUniqueId()
-
self.list[id] = Sight(id, page)
return id
@@ -71,7 +70,6 @@ class SightFactory():
if closeChildrenToo:
self.closeChildren(id)
if self.checkKey(id):
- self.eventMessage("CLOSING", "sight", id)
if id == "main":
print("Program Exit!")
base.app.exit(0)
@@ -87,7 +85,6 @@ class SightFactory():
def sendMessage(self, label, sight_list, data):
data = json.dumps(data)
- print(data)
if len(sight_list) == 0:
for sight in self.list.values():
sight.browser.page().runJavaScript("message('" + label + "', '"+str(data)+"')", self.ready)