Перейти к содержанию

0.1 -> 0.2

Application

Хост и порт для запуска теперь передаются в методе Application.run

import cubes

app = cubes.Application('127.0.0.1', 25565)
app.run()
import cubes

app = cubes.Application()
app.run('127.0.0.1', 25565)

В хендлеры пакетов теперь первым аргументов передаётся packet_id

import cubes

async def handler(packet: cubes.ReadBuffer):
    pass
import cubes

async def handler(packet_id: int, packet: cubes.ReadBuffer):
    pass

Возвращаемое хендлером значение теперь игнорируется. Вы должны отправлять все пакеты самостоятельно

import cubes

async def handler(packet: cubes.ReadBuffer) -> Optional[cubes.WriteBuffer]:
    """Process Status Ping."""
    return cubes.WriteBuffer().pack_varint(0x01).write(packet.read(8))
import cubes

async def handler(packet_id: int, packet: cubes.ReadBuffer) -> None:
    """Process Status Ping."""
    await packet.connection.send(
        cubes.WriteBuffer().pack_varint(0x01).write(packet_read(8)
    )

ReadBuffer

Теперь для инициализации необходим аргумент connection

import cubes

...

buff = cubes.ReadBuffer()
import cubes
import cubes.abc

...

conn: cubes.abc.AbstractConnection
buff = cubes.ReadBuffer(conn)

Такой же аргумент появился и у метода from_reader

import asyncio
import cubes

...

reader: asyncio.StreamReader
buff = await cubes.ReadBuffer.from_reader(reader)
import asyncio
import cubes
import cubes.abc

...

conn: cubes.abc.AbstractConnection
reader: asyncio.StreamReader
buff = await cubes.ReadBuffer.from_reader(conn, reader)

Connection

Класс Сonnection заменён на PlayerConnection.

При его инициализации необходимо передавать инстанс Application

import asyncio
import cubes

...

reader: asyncio.StreamReader
writer: asyncio.StreamWriter
conn = cubes.Connection(reader, writer)
import asyncio
import cubes
import cubes.abc

...

reader: asyncio.StreamReader
writer: asyncio.StreamWriter
app: cubes.abc.Application
conn = cubes.Connection(reader, writer, app)

В метод close и исключение СloseConnection добавлен опциональный аргумент reason

import cubes

...

conn: cubes.PlayerConnection
reason: str
await conn.close(reason)
import cubes

...

reason: str
raise cubes.CloseConnection(reason)

Удалены методы set_current и get_current. Вместо get_current используйте инстанс из property connection у ReadBuffer

import cubes

...

async def handler(packet: cubes.ReadBuffer):
    conn = cubes.Connection.get_current()
import cubes

...

async def handler(packet_id: int, packet: cubes.ReadBuffer):
    conn = packet.connection