Bugfixes in atconnect, atwss(async functions)

This commit is contained in:
DarkCat09 2022-05-18 18:33:21 +04:00
parent f606cfd521
commit b02e833702
6 changed files with 69 additions and 68 deletions

View file

@ -3,24 +3,12 @@ import random
import logging
from requests import Response
from cloudscraper import CloudScraper
from typing import Optional, Union, Dict
from typing import Optional, Union
from . import atjsparse
from .aterrors import CredentialsError, CloudflareError
REQUA = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36 OPR/85.0.4341.47'
REQHEADERS = {
'Host': 'aternos.org',
'User-Agent': REQUA,
'Sec-Ch-Ua': '" Not A;Brand";v="99", "Chromium";v="100", "Opera";v="86"',
'Sec-Ch-Ua-Mobile': '?0',
'Sec-Ch-Ua-Platform': '"Linux"',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-User': '?1',
'Upgrade-Insecure-Requests': '1'
}
class AternosConnect:
@ -109,12 +97,6 @@ class AternosConnect:
num //= base
return result
def add_headers(self, headers:Optional[Dict[str,str]]=None) -> Dict[str,str]:
headers = headers or {}
headers.update(REQHEADERS)
return headers
def request_cloudflare(
self, url:str, method:str,
params:Optional[dict]=None, data:Optional[dict]=None,
@ -129,13 +111,15 @@ class AternosConnect:
except KeyError:
pass
method = method or 'GET'
method = method.upper().strip()
if method not in ('GET', 'POST'):
raise NotImplementedError('Only GET and POST are available')
headers = headers or {}
params = params or {}
data = data or {}
reqcookies = reqcookies or {}
headers = self.add_headers(headers)
if sendtoken:
params['TOKEN'] = self.token
@ -173,7 +157,7 @@ class AternosConnect:
params, data,
headers, reqcookies,
sendtoken, redirect,
retry - 1
retry + 1
)
logging.info(

View file

@ -1,7 +1,7 @@
import enum
import json
from requests import Response
from typing import Optional
from typing import Optional, List
from .atconnect import AternosConnect
from .aterrors import ServerError
@ -186,7 +186,7 @@ class AternosServer:
@property
def address(self) -> str:
return f'{self.domain}:{self.port}'
return self._info['displayAddress']
@property
def domain(self) -> str:
@ -216,6 +216,18 @@ class AternosServer:
@property
def status_num(self) -> int:
return int(self._info['status'])
@property
def players_list(self) -> List[str]:
return self._info['playerlist']
@property
def players_count(self) -> int:
return int(self._info['players'])
@property
def slots(self) -> int:
return int(self._info['slots'])
@property
def ram(self) -> int:

View file

@ -88,6 +88,8 @@ class AternosWss:
async def close(self) -> None:
self.keep.cancel()
self.msgs.cancel()
await self.socket.close()
del self.socket
@ -100,42 +102,48 @@ class AternosWss:
async def wssworker(self) -> None:
keep = asyncio.create_task(self.keepalive())
msgs = asyncio.create_task(self.receiver())
await keep
await msgs
self.keep = asyncio.create_task(self.keepalive())
self.msgs = asyncio.create_task(self.receiver())
async def keepalive(self) -> None:
while True:
await asyncio.sleep(49)
await self.socket.send('{"type":"\u2764"}')
try:
while True:
await asyncio.sleep(49)
await self.socket.send('{"type":"\u2764"}')
except asyncio.CancelledError:
pass
async def receiver(self) -> None:
while True:
data = await self.socket.recv()
obj = json.loads(data)
msgtype = -1
if obj['type'] == 'line':
msgtype = Streams.console
msg = obj['data'].strip('\r\n ')
try:
while True:
data = await self.socket.recv()
obj = json.loads(data)
msgtype = -1
if obj['type'] == 'line':
msgtype = Streams.console
msg = obj['data'].strip('\r\n ')
elif obj['type'] == 'heap':
msgtype = Streams.ram
msg = int(obj['data']['usage'])
elif obj['type'] == 'heap':
msgtype = Streams.ram
msg = int(obj['data']['usage'])
elif obj['type'] == 'tick':
msgtype = Streams.tps
ticks = 1000 / obj['data']['averageTickTime']
msg = 20 if ticks > 20 else ticks
elif obj['type'] == 'tick':
msgtype = Streams.tps
ticks = 1000 / obj['data']['averageTickTime']
msg = 20 if ticks > 20 else ticks
elif obj['type'] == 'status':
msgtype = Streams.status
msg = json.loads(obj['message'])
elif obj['type'] == 'status':
msgtype = Streams.status
msg = json.loads(obj['message'])
if msgtype in self.recv:
asyncio.create_task(
self.recv[msgtype](msg)
)
if msgtype in self.recv:
await asyncio.create_task(
self.recv[msgtype](msg)
)
except asyncio.CancelledError:
pass