#wip: Doing HTTPServersManager.

This commit is contained in:
mbruzon 2026-05-28 18:09:12 +02:00
parent 4a97794e2c
commit ba3e8b4c59
10 changed files with 82 additions and 27 deletions

View File

@ -0,0 +1,52 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from abc import ABC, abstractmethod
from typing import Any, Self, Optional, Sequence
from Interfaces.Application.AnPInterface import AnPInterface
from Utils.Common import Common
class HTTPServersAbstract(ABC):
DEFAULT_PORT:int = 8000
DEFAULT_HOST:str = ""
def __init__(self:Self, anp:Any, inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None) -> None:
self.anp:AnPInterface = anp
self.__inputs:dict[str, Any|None] = Common.get_dictionary(inputs)
self.host:str = self.DEFAULT_PORT
self.port:int = self.DEFAULT_HOST
self._print_data:dict[str, Any|None] = {
"port": self.port,
"host": self.host
}
self.update()
def __update_print_data(self:Self) -> None:
self._print_data["port"] = self.port
self._print_data["host"] = self.host
@abstractmethod
def start(self:Self) -> None:pass
@abstractmethod
def close(self:Self) -> None:pass
def update(self:Self) -> None:
self.close()
self.port = self.anp.settings.get(("http_server_port", "http_port", "port"), self.__inputs, self.DEFAULT_PORT)
self.host = self.anp.settings.get(("http_server_host", "http_host", "host"), self.__inputs, self.DEFAULT_HOST)
self.__update_print_data()
self.anp.settings.get(("http_server_autostart", "http_autostart", "autostart")) and self.start()
def reset(self:Self) -> None:
self.port = self.DEFAULT_PORT
self.host = self.DEFAULT_HOST
self.__update_print_data()
self.update()

View File

@ -5,7 +5,7 @@ from typing import Any, Self, Optional, Sequence
from abc import ABC, abstractmethod
from Application.Event import Event
class WebSocketsServerAbstract(ABC):
class WebSocketServersAbstract(ABC):
def __init__(self:Self, inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None) -> None:
self.on_new_client:Event = Event()

View File

@ -14,7 +14,7 @@ from Managers.ControllersManager import ControllersManager
from Managers.DispatchesManager import DispatchesManager
from Managers.IndexesManager import IndexesManager
from Managers.RoutesManager import RoutesManager
from Managers.WebSocketsServerManager import WebSocketsServerManager
from Managers.WebSocketServersManager import WebSocketServersManager
from Drivers.HTTPDriver import HTTPDriver
from Utils.Common import Common
from Utils.Patterns import RE
@ -46,7 +46,7 @@ class AnP:
self.dispatches:DispatchesManager = DispatchesManager(self)
self.indexes:IndexesManager = IndexesManager(self)
self.routes:RoutesManager = RoutesManager(self)
self.web_sockets_servers:WebSocketsServerManager = WebSocketsServerManager(self)
self.web_socket_servers:WebSocketServersManager = WebSocketServersManager(self)
self.http_server:HTTPDriver = HTTPDriver(self)
def update(self:Self) -> None:
@ -60,7 +60,7 @@ class AnP:
self.dispatches.update()
self.indexes.update()
self.routes.update()
self.web_sockets_servers.update()
self.web_socket_servers.update()
self.http_server.update()
def reset(self:Self) -> None:
@ -74,12 +74,12 @@ class AnP:
self.dispatches.reset()
self.indexes.reset()
self.routes.reset()
self.web_sockets_servers.reset()
self.web_socket_servers.reset()
self.http_server.reset()
def close(self:Self) -> None:
self.__working = False
self.web_sockets_servers.close()
self.web_socket_servers.close()
self.http_server.close()
def working(self:Self) -> bool:

View File

@ -7,8 +7,9 @@ from Models.RequestModel import RequestModel
from Utils.Common import Common
from threading import Thread
from http.server import BaseHTTPRequestHandler, HTTPServer
from Abstracts.HTTPServersAbstract import HTTPServersAbstract
class HTTPDriver:
class HTTPDriver(HTTPServersAbstract):
class HTTPRequestHandler(BaseHTTPRequestHandler):
@ -92,8 +93,7 @@ class HTTPDriver:
self.anp:AnPInterface = anp
self.__inputs:dict[str, Any|None] = Common.get_dictionary(inputs)
self.__port:int = 8000
self.__host:str = ""
super().__init__(inputs)
self.__server:HTTPServer|None = None
self.__thread:Thread|None = None

View File

@ -3,19 +3,18 @@
from threading import Thread
from typing import Any, Self, Sequence, Optional
from Abstracts.WebSocketsServerAbstract import WebSocketsServerAbstract
from Abstracts.WebSocketServersAbstract import WebSocketServersAbstract
from Abstracts.ModelAbstract import ModelAbstract
from websockets.sync.server import serve as server_serve
from websockets import Server as WebSocketServer, ClientConnection as WebSocketClient
from Interfaces.Application.AnPInterface import AnPInterface
from Utils.Checks import Check
class WebSocketServerDriver(WebSocketsServerAbstract, ModelAbstract):
class WebSocketServerDriver(WebSocketServersAbstract, ModelAbstract):
def __init__(self:Self, anp:AnPInterface, inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None) -> None:
super().__init__(anp, inputs)
self.anp:AnPInterface = anp
super().__init__(inputs)
self.__server:WebSocketServer
self.__clients:dict[int, WebSocketClient] = {}
self.__host:str = anp.settings.get(("web_socket_server_host", "host"), inputs, "")

