def encode(self, client_id: int, hostname: str, name: str, language: Language, joindate: datetime, play_as: int): self.write_uint(client_id) self.write_str(check_length(hostname, NETWORK_HOSTNAME_LENGTH, "'hostname'"), check_length(name, NETWORK_CLIENT_NAME_LENGTH, "'name'")) self.write_byte(Language(language)) self.write_uint(datetime_to_gamedate(joindate)) self.write_byte(play_as)
def decode( self ) -> Tuple[int, str, str, Colour, bool, int, bool, int, Tuple[int, int, int, int]]: company_id, = self.read_byte() name, manager = self.read_str(2) colour, = self.read_byte() passworded, = self.read_bool() startyear, = self.read_uint() is_ai, = self.read_bool() bankruptcy_counter = None shareholders = None if self.has_available_data: bankruptcy_counter, = self.read_byte() shareholders = list(self.read_byte(4)) return self.data( company_id, check_length(name, NETWORK_COMPANY_NAME_LENGTH, "'name'"), check_length(manager, NETWORK_COMPANY_NAME_LENGTH, "'manager'"), Colour(colour), passworded, startyear, is_ai, bankruptcy_counter, check_tuple_length(shareholders, 4, 4, "'shareholders'"), )
def decode(self) -> Tuple[str, str]: # The maximum length for origin and message is not known. For sanity we stick to # NETWORK_GAMESCRIPT_JSON_LENGTH as that is closest to SEND_MTU origin, message = self.read_str(2) return self.data( check_length(origin, NETWORK_GAMESCRIPT_JSON_LENGTH, "'origin'"), check_length(message, NETWORK_GAMESCRIPT_JSON_LENGTH, "'message'"))
def encode(self, company_id: int, name: str, manager: str, colour: Colour, passworded: bool, bankruptcy_counter: int, shareholders: Tuple[int, int, int, int]): self.write_byte(company_id) self.write_str(check_length(name, NETWORK_COMPANY_NAME_LENGTH, "'name'"), check_length(manager, NETWORK_COMPANY_NAME_LENGTH, "'manager'")) self.write_byte(Colour(colour)) self.write_bool(passworded) self.write_byte(bankruptcy_counter) self.write_byte(*check_tuple_length(shareholders, 4, 4, "'shareholders'"))
def encode(self, client_id: int, hostname: str, name: str, language: Language, joindate: datetime, play_as: int): self.write_uint(client_id) self.write_str( check_length(hostname, NETWORK_HOSTNAME_LENGTH, "'hostname'"), check_length(name, NETWORK_CLIENT_NAME_LENGTH, "'name'")) self.write_byte(Language(language)) self.write_uint(datetime_to_gamedate(joindate)) self.write_byte(play_as)
def encode(self, name: str, version: str, dedicated: bool, map: str, seed: int, landscape: Landscape, startdate: datetime, x: int, y: int): self.write_str(check_length(name, NETWORK_NAME_LENGTH, "'name'"), check_length(version, NETWORK_REVISION_LENGTH, "'version'")) self.write_bool(dedicated) self.write_str(check_length(map, NETWORK_NAME_LENGTH, "'map'")) self.write_uint(seed) self.write_byte(Landscape(landscape)) self.write_uint(datetime_to_gamedate(startdate)) self.write_ushort(x, y)
def encode(self, name: str, version: str, dedicated: bool, map: str, seed: int, landscape: Landscape, startdate: datetime, x: int, y: int): self.write_str( check_length(name, NETWORK_NAME_LENGTH, "'name'"), check_length(version, NETWORK_REVISION_LENGTH, "'version'")) self.write_bool(dedicated) self.write_str(check_length(map, NETWORK_NAME_LENGTH, "'map'")) self.write_uint(seed) self.write_byte(Landscape(landscape)) self.write_uint(datetime_to_gamedate(startdate)) self.write_ushort(x, y)
def decode(self) -> Tuple[int, str, str, Language, datetime, int]: client_id, = self.read_uint() hostname, name = self.read_str(2) language, joindate, play_as = self.read_data(['byte', 'uint', 'byte']) return self.data( client_id, check_length(hostname, NETWORK_HOSTNAME_LENGTH, "'hostname'"), check_length(name, NETWORK_CLIENT_NAME_LENGTH, "'name'"), Language(language), gamedate_to_datetime(joindate), play_as, )
def encode(self, company_id: int, name: str, manager: str, colour: Colour, passworded: bool, bankruptcy_counter: int, shareholders: Tuple[int, int, int, int]): self.write_byte(company_id) self.write_str( check_length(name, NETWORK_COMPANY_NAME_LENGTH, "'name'"), check_length(manager, NETWORK_COMPANY_NAME_LENGTH, "'manager'")) self.write_byte(Colour(colour)) self.write_bool(passworded) self.write_byte(bankruptcy_counter) self.write_byte( *check_tuple_length(shareholders, 4, 4, "'shareholders'"))
def decode(self) -> Tuple[int, str, int]: client_id, = self.read_uint() name, = self.read_str() play_as, = self.read_byte() return self.data( client_id, check_length(name, NETWORK_CLIENT_NAME_LENGTH, "'name'"), play_as)
def decode(self) -> Tuple[Action, DestType, int, str, int]: action, _type = self.read_byte(2) client_id, = self.read_uint() message, = self.read_str() extra, = self.read_ulonglong() return self.data(Action(action), DestType(_type), client_id, check_length(message, NETWORK_CHAT_LENGTH, "'message'"), extra)
def decode(self) -> Tuple[Dict[int, str]]: commands = {} _next, = self.read_bool() while bool(_next): _id, name, _next = self.read_data(['ushort', str, bool]) commands[_id] = check_length(name, NETWORK_NAME_LENGTH, "'name'") return self.data(commands)
def encode(self, commands: Dict[int, str]): # Falling back to NETWORK_NAME_LENGTH as CmdNames doesn't have a max length defined for _id, name in sorted(commands.items()): self.write_bool(True) self.write_ushort(_id) self.write_str(check_length(name, NETWORK_NAME_LENGTH, "'name'")) self.write_bool(False)
def decode(self) -> Tuple[int, str, str, Colour, bool, int, Tuple[int, int, int, int]]: company_id, = self.read_byte() name, manager = self.read_str(2) colour, = self.read_byte() passworded, = self.read_bool() bankruptcy_counter, = self.read_byte() shareholders = list(self.read_byte(4)) return self.data( company_id, check_length(name, NETWORK_COMPANY_NAME_LENGTH, "'name'"), check_length(manager, NETWORK_COMPANY_NAME_LENGTH, "'manager'"), colour, passworded, bankruptcy_counter, check_tuple_length(shareholders, 4, 4, "'shareholders'"), )
def decode(self) -> Tuple[str, str, bool, str, int, Landscape, datetime, int, int]: name, version = self.read_str(2) dedicated, = self.read_bool() _map, = self.read_str() seed, landscape, startdate, x, y = self.read_data(['uint', 'byte', 'uint', 'ushort', 'ushort']) return self.data( check_length(name, NETWORK_NAME_LENGTH, "'name'"), check_length(version, NETWORK_REVISION_LENGTH, "'version'"), dedicated, check_length(_map, NETWORK_NAME_LENGTH, "'map'"), seed, Landscape(landscape), gamedate_to_datetime(startdate), x, y, )
def decode(self) -> Tuple[Action, DestType, int, str, int]: action, _type = self.read_byte(2) client_id, = self.read_uint() message, = self.read_str() extra, = self.read_ulonglong() return self.data( Action(action), DestType(_type), client_id, check_length(message, NETWORK_CHAT_LENGTH, "'message'"), extra)
def decode( self ) -> Tuple[int, str, str, Colour, bool, int, Tuple[int, int, int, int]]: company_id, = self.read_byte() name, manager = self.read_str(2) colour, = self.read_byte() passworded, = self.read_bool() bankruptcy_counter, = self.read_byte() shareholders = list(self.read_byte(4)) return self.data( company_id, check_length(name, NETWORK_COMPANY_NAME_LENGTH, "'name'"), check_length(manager, NETWORK_COMPANY_NAME_LENGTH, "'manager'"), colour, passworded, bankruptcy_counter, check_tuple_length(shareholders, 4, 4, "'shareholders'"), )
def decode( self ) -> Tuple[str, str, bool, str, int, Landscape, datetime, int, int]: name, version = self.read_str(2) dedicated, = self.read_bool() _map, = self.read_str() seed, landscape, startdate, x, y = self.read_data( ['uint', 'byte', 'uint', 'ushort', 'ushort']) return self.data( check_length(name, NETWORK_NAME_LENGTH, "'name'"), check_length(version, NETWORK_REVISION_LENGTH, "'version'"), dedicated, check_length(_map, NETWORK_NAME_LENGTH, "'map'"), seed, Landscape(landscape), gamedate_to_datetime(startdate), x, y, )
def decode(self) -> Tuple[int, str, str, Colour, bool, int, bool, int, Tuple[int, int, int, int]]: company_id, = self.read_byte() name, manager = self.read_str(2) colour, = self.read_byte() passworded, = self.read_bool() startyear, = self.read_uint() is_ai, = self.read_bool() bankruptcy_counter = None shareholders = None if self.has_available_data: bankruptcy_counter, = self.read_byte() shareholders = list(self.read_byte(4)) return self.data( company_id, check_length(name, NETWORK_COMPANY_NAME_LENGTH, "'name'"), check_length(manager, NETWORK_COMPANY_NAME_LENGTH, "'manager'"), Colour(colour), passworded, startyear, is_ai, bankruptcy_counter, check_tuple_length(shareholders, 4, 4, "'shareholders'"), )
def decode(self) -> Tuple[str, str, str]: password, name, version = self.read_str(3) return self.data( check_length(password, NETWORK_PASSWORD_LENGTH, "'password'"), check_length(name, NETWORK_CLIENT_NAME_LENGTH, "'name'"), check_length(version, NETWORK_REVISION_LENGTH, "'version'"))
def encode(self, colour: Colour, result: str): self.write_ushort(Colour(colour)) self.write_str( check_length(result, NETWORK_RCONCOMMAND_LENGTH, "'result'"))
def encode(self, name: str, version: str): self.write_str( check_length(name, NETWORK_CLIENT_NAME_LENGTH, "'name'"), check_length(version, NETWORK_REVISION_LENGTH, "'version'"))
def encode(self, json_data: Union[dict, list, str]): json_string = json.dumps(json_data) self.write_str( check_length(json_string, NETWORK_GAMESCRIPT_JSON_LENGTH, "'json_data'"))
def encode(self, command: str): self.write_str( check_length(command, NETWORK_RCONCOMMAND_LENGTH, "'command'"))
def encode(self, command: str): self.write_str(check_length(command, NETWORK_RCONCOMMAND_LENGTH, "'command'"))
def encode(self, action: ChatAction, type: DestType, client_id: int, message: str): self.write_byte(ChatAction(action)) self.write_byte(DestType(type)) self.write_uint(client_id) self.write_str(check_length(message, NETWORK_CHAT_LENGTH, "'message'"))
def encode(self, password: str, name: str, version: str): self.write_str(check_length(password, NETWORK_PASSWORD_LENGTH, "'password'"), check_length(name, NETWORK_CLIENT_NAME_LENGTH, "'name'"), check_length(version, NETWORK_REVISION_LENGTH, "'version'"))
def encode(self, json_data: Union[dict, list, str]): json_string = json.dumps(json_data) self.write_str(check_length(json_string, NETWORK_GAMESCRIPT_JSON_LENGTH, "'json_data'"))
def encode(self, action: Action, type: DestType, client_id: int, message: str, extra: int): self.write_byte(action, type) self.write_uint(client_id) self.write_str(check_length(message, NETWORK_CHAT_LENGTH, "'message'")) self.write_ulonglong(extra)
def encode(self, client_id: int, name: str, play_as: int): self.write_uint(client_id) self.write_str(check_length(name, NETWORK_CLIENT_NAME_LENGTH, "'name'")) self.write_byte(play_as)
def decode(self) -> Tuple[int, str, int]: client_id, = self.read_uint() name, = self.read_str() play_as, = self.read_byte() return self.data(client_id, check_length(name, NETWORK_CLIENT_NAME_LENGTH, "'name'"), play_as)
def decode(self) -> Tuple[Union[list, dict, str]]: json_string, = self.read_str() json_data = json.loads(check_length(json_string, NETWORK_GAMESCRIPT_JSON_LENGTH, "'json_data'")) return self.data(json_data)
def encode(self, colour: Colour, result: str): self.write_ushort(Colour(colour)) self.write_str(check_length(result, NETWORK_RCONCOMMAND_LENGTH, "'result'"))
def decode(self) -> Tuple[str, str, str]: password, name, version = self.read_str(3) return self.data(check_length(password, NETWORK_PASSWORD_LENGTH, "'password'"), check_length(name, NETWORK_CLIENT_NAME_LENGTH, "'name'"), check_length(version, NETWORK_REVISION_LENGTH, "'version'"))
def decode(self) -> Tuple[Colour, str]: colour, = self.read_ushort() result, = self.read_str() return self.data(colour, check_length(result, NETWORK_RCONCOMMAND_LENGTH, "'result'"))
def decode(self) -> Tuple[ChatAction, DestType, int, str]: action, _type, client_id = self.read_data(['byte', 'byte', 'uint']) message, = self.read_str() return self.data(ChatAction(action), DestType(_type), client_id, check_length(message, NETWORK_CHAT_LENGTH, "'message'"))
def encode(self, origin: str, message: str): # The maximum length for origin and message is not known. For sanity we stick to # NETWORK_GAMESCRIPT_JSON_LENGTH as that is closest to SEND_MTU self.write_str(check_length(origin, NETWORK_GAMESCRIPT_JSON_LENGTH, "'origin'"), check_length(message, NETWORK_GAMESCRIPT_JSON_LENGTH, "'message'"))
def decode(self) -> Tuple[str]: command, = self.read_str() return self.data(check_length(command, NETWORK_RCONCOMMAND_LENGTH, "'command'"))
def decode(self) -> Tuple[str, str]: # The maximum length for origin and message is not known. For sanity we stick to # NETWORK_GAMESCRIPT_JSON_LENGTH as that is closest to SEND_MTU origin, message = self.read_str(2) return self.data(check_length(origin, NETWORK_GAMESCRIPT_JSON_LENGTH, "'origin'"), check_length(message, NETWORK_GAMESCRIPT_JSON_LENGTH, "'message'"))
def decode(self) -> Tuple[str]: command, = self.read_str() return self.data( check_length(command, NETWORK_RCONCOMMAND_LENGTH, "'command'"))
def decode(self) -> Tuple[Union[list, dict, str]]: json_string, = self.read_str() json_data = json.loads( check_length(json_string, NETWORK_GAMESCRIPT_JSON_LENGTH, "'json_data'")) return self.data(json_data)
def decode(self) -> Tuple[str, str]: name, version = self.read_str(2) return self.data( check_length(name, NETWORK_CLIENT_NAME_LENGTH, "'name'"), check_length(version, NETWORK_REVISION_LENGTH, "'version'"))
def decode(self) -> Tuple[Colour, str]: colour, = self.read_ushort() result, = self.read_str() return self.data( colour, check_length(result, NETWORK_RCONCOMMAND_LENGTH, "'result'"))
def decode(self) -> Tuple[ChatAction, DestType, int, str]: action, _type, client_id = self.read_data(['byte', 'byte', 'uint']) message, = self.read_str() return self.data( ChatAction(action), DestType(_type), client_id, check_length(message, NETWORK_CHAT_LENGTH, "'message'"))
def encode(self, origin: str, message: str): # The maximum length for origin and message is not known. For sanity we stick to # NETWORK_GAMESCRIPT_JSON_LENGTH as that is closest to SEND_MTU self.write_str( check_length(origin, NETWORK_GAMESCRIPT_JSON_LENGTH, "'origin'"), check_length(message, NETWORK_GAMESCRIPT_JSON_LENGTH, "'message'"))