@ -6,17 +6,31 @@ from rcon.exceptions import SessionTimeout, WrongPassword
from rcon . source . proto import Packet , Type
from rcon . source . proto import Packet , Type
__all__ = [ " r con" ]
__all__ = [ " R con" ]
async def close ( writer : StreamWriter ) - > None :
class Rcon :
"""
Set ' s the variables needed for RCON connection
"""
def __init__ ( self ,
host : str ,
port : int = 27015 ,
password : str = ' '
) :
self . host = host
self . port = port
self . password = password
async def close ( self , writer : StreamWriter ) - > None :
""" Close socket asynchronously. """
""" Close socket asynchronously. """
writer . close ( )
writer . close ( )
await writer . wait_closed ( )
await writer . wait_closed ( )
async def communicate (
async def communicate (
self ,
reader : StreamReader ,
reader : StreamReader ,
writer : StreamWriter ,
writer : StreamWriter ,
packet : Packet ,
packet : Packet ,
@ -41,21 +55,27 @@ async def communicate(
return response
return response
async def rcon (
async def rcon (
self ,
command : str ,
command : str ,
* arguments : str ,
* arguments : str ,
host : str ,
host : str = None ,
port : int ,
port : int = None ,
passwd : str ,
passwd : str = None ,
encoding : str = " utf-8 " ,
encoding : str = " utf-8 " ,
frag_threshold : int = 4096 ,
frag_threshold : int = 4096 ,
frag_detect_cmd : str = " " ,
frag_detect_cmd : str = " " ,
) - > str :
) - > str :
""" Run a command asynchronously. """
""" Run a command asynchronously. """
try :
host = host or self . host
port = port or self . port
passwd = passwd or self . password
except AttributeError :
return print ( " Make sure you declare the host, port, or password. " )
reader , writer = await open_connection ( host , port )
reader , writer = await open_connection ( host , port )
response = await communicate (
response = await self . communicate (
reader ,
reader ,
writer ,
writer ,
Packet . make_login ( passwd , encoding = encoding ) ,
Packet . make_login ( passwd , encoding = encoding ) ,
@ -69,12 +89,12 @@ async def rcon(
response = await Packet . aread ( reader )
response = await Packet . aread ( reader )
if response . id == - 1 :
if response . id == - 1 :
await close ( writer )
await self . close ( writer )
raise WrongPassword ( )
raise WrongPassword ( )
request = Packet . make_command ( command , * arguments , encoding = encoding )
request = Packet . make_command ( command , * arguments , encoding = encoding )
response = await communicate ( reader , writer , request )
response = await self . communicate ( reader , writer , request )
await close ( writer )
await self . close ( writer )
if response . id != request . id :
if response . id != request . id :
raise SessionTimeout ( )
raise SessionTimeout ( )