Files
sampy/sampy/client/__init__.py
2020-03-29 19:12:31 +02:00

36 lines
1.0 KiB
Python

import struct
import socket
from . import base
from . import query
from . import player
from ..struct.server import ServerConfig
STATE_UNKNOWN = (0, base.BaseClient)
STATE_QUERY = (1, query.QueryClient)
STATE_PLAYER = (2, player.PlayerClient)
class Client:
def __init__(self, config: ServerConfig, socket: socket.socket, ip: str, port: int):
self.config = config
self.socket = socket
self.ip = ip
self.port = port
self.set_state(STATE_UNKNOWN)
def set_state(self, state: tuple):
self.state = state
self.client = self.state[1](self.config, self.socket, self.ip, self.port)
async def on_packet(self, packet: bytes):
if self.state == STATE_UNKNOWN:
# We are currently unaware if this is a player client or query client, but we got a packet that will be our check to know
if packet.startswith(b"SAMP"):
self.set_state(STATE_QUERY)
else:
self.set_state(STATE_PLAYER)
await self.client.on_packet(packet)