#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 abc import ABC, abstractmethod
|
||||||
from Application.Event import Event
|
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:
|
def __init__(self:Self, inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None) -> None:
|
||||||
self.on_new_client:Event = Event()
|
self.on_new_client:Event = Event()
|
||||||
@ -14,7 +14,7 @@ from Managers.ControllersManager import ControllersManager
|
|||||||
from Managers.DispatchesManager import DispatchesManager
|
from Managers.DispatchesManager import DispatchesManager
|
||||||
from Managers.IndexesManager import IndexesManager
|
from Managers.IndexesManager import IndexesManager
|
||||||
from Managers.RoutesManager import RoutesManager
|
from Managers.RoutesManager import RoutesManager
|
||||||
from Managers.WebSocketsServerManager import WebSocketsServerManager
|
from Managers.WebSocketServersManager import WebSocketServersManager
|
||||||
from Drivers.HTTPDriver import HTTPDriver
|
from Drivers.HTTPDriver import HTTPDriver
|
||||||
from Utils.Common import Common
|
from Utils.Common import Common
|
||||||
from Utils.Patterns import RE
|
from Utils.Patterns import RE
|
||||||
@ -46,7 +46,7 @@ class AnP:
|
|||||||
self.dispatches:DispatchesManager = DispatchesManager(self)
|
self.dispatches:DispatchesManager = DispatchesManager(self)
|
||||||
self.indexes:IndexesManager = IndexesManager(self)
|
self.indexes:IndexesManager = IndexesManager(self)
|
||||||
self.routes:RoutesManager = RoutesManager(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)
|
self.http_server:HTTPDriver = HTTPDriver(self)
|
||||||
|
|
||||||
def update(self:Self) -> None:
|
def update(self:Self) -> None:
|
||||||
@ -60,7 +60,7 @@ class AnP:
|
|||||||
self.dispatches.update()
|
self.dispatches.update()
|
||||||
self.indexes.update()
|
self.indexes.update()
|
||||||
self.routes.update()
|
self.routes.update()
|
||||||
self.web_sockets_servers.update()
|
self.web_socket_servers.update()
|
||||||
self.http_server.update()
|
self.http_server.update()
|
||||||
|
|
||||||
def reset(self:Self) -> None:
|
def reset(self:Self) -> None:
|
||||||
@ -74,12 +74,12 @@ class AnP:
|
|||||||
self.dispatches.reset()
|
self.dispatches.reset()
|
||||||
self.indexes.reset()
|
self.indexes.reset()
|
||||||
self.routes.reset()
|
self.routes.reset()
|
||||||
self.web_sockets_servers.reset()
|
self.web_socket_servers.reset()
|
||||||
self.http_server.reset()
|
self.http_server.reset()
|
||||||
|
|
||||||
def close(self:Self) -> None:
|
def close(self:Self) -> None:
|
||||||
self.__working = False
|
self.__working = False
|
||||||
self.web_sockets_servers.close()
|
self.web_socket_servers.close()
|
||||||
self.http_server.close()
|
self.http_server.close()
|
||||||
|
|
||||||
def working(self:Self) -> bool:
|
def working(self:Self) -> bool:
|
||||||
|
|||||||
@ -7,8 +7,9 @@ from Models.RequestModel import RequestModel
|
|||||||
from Utils.Common import Common
|
from Utils.Common import Common
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||||
|
from Abstracts.HTTPServersAbstract import HTTPServersAbstract
|
||||||
|
|
||||||
class HTTPDriver:
|
class HTTPDriver(HTTPServersAbstract):
|
||||||
|
|
||||||
class HTTPRequestHandler(BaseHTTPRequestHandler):
|
class HTTPRequestHandler(BaseHTTPRequestHandler):
|
||||||
|
|
||||||
@ -92,8 +93,7 @@ class HTTPDriver:
|
|||||||
|
|
||||||
self.anp:AnPInterface = anp
|
self.anp:AnPInterface = anp
|
||||||
self.__inputs:dict[str, Any|None] = Common.get_dictionary(inputs)
|
self.__inputs:dict[str, Any|None] = Common.get_dictionary(inputs)
|
||||||
self.__port:int = 8000
|
super().__init__(inputs)
|
||||||
self.__host:str = ""
|
|
||||||
self.__server:HTTPServer|None = None
|
self.__server:HTTPServer|None = None
|
||||||
self.__thread:Thread|None = None
|
self.__thread:Thread|None = None
|
||||||
|
|
||||||
|
|||||||
@ -3,19 +3,18 @@
|
|||||||
|
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from typing import Any, Self, Sequence, Optional
|
from typing import Any, Self, Sequence, Optional
|
||||||
from Abstracts.WebSocketsServerAbstract import WebSocketsServerAbstract
|
from Abstracts.WebSocketServersAbstract import WebSocketServersAbstract
|
||||||
from Abstracts.ModelAbstract import ModelAbstract
|
from Abstracts.ModelAbstract import ModelAbstract
|
||||||
from websockets.sync.server import serve as server_serve
|
from websockets.sync.server import serve as server_serve
|
||||||
from websockets import Server as WebSocketServer, ClientConnection as WebSocketClient
|
from websockets import Server as WebSocketServer, ClientConnection as WebSocketClient
|
||||||
from Interfaces.Application.AnPInterface import AnPInterface
|
from Interfaces.Application.AnPInterface import AnPInterface
|
||||||
from Utils.Checks import Check
|
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:
|
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.__server:WebSocketServer
|
||||||
self.__clients:dict[int, WebSocketClient] = {}
|
self.__clients:dict[int, WebSocketClient] = {}
|
||||||
self.__host:str = anp.settings.get(("web_socket_server_host", "host"), inputs, "")
|
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.DispatchesManagerInterface import DispatchesManagerInterface
|
||||||
from Interfaces.Managers.IndexesManagerInterface import IndexesManagerInterface
|
from Interfaces.Managers.IndexesManagerInterface import IndexesManagerInterface
|
||||||
from Interfaces.Managers.RoutesManagerInterface import RoutesManagerInterface
|
from Interfaces.Managers.RoutesManagerInterface import RoutesManagerInterface
|
||||||
from Interfaces.Managers.WebSocketsServerManagerInterface import WebSocketsServerManagerInterface
|
from Interfaces.Managers.WebSocketServersManagerInterface import WebSocketServersManagerInterface
|
||||||
|
|
||||||
class AnPInterface(ABC):
|
class AnPInterface(ABC):
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ class AnPInterface(ABC):
|
|||||||
self.dispatches:DispatchesManagerInterface = None
|
self.dispatches:DispatchesManagerInterface = None
|
||||||
self.indexes:IndexesManagerInterface = None
|
self.indexes:IndexesManagerInterface = None
|
||||||
self.routes:RoutesManagerInterface = None
|
self.routes:RoutesManagerInterface = None
|
||||||
self.web_sockets_servers:WebSocketsServerManagerInterface = None
|
self.web_socket_servers:WebSocketServersManagerInterface = None
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def update(self:Self) -> None:pass
|
def update(self:Self) -> None:pass
|
||||||
|
|||||||
@ -3,10 +3,10 @@
|
|||||||
|
|
||||||
from typing import Any, Self, Optional, Sequence
|
from typing import Any, Self, Optional, Sequence
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from Abstracts.WebSocketsServerAbstract import WebSocketsServerAbstract
|
from Abstracts.WebSocketServersAbstract import WebSocketServersAbstract
|
||||||
from Application.Event import Event
|
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:
|
def __init__(self:Self, anp:Any, inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None) -> None:
|
||||||
self.on_new_client:Event = None
|
self.on_new_client:Event = None
|
||||||
@ -30,7 +30,7 @@ class WebSocketsServerManagerInterface(ABC):
|
|||||||
def remove(self:Self, names:str|Sequence[str]) -> None:pass
|
def remove(self:Self, names:str|Sequence[str]) -> None:pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get(self:Self, name:str) -> WebSocketsServerAbstract|None:pass
|
def get(self:Self, name:str) -> WebSocketServersAbstract|None:pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def send(self:Self,
|
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 typing import Any, Self, Optional, Sequence
|
||||||
from Interfaces.Application.AnPInterface import AnPInterface
|
from Interfaces.Application.AnPInterface import AnPInterface
|
||||||
from Abstracts.WebSocketsServerAbstract import WebSocketsServerAbstract
|
from Abstracts.WebSocketServersAbstract import WebSocketServersAbstract
|
||||||
from Application.Event import Event
|
from Application.Event import Event
|
||||||
from Models.RequestModel import RequestModel
|
from Models.RequestModel import RequestModel
|
||||||
from Utils.Checks import Check
|
from Utils.Checks import Check
|
||||||
from Utils.Common import Common
|
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:
|
def __init__(self:Self, anp:AnPInterface, inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None) -> None:
|
||||||
|
|
||||||
self.anp:AnPInterface = anp
|
self.anp:AnPInterface = anp
|
||||||
self.__web_sockets:dict[str, WebSocketsServerAbstract] = {}
|
self.__web_sockets:dict[str, WebSocketServersAbstract] = {}
|
||||||
self.on_new_client:Event = Event()
|
self.on_new_client:Event = Event()
|
||||||
self.on_message:Event = Event()
|
self.on_message:Event = Event()
|
||||||
self.on_close:Event = Event()
|
self.on_close:Event = Event()
|
||||||
@ -42,7 +42,7 @@ class WebSocketsServerManager:
|
|||||||
web_socket.close()
|
web_socket.close()
|
||||||
self.__web_sockets = {}
|
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
|
self.__web_sockets[name] = web_socket
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ class WebSocketsServerManager:
|
|||||||
value:Any|None
|
value:Any|None
|
||||||
|
|
||||||
for key, value in subinputs.items():
|
for key, value in subinputs.items():
|
||||||
if isinstance(value, WebSocketsServerAbstract):
|
if isinstance(value, WebSocketServersAbstract):
|
||||||
if overwrite or key not in self.__web_sockets:
|
if overwrite or key not in self.__web_sockets:
|
||||||
self.__set(key, value)
|
self.__set(key, value)
|
||||||
elif Check.is_dictionary(value):
|
elif Check.is_dictionary(value):
|
||||||
@ -72,9 +72,9 @@ class WebSocketsServerManager:
|
|||||||
if _type is None:
|
if _type is None:
|
||||||
continue
|
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:
|
def remove(self:Self, names:str|Sequence[str]) -> None:
|
||||||
for name in names if Check.is_array(names) else [names]:
|
for name in names if Check.is_array(names) else [names]:
|
||||||
@ -85,7 +85,7 @@ class WebSocketsServerManager:
|
|||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
self.anp.exception(exception, "web_socket_server_close_exception", {"name": name})
|
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)
|
return self.__web_sockets.get(name)
|
||||||
|
|
||||||
def send(self:Self,
|
def send(self:Self,
|
||||||
@ -108,7 +108,7 @@ class WebSocketsServerManager:
|
|||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
self.anp.exception(exception, "web_socket_server_send_exception", {"name": name})
|
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)
|
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