# Minecraft Remote Console module. # # Copyright (C) 2015 Barnaby Gale # # SPDX-License-Identifier: MIT import socket import select import struct import time class MCRconException(Exception): pass class MCRcon(object): socket = None def connect(self, host, port, password): if self.socket is not None: raise MCRconException("Already connected") self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.settimeout(0.9) self.socket.connect((host, port)) self.send(3, password) def disconnect(self): if self.socket is None: raise MCRconException("Already disconnected") self.socket.close() self.socket = None def read(self, length): data = b"" while len(data) < length: data += self.socket.recv(length - len(data)) return data def send(self, out_type, out_data): if self.socket is None: raise MCRconException("Must connect before sending data") # Send a request packet out_payload = struct.pack('