Skip to content
proto.pyi 1.7 KiB
Newer Older
Dom Sekotill's avatar
Dom Sekotill committed
from typing import NamedTuple
from typing import Union

from typing_extensions import Self

__all__ = [
    "RESPONSE_TYPES",
    "Header",
    "LoginRequest",
    "LoginResponse",
    "CommandRequest",
    "CommandResponse",
    "ServerMessage",
    "Request",
    "Response",
]


class Header(NamedTuple):

	crc32: int
	type: int

	def __bytes__(self) -> bytes: ...

	@classmethod
	def create(cls, typ: int, payload: bytes) -> Self: ...

	@classmethod
	def from_bytes(cls, payload: bytes) -> Self: ...


class LoginRequest(str):

	def __bytes__(self) -> bytes: ...

	@property
	def payload(self) -> bytes: ...

	@property
	def header(self) -> Header: ...


class LoginResponse(NamedTuple):

	header: Header
	success: bool

	@classmethod
	def from_bytes(cls, header: Header, payload: bytes) -> Self: ...


class CommandRequest(NamedTuple):

	seq: int
	command: str

	def __bytes__(self) -> bytes: ...

	@property
	def payload(self) -> bytes: ...

	@property
	def header(self) -> Header: ...

	@classmethod
	def from_string(cls, command: str) -> Self: ...

	@classmethod
	def from_command(cls, command: str, *args: str) -> Self: ...


class CommandResponse(NamedTuple):

	header: Header
	seq: int
	payload: bytes

	@classmethod
	def from_bytes(cls, header: Header, payload: bytes) -> Self: ...

	@property
	def message(self) -> str: ...


class ServerMessage(NamedTuple):

	header: Header
	seq: int
	payload: bytes

	@classmethod
	def from_bytes(cls, header: Header, payload: bytes) -> Self: ...

	@property
	def message(self) -> str: ...


Request = Union[LoginRequest, CommandRequest]
Response  = Union[LoginResponse, CommandResponse, ServerMessage]

RESPONSE_TYPES = {
	0x00: LoginResponse,
	0x01: CommandResponse,
	0x02: ServerMessage,
}