proxy + multi client
This commit is contained in:
parent
e4c0c11c24
commit
2a80cef03e
4
.gitignore
vendored
4
.gitignore
vendored
@ -4,3 +4,7 @@
|
|||||||
**/.venv
|
**/.venv
|
||||||
|
|
||||||
test*.*
|
test*.*
|
||||||
|
.proxies
|
||||||
|
.accounts
|
||||||
|
.words
|
||||||
|
.names
|
||||||
|
@ -13,8 +13,8 @@ from .tools import big_fuckin_mac
|
|||||||
|
|
||||||
class Client(ClientBase):
|
class Client(ClientBase):
|
||||||
|
|
||||||
def __init__(self, names=None, loop=None, username=None, password=None):
|
def __init__(self, names=None, loop=None, username=None, password=None, proxy=None):
|
||||||
super().__init__(loop)
|
super().__init__(loop=loop, proxy=proxy)
|
||||||
self._username = username
|
self._username = username
|
||||||
self._password = password
|
self._password = password
|
||||||
self._worlds = {}
|
self._worlds = {}
|
||||||
|
@ -1,37 +1,32 @@
|
|||||||
from asyncio import (
|
from asyncio import (Event, Lock, Queue, Task, get_event_loop, sleep)
|
||||||
Event, Lock, Queue, Task, get_event_loop, get_running_loop,
|
|
||||||
run_coroutine_threadsafe, sleep
|
|
||||||
)
|
|
||||||
from ipaddress import IPv4Address
|
from ipaddress import IPv4Address
|
||||||
from socket import AF_INET, IPPROTO_TCP, SOCK_STREAM, TCP_NODELAY, socket
|
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 .crypto import MapleAes, MapleIV, decrypt_transform, encrypt_transform
|
||||||
from .opcodes import SendOps, RecvOps
|
from .opcodes import SendOps, RecvOps
|
||||||
from .packet import PacketHandler, iPacket, oPacket
|
from .packet import PacketHandler, iPacket
|
||||||
|
|
||||||
|
|
||||||
class ClientBase:
|
class ClientBase:
|
||||||
|
|
||||||
def __init__(self, loop=None):
|
def __init__(self, loop=None, proxy=None):
|
||||||
self._loop = loop or get_event_loop()
|
self._loop = loop or get_event_loop()
|
||||||
|
self._proxy = Connection(proxy)
|
||||||
self._packet_handlers = []
|
self._packet_handlers = []
|
||||||
self._ready = Event()
|
self._ready = Event()
|
||||||
self._lock = Lock()
|
self._lock = Lock()
|
||||||
self._action_queue = Queue()
|
self._action_queue = Queue()
|
||||||
self._action_task: Task | None = None
|
self._action_task: Task | None = None
|
||||||
|
|
||||||
self._login_sock = socket(AF_INET, SOCK_STREAM)
|
|
||||||
self._game_sock = None
|
|
||||||
self._sock: socket
|
self._sock: socket
|
||||||
self._version = None
|
self._version = None
|
||||||
self._sub_version = None
|
self._sub_version = None
|
||||||
self._locale = None
|
self._locale = None
|
||||||
self._recv_iv: MapleIV = None # type: ignore
|
self._recv_iv: MapleIV = None # type: ignore
|
||||||
self._send_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._buff = bytearray()
|
||||||
self._prev_buff = bytearray()
|
self._prev_buff = bytearray()
|
||||||
self._recv_task = None
|
self._recv_task = None
|
||||||
@ -41,15 +36,12 @@ class ClientBase:
|
|||||||
self._game_port = 0
|
self._game_port = 0
|
||||||
|
|
||||||
self._transfer_server = False
|
self._transfer_server = False
|
||||||
self._game_ip = None
|
|
||||||
self._game_port = None
|
|
||||||
self._migrating = False
|
self._migrating = False
|
||||||
self._migration_event = Event()
|
self._migration_event = Event()
|
||||||
|
|
||||||
self.add_packet_handlers()
|
self.add_packet_handlers()
|
||||||
|
|
||||||
def _create_sock(self, game_sock=False):
|
def _create_sock(self, game_sock=False):
|
||||||
# if game_sock:
|
|
||||||
self._sock = socket(AF_INET, SOCK_STREAM)
|
self._sock = socket(AF_INET, SOCK_STREAM)
|
||||||
self._sock.setblocking(False)
|
self._sock.setblocking(False)
|
||||||
self._sock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
|
self._sock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
|
||||||
@ -88,10 +80,6 @@ class ClientBase:
|
|||||||
|
|
||||||
return self._loop.create_task(schd())
|
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):
|
async def _sock_recv(self):
|
||||||
# 51.222.56.169
|
# 51.222.56.169
|
||||||
await self._ready.wait()
|
await self._ready.wait()
|
||||||
@ -164,7 +152,8 @@ class ClientBase:
|
|||||||
del self._action_queue
|
del self._action_queue
|
||||||
self._action_queue = 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
|
self._game_port = 0
|
||||||
|
|
||||||
break
|
break
|
||||||
|
Loading…
Reference in New Issue
Block a user