diff --git a/__init__.py b/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/config.json b/config.json index a694cb6..9277840 100644 --- a/config.json +++ b/config.json @@ -5,13 +5,14 @@ "password": "", "hostname": "Python > C", "max_players": 50, - "mode": "yay", - "language": "spoop" + "mode": "debug", + "language": "English" }, "logging": { "filename": "", "level": "DEBUG", - "format": "%(name)s - %(levelname)s - %(message)s", + "format": "[%(name)s:L%(lineno)02d %(levelname)s] %(message)s", "datefmt": "%d-%b-%y %H:%M:%S" - } + }, + "debug": true } \ No newline at end of file diff --git a/main.py b/main.py index 4f321f2..f1f8274 100644 --- a/main.py +++ b/main.py @@ -1,14 +1,11 @@ -from importlib import reload - import sys import socket import json import logging -from objects import glob -from objects.server import Server - -from objects import client +from sampy import glob +from sampy import client +from sampy.server import Server logger = logging.getLogger(__name__) @@ -21,11 +18,12 @@ if __name__ == "__main__": while True: try: cmd = input() - if cmd == "quit" or cmd == "exit" or cmd == "stop": + if cmd in ["quit","exit","stop"]: exit(0) else: logger.info("> Restarting...") - client.restart() + glob.server.restart() + #client.restart() """for module in sys.modules.values(): reload(module) glob.server = Server(glob.config["host"], glob.config["port"]) diff --git a/network/__init__.py b/network/__init__.py deleted file mode 100644 index d393879..0000000 --- a/network/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from . import enums - -from . import compression \ No newline at end of file diff --git a/objects/__init__.py b/objects/__init__.py deleted file mode 100644 index 45f9a58..0000000 --- a/objects/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from . import glob -from . import client -from . import server \ No newline at end of file diff --git a/sampy/__init__.py b/sampy/__init__.py new file mode 100644 index 0000000..adf220b --- /dev/null +++ b/sampy/__init__.py @@ -0,0 +1,7 @@ +from . import handlers +from . import helpers +from . import network +from . import raknet +from . import glob +from . import client +from . import server \ No newline at end of file diff --git a/objects/client.py b/sampy/client.py similarity index 63% rename from objects/client.py rename to sampy/client.py index 0959940..93eddea 100644 --- a/objects/client.py +++ b/sampy/client.py @@ -1,14 +1,15 @@ -from importlib import reload - import socket import logging import struct -from network.compression import uncompress +from .network.compression import uncompress +from .handlers import serverQueryHandler, mainHandler +from .helpers.byteFormater import readable_bytes +from .server import Server -from handlers import serverQueryHandler, mainHandler - -from helpers.byteFormater import readable_bytes +from . import glob +if glob.config["debug"]: + from importlib import reload logger = logging.getLogger(__name__) @@ -18,13 +19,14 @@ class Client: b"SAMP": serverQueryHandler.handle } - def __init__(self, server: "Server", addr: "Address"): + def __init__(self, server, addr: "Address"): self.server = server self.ip_uint = struct.unpack(b" int: return len(self.__writebuffer) + + def flush(self): + if not self.get_buffer_size(): + return - def write_socket(self): - if self.get_buffer_size() > 0: - #write_chunk = self.__writebuffer.pop(0) - #logger.debug("[%s] <- %s" % (self.addr, write_chunk)) - logger.debug("[%s] <- %s" % (self.addr, readable_bytes(self.__writebuffer))) - self.server.socket.sendto(self.__writebuffer, self.addr) - self.__writebuffer.clear() + logger.debug("[%s] <- %s" % (self.addr, readable_bytes(self.__writebuffer))) + self.server.socket.sendto(self.__writebuffer, self.addr) + self.__writebuffer.clear() def send_immediate(self, data: bytes): logger.debug("[%s] <- %s" % (self.addr, readable_bytes(data))) diff --git a/objects/glob.py b/sampy/glob.py similarity index 97% rename from objects/glob.py rename to sampy/glob.py index 7269f1b..6242d8c 100644 --- a/objects/glob.py +++ b/sampy/glob.py @@ -1,10 +1,9 @@ import sys import json import logging - from random import randint -from network.enums import types as TYPE +from .network.enums import types as TYPE # --------------------------------------------------------------------------- # public diff --git a/handlers/__init__.py b/sampy/handlers/__init__.py similarity index 62% rename from handlers/__init__.py rename to sampy/handlers/__init__.py index b90bb81..08fedb4 100644 --- a/handlers/__init__.py +++ b/sampy/handlers/__init__.py @@ -1,5 +1,5 @@ from . import mainHandler from . import serverQueryHandler - from . import handshakeHandler -from . import unknownHandler \ No newline at end of file +from . import unknownHandler +from . import queueHandler \ No newline at end of file diff --git a/handlers/handshakeHandler.py b/sampy/handlers/handshakeHandler.py similarity index 79% rename from handlers/handshakeHandler.py rename to sampy/handlers/handshakeHandler.py index de8cd8c..baba6ba 100644 --- a/handlers/handshakeHandler.py +++ b/sampy/handlers/handshakeHandler.py @@ -1,14 +1,14 @@ import logging import struct -from network.enums import types as TYPE -from objects import glob +from ..network.enums import types as TYPE +from .. import glob logger = logging.getLogger(__name__) def handle(client: "Client", data: bytes) -> bytes: challenge = (client.ip_uint ^ glob.challenge_short) & TYPE.MAX_USHORT - challenge_solution = challenge ^ 0x6969 + challenge_solution = challenge ^ 0x6969 # 0x6969 being client_version? challenge_answer = struct.unpack_from(b">H", data, 1)[0] diff --git a/handlers/mainHandler.py b/sampy/handlers/mainHandler.py similarity index 81% rename from handlers/mainHandler.py rename to sampy/handlers/mainHandler.py index c10b969..7672e11 100644 --- a/handlers/mainHandler.py +++ b/sampy/handlers/mainHandler.py @@ -6,14 +6,16 @@ import struct from . import handshakeHandler from . import unknownHandler +from . import queueHandler -from helpers.byteFormater import readable_bytes +from ..helpers.byteFormater import readable_bytes logger = logging.getLogger(__name__) HANDLERS = { 0x18: handshakeHandler.handle, - 0x00: unknownHandler.handle + 0x00: unknownHandler.handle, + 0xe3: queueHandler.handle } def handle(client: "Client", data: bytes) -> bytes: diff --git a/handlers/old_mainHandler.py b/sampy/handlers/old_mainHandler.py similarity index 100% rename from handlers/old_mainHandler.py rename to sampy/handlers/old_mainHandler.py diff --git a/sampy/handlers/queueHandler.py b/sampy/handlers/queueHandler.py new file mode 100644 index 0000000..ce57b6b --- /dev/null +++ b/sampy/handlers/queueHandler.py @@ -0,0 +1,11 @@ +import logging +import struct + +from ..network.enums import types as TYPE +from .. import glob + +logger = logging.getLogger(__name__) + +def handle(client: "Client", data: bytes) -> bytes: + + return b"" \ No newline at end of file diff --git a/handlers/serverQueryHandler.py b/sampy/handlers/serverQueryHandler.py similarity index 98% rename from handlers/serverQueryHandler.py rename to sampy/handlers/serverQueryHandler.py index 2cd192d..b03ab0f 100644 --- a/handlers/serverQueryHandler.py +++ b/sampy/handlers/serverQueryHandler.py @@ -1,8 +1,8 @@ import struct import logging -from objects import glob -from helpers import dataHelper +from .. import glob +from ..helpers import dataHelper logger = logging.getLogger(__name__) logger.propagate = False # Disable console logging diff --git a/handlers/unknownHandler.py b/sampy/handlers/unknownHandler.py similarity index 100% rename from handlers/unknownHandler.py rename to sampy/handlers/unknownHandler.py diff --git a/helpers/TEABlockEncryptor.py b/sampy/helpers/TEABlockEncryptor.py similarity index 94% rename from helpers/TEABlockEncryptor.py rename to sampy/helpers/TEABlockEncryptor.py index d233660..15dbe6b 100644 --- a/helpers/TEABlockEncryptor.py +++ b/sampy/helpers/TEABlockEncryptor.py @@ -1,8 +1,8 @@ import struct from random import randint -from helpers.checksumHelper import CheckSum -from network.enums import types as TYPE +from ..helpers.checksumHelper import CheckSum +from ..network.enums import types as TYPE TEA_ROUNDS = 32 TEA_XOR_MASK = 0x5E94A3CF diff --git a/helpers/__init__.py b/sampy/helpers/__init__.py similarity index 100% rename from helpers/__init__.py rename to sampy/helpers/__init__.py diff --git a/helpers/byteFormater.py b/sampy/helpers/byteFormater.py similarity index 100% rename from helpers/byteFormater.py rename to sampy/helpers/byteFormater.py diff --git a/helpers/checksumHelper.py b/sampy/helpers/checksumHelper.py similarity index 89% rename from helpers/checksumHelper.py rename to sampy/helpers/checksumHelper.py index c710be8..75ae451 100644 --- a/helpers/checksumHelper.py +++ b/sampy/helpers/checksumHelper.py @@ -1,4 +1,4 @@ -from network.enums import types as TYPE +from ..network.enums import types as TYPE # TODO: Single function if Object's state is not needed class CheckSum: diff --git a/helpers/dataHelper.py b/sampy/helpers/dataHelper.py similarity index 100% rename from helpers/dataHelper.py rename to sampy/helpers/dataHelper.py diff --git a/sampy/network/__init__.py b/sampy/network/__init__.py new file mode 100644 index 0000000..eb4a5d9 --- /dev/null +++ b/sampy/network/__init__.py @@ -0,0 +1,3 @@ +from . import consts +from . import enums +from . import compression \ No newline at end of file diff --git a/network/compression.py b/sampy/network/compression.py similarity index 98% rename from network/compression.py rename to sampy/network/compression.py index 704da32..054c1bb 100644 --- a/network/compression.py +++ b/sampy/network/compression.py @@ -1,6 +1,6 @@ import logging -from objects import glob +from .. import glob # Found @ addr 0x004C88E0 LOOKUP_TABLE = b"\xb4b\x07\xe5\x9d\xafc\xdd\xe3\xd0\xcc\xfe\xdc\xdbk.j@\xabG\xc9\xd1S\xd5 \x91\xa5\x0eJ\xdf\x18\x89\xfdo%\x12\xb7\x13w\x00e6mI\xecW*\xa9\x11_\xfax\x95\xa4\xbd\x1e\xd9yD\xcd\xde\x81\xeb\t>\xf6\xee\xda\x7f\xa3\x1a\xa7-\xa6\xad\xc1F\x93\xd2\x1b\x9c\xaa\xd7NKML\xf3\xb84\xc0\xca\x88\xf4\x94\xcb\x0490\x82\xd6s\xb0\xbf\"\x01AnH,\xa8u\xb1\n\xae\x9f\'\x80\x10\xce\xf0)(\x85\r\x05\xf75\xbb\xbc\x15\x06\xf5`q\x03\x1f\xeaZ3\x92\x8d\xe7\x90[\xe9\xcf\x9e\xd3]\xed1\x1c\x0bR\x16Q\x0f\x86\xc5h\x9b!\x0c\x8bB\x87\xffO\xbe\xc8\xe8\xc7\xd4z\xe0U/\x8a\x8e\xba\x987\xe4\xb28\xa1\xb62\x83:{\x84