#wip: Doing HTTPServersManager.
This commit is contained in:
parent
4a97794e2c
commit
ba3e8b4c59
52
Python/Abstracts/HTTPServersAbstract.py
Normal file
52
Python/Abstracts/HTTPServersAbstract.py
Normal 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()
|
||||
@ -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()
|
||||
@ -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:
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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, "")
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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,
|
||||
0
Python/Managers/HTTPServersManager.py
Normal file
0
Python/Managers/HTTPServersManager.py
Normal 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)
|
||||
|
||||
4
Tools/run.server.python.bat
Normal file
4
Tools/run.server.python.bat
Normal file
@ -0,0 +1,4 @@
|
||||
@rem @echo off
|
||||
cd %~dp0..\Python
|
||||
python3 run.py
|
||||
cd ..\Tools
|
||||
Loading…
Reference in New Issue
Block a user