proxy + multi client

This commit is contained in:
Ra 2022-03-13 13:40:04 -06:00
parent e4c0c11c24
commit 2a80cef03e
3 changed files with 14 additions and 21 deletions

4
.gitignore vendored
View File

@ -4,3 +4,7 @@
**/.venv
test*.*
.proxies
.accounts
.words
.names

View File

@ -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 = {}

View File

@ -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