From 2a80cef03e8107124279fbe33163a6acd2426733 Mon Sep 17 00:00:00 2001 From: Ra Date: Sun, 13 Mar 2022 13:40:04 -0600 Subject: [PATCH] proxy + multi client --- .gitignore | 4 ++++ client.py | 4 ++-- client_base.py | 27 ++++++++------------------- 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 1085b42..86e5ec5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,7 @@ **/.venv test*.* +.proxies +.accounts +.words +.names diff --git a/client.py b/client.py index cc05fcd..c60c150 100644 --- a/client.py +++ b/client.py @@ -13,8 +13,8 @@ from .tools import big_fuckin_mac class Client(ClientBase): - def __init__(self, names=None, loop=None, username=None, password=None): - super().__init__(loop) + def __init__(self, names=None, loop=None, username=None, password=None, proxy=None): + super().__init__(loop=loop, proxy=proxy) self._username = username self._password = password self._worlds = {} diff --git a/client_base.py b/client_base.py index b9f984b..3008869 100644 --- a/client_base.py +++ b/client_base.py @@ -1,37 +1,32 @@ -from asyncio import ( - Event, Lock, Queue, Task, get_event_loop, get_running_loop, - run_coroutine_threadsafe, sleep -) +from asyncio import (Event, Lock, Queue, Task, get_event_loop, sleep) from ipaddress import IPv4Address from socket import AF_INET, IPPROTO_TCP, SOCK_STREAM, TCP_NODELAY, socket -# from rich import print +from pproxy import Connection +from rich import print from .crypto import MapleAes, MapleIV, decrypt_transform, encrypt_transform from .opcodes import SendOps, RecvOps -from .packet import PacketHandler, iPacket, oPacket +from .packet import PacketHandler, iPacket class ClientBase: - def __init__(self, loop=None): + def __init__(self, loop=None, proxy=None): self._loop = loop or get_event_loop() + self._proxy = Connection(proxy) self._packet_handlers = [] self._ready = Event() self._lock = Lock() self._action_queue = Queue() self._action_task: Task | None = None - self._login_sock = socket(AF_INET, SOCK_STREAM) - self._game_sock = None self._sock: socket self._version = None self._sub_version = None self._locale = None self._recv_iv: MapleIV = None # type: ignore self._send_iv: MapleIV = None # type: ignore - self._g_recv_iv: MapleIV = None # type: ignore - self._g_send_iv: MapleIV = None # type: ignore self._buff = bytearray() self._prev_buff = bytearray() self._recv_task = None @@ -41,15 +36,12 @@ class ClientBase: self._game_port = 0 self._transfer_server = False - self._game_ip = None - self._game_port = None self._migrating = False self._migration_event = Event() self.add_packet_handlers() def _create_sock(self, game_sock=False): - # if game_sock: self._sock = socket(AF_INET, SOCK_STREAM) self._sock.setblocking(False) self._sock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1) @@ -88,10 +80,6 @@ class ClientBase: return self._loop.create_task(schd()) - @property - def is_game_session(self): - return self._game_port and self._game_sock - async def _sock_recv(self): # 51.222.56.169 await self._ready.wait() @@ -164,7 +152,8 @@ class ClientBase: del self._action_queue self._action_queue = Queue() - if self._game_sock and port_used == self._game_port and self._game_port: + if port_used == self._game_port and self._game_port and self._game_ip: + self._game_ip = None self._game_port = 0 break