Meddelanden¶
Moduler kommunicerar med varandra genom meddelanden. Alla meddelandetyper definieras i filen
lrpy/message.py.
Definiera ett nytt meddelande¶
Ett meddelande är en Pydantic BaseModel med ett type-fält som unikt identifierar meddelandet.
from typing import Literal
from pydantic import BaseModel
class SensorMessage(BaseModel):
type: Literal['sensor'] = 'sensor'
distance: float
type-fältet måste:
Vara en
Literalmed exakt ett värde (t.ex.Literal['sensor']).Ha ett default-värde som matchar literalen (t.ex.
= 'sensor').Vara unikt — inga två meddelandetyper får ha samma
type-sträng.
type-strängen används internt för att routa meddelandet till rätt lyssnare.
Registrera meddelandet¶
Efter att meddelandet definierats måste det läggas till i Message-unionen längst ned i message.py:
type Message = Annotated[
TestMessage | TestMessage2 | SetSpeedMessage | SensorMessage,
Field(discriminator="type")
]
Om meddelandet inte läggs till i unionen kommer det inte att kunna skickas eller tas emot.
Validering av fält¶
Pydantic validerar alla fält automatiskt. Field kan användas för att lägga till begränsningar:
from pydantic import BaseModel, Field
from typing import Literal
class SetSpeedMessage(BaseModel):
type: Literal['set_speed'] = 'set_speed'
left_speed: int = Field(ge=0, le=255)
right_speed: int = Field(ge=0, le=255)
Här säkerställer ge=0, le=255 att värdena ligger inom intervallet 0–255. Om ett ogiltigt värde skickas
ger Pydantic ett felmeddelande.
Skicka och ta emot¶
Se Modul för hur meddelanden skickas med self.emit_message() och tas emot med @on_message.