View File

@ -12,7 +12,7 @@ from Interfaces.Managers.ControllersManagerInterface import ControllersManagerIn
from Interfaces.Managers.DispatchesManagerInterface import DispatchesManagerInterface
from Interfaces.Managers.IndexesManagerInterface import IndexesManagerInterface
from Interfaces.Managers.RoutesManagerInterface import RoutesManagerInterface
from Interfaces.Managers.WebSocketsServerManagerInterface import WebSocketsServerManagerInterface
from Interfaces.Managers.WebSocketServersManagerInterface import WebSocketServersManagerInterface
class AnPInterface(ABC):
@ -26,7 +26,7 @@ class AnPInterface(ABC):
self.dispatches:DispatchesManagerInterface = None
self.indexes:IndexesManagerInterface = None
self.routes:RoutesManagerInterface = None
self.web_sockets_servers:WebSocketsServerManagerInterface = None
self.web_socket_servers:WebSocketServersManagerInterface = None
@abstractmethod
def update(self:Self) -> None:pass

View File

@ -3,10 +3,10 @@
from typing import Any, Self, Optional, Sequence
from abc import ABC, abstractmethod
from Abstracts.WebSocketsServerAbstract import WebSocketsServerAbstract
from Abstracts.WebSocketServersAbstract import WebSocketServersAbstract
from Application.Event import Event
class WebSocketsServerManagerInterface(ABC):
class WebSocketServersManagerInterface(ABC):
def __init__(self:Self, anp:Any, inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None) -> None:
self.on_new_client:Event = None
@ -30,7 +30,7 @@ class WebSocketsServerManagerInterface(ABC):
def remove(self:Self, names:str|Sequence[str]) -> None:pass
@abstractmethod
def get(self:Self, name:str) -> WebSocketsServerAbstract|None:pass
def get(self:Self, name:str) -> WebSocketServersAbstract|None:pass
@abstractmethod
def send(self:Self,

View File

View File

@ -3,18 +3,18 @@
from typing import Any, Self, Optional, Sequence
from Interfaces.Application.AnPInterface import AnPInterface
from Abstracts.WebSocketsServerAbstract import WebSocketsServerAbstract
from Abstracts.WebSocketServersAbstract import WebSocketServersAbstract
from Application.Event import Event
from Models.RequestModel import RequestModel
from Utils.Checks import Check
from Utils.Common import Common
class WebSocketsServerManager:
class WebSocketServersManager:
def __init__(self:Self, anp:AnPInterface, inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None) -> None:
self.anp:AnPInterface = anp
self.__web_sockets:dict[str, WebSocketsServerAbstract] = {}
self.__web_sockets:dict[str, WebSocketServersAbstract] = {}
self.on_new_client:Event = Event()
self.on_message:Event = Event()
self.on_close:Event = Event()
@ -42,7 +42,7 @@ class WebSocketsServerManager:
web_socket.close()
self.__web_sockets = {}
def __set(self:Self, name:str, web_socket:WebSocketsServerAbstract) -> None:
def __set(self:Self, name:str, web_socket:WebSocketServersAbstract) -> None:
self.__web_sockets[name] = web_socket
@ -61,7 +61,7 @@ class WebSocketsServerManager:
value:Any|None
for key, value in subinputs.items():
if isinstance(value, WebSocketsServerAbstract):
if isinstance(value, WebSocketServersAbstract):
if overwrite or key not in self.__web_sockets:
self.__set(key, value)
elif Check.is_dictionary(value):
@ -72,9 +72,9 @@ class WebSocketsServerManager:
if _type is None:
continue
Class:type[WebSocketsServerAbstract] = self.anp.models.get(WebSocketsServerAbstract, _type)
Class:type[WebSocketServersAbstract] = self.anp.models.get(WebSocketServersAbstract, _type)
Class and issubclass(Class, WebSocketsServerAbstract) and self.__set(key, Class(self.anp, value))
Class and issubclass(Class, WebSocketServersAbstract) and self.__set(key, Class(self.anp, value))
def remove(self:Self, names:str|Sequence[str]) -> None:
for name in names if Check.is_array(names) else [names]:
@ -85,7 +85,7 @@ class WebSocketsServerManager:
except Exception as exception:
self.anp.exception(exception, "web_socket_server_close_exception", {"name": name})
def get(self:Self, name:str) -> WebSocketsServerAbstract|None:
def get(self:Self, name:str) -> WebSocketServersAbstract|None:
return self.__web_sockets.get(name)
def send(self:Self,
@ -108,7 +108,7 @@ class WebSocketsServerManager:
except Exception as exception:
self.anp.exception(exception, "web_socket_server_send_exception", {"name": name})
def __receive(self:Self, web_socket:WebSocketsServerAbstract, client:int, raw_data:str, name:str) -> None:
def __receive(self:Self, web_socket:WebSocketServersAbstract, client:int, raw_data:str, name:str) -> None:
data:dict[str, Any|None] = Common.data_decode(raw_data)

View File

@ -0,0 +1,4 @@
@rem @echo off
cd %~dp0..\Python
python3 run.py
cd ..\Tools