Files
igncore/core/aochat/client_packets.py

267 lines
6.8 KiB
Python

from core.aochat.packets import *
class ClientPacket(Packet):
def __init__(self, packet_id, types, args):
self.id = packet_id
self.types = types
self.args = args
def to_bytes(self):
return encode_args(self.types, self.args)
def __str__(self):
return "ClientPacket(%d): %s" % (self.id, self.args)
@classmethod
def get_instance(cls, packet_id, data):
if packet_id == LoginRequest.id:
LoginRequest.from_bytes(data)
elif packet_id == LoginSelect.id:
LoginSelect.from_bytes(data)
elif packet_id == CharacterLookup.id:
CharacterLookup.from_bytes(data)
elif packet_id == PrivateMessage.id:
PrivateMessage.from_bytes(data)
elif packet_id == BuddyAdd.id:
BuddyAdd.from_bytes(data)
elif packet_id == BuddyRemove.id:
BuddyRemove.from_bytes(data)
elif packet_id == PrivateChannelInvite.id:
PrivateChannelInvite.from_bytes(data)
elif packet_id == PrivateChannelKick.id:
PrivateChannelKick.from_bytes(data)
elif packet_id == PrivateChannelJoin.id:
PrivateChannelJoin.from_bytes(data)
elif packet_id == PrivateChannelLeave.id:
PrivateChannelLeave.from_bytes(data)
elif packet_id == PrivateChannelKickAll.id:
PrivateChannelKickAll.from_bytes(data)
elif packet_id == PrivateChannelMessage.id:
PrivateChannelMessage.from_bytes(data)
elif packet_id == PublicChannelMessage.id:
PublicChannelMessage.from_bytes(data)
elif packet_id == Ping.id:
Ping.from_bytes(data)
elif packet_id == ChatCommand.id:
ChatCommand.from_bytes(data)
else:
return None
class LoginRequest(ClientPacket):
id = 2
types = "ISS"
def __init__(self, unknown, username, key):
self.unknown = unknown
self.username = username
self.key = key
super().__init__(self.id, self.types, [self.unknown, self.username, self.key])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)
class LoginSelect(ClientPacket):
id = 3
types = "I"
def __init__(self, char_id):
self.char_id = char_id
super().__init__(self.id, self.types, [self.char_id])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)
class CharacterLookup(ClientPacket):
id = 21
types = "S"
def __init__(self, name):
self.name = name
super().__init__(self.id, self.types, [self.name])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)
class PrivateMessage(ClientPacket):
id = 30
types = "ISS"
def __init__(self, char_id, message, blob):
self.char_id = char_id
self.message = message
self.blob = blob
super().__init__(self.id, self.types, [self.char_id, self.message, self.blob])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)
class BuddyAdd(ClientPacket):
id = 40
types = "IS"
def __init__(self, char_id, status):
self.char_id = char_id
self.status = status
super().__init__(self.id, self.types, [self.char_id, self.status])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)
class BuddyRemove(ClientPacket):
id = 41
types = "I"
def __init__(self, char_id):
self.char_id = char_id
super().__init__(self.id, self.types, [self.char_id])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)
class PrivateChannelInvite(ClientPacket):
id = 50
types = "I"
def __init__(self, char_id):
self.char_id = char_id
super().__init__(self.id, self.types, [self.char_id])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)
class PrivateChannelKick(ClientPacket):
id = 51
types = "I"
def __init__(self, char_id):
self.char_id = char_id
super().__init__(self.id, self.types, [self.char_id])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)
class PrivateChannelJoin(ClientPacket):
id = 52
types = "I"
def __init__(self, private_channel_id):
self.private_channel_id = private_channel_id
super().__init__(self.id, self.types, [self.private_channel_id])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)
class PrivateChannelLeave(ClientPacket):
id = 53
types = "I"
def __init__(self, private_channel_id):
self.private_channel_id = private_channel_id
super().__init__(self.id, self.types, [self.private_channel_id])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)
class PrivateChannelKickAll(ClientPacket):
id = 54
types = ""
def __init__(self):
super().__init__(self.id, self.types, [])
@classmethod
def from_bytes(cls, data):
return cls()
class PrivateChannelMessage(ClientPacket):
id = 57
types = "ISS"
def __init__(self, private_channel_id, message, blob):
self.private_channel_id = private_channel_id
self.message = message
self.blob = blob
super().__init__(self.id, self.types, [self.private_channel_id, self.message, self.blob])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)
class PublicChannelMessage(ClientPacket):
id = 65
types = "GSS"
def __init__(self, channel_id, message, blob):
self.channel_id = channel_id
self.message = message
self.blob = blob
super().__init__(self.id, self.types, [self.channel_id, self.message, self.blob])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)
class Ping(ClientPacket):
id = 100
types = "S"
def __init__(self, blob):
self.blob = blob
super().__init__(self.id, self.types, [self.blob])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)
class ChatCommand(ClientPacket):
id = 120
types = "s"
def __init__(self, commands):
self.commands = commands
super().__init__(self.id, self.types, [self.commands])
@classmethod
def from_bytes(cls, data):
args = decode_args(cls.types, data)
return cls(*args)