|
|
|
@ -1,10 +1,16 @@
|
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
from collections.abc import (
|
|
|
|
|
Mapping,
|
|
|
|
|
Sequence,
|
|
|
|
|
)
|
|
|
|
|
from typing import (
|
|
|
|
|
Literal,
|
|
|
|
|
Type,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
from attrs import (
|
|
|
|
|
define,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
from ...our_types import (
|
|
|
|
@ -14,11 +20,13 @@ from ...our_types import (
|
|
|
|
|
JSON,
|
|
|
|
|
ServiceType,
|
|
|
|
|
ServiceClass,
|
|
|
|
|
serializable,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@serializable
|
|
|
|
|
@define(
|
|
|
|
|
frozen=True,
|
|
|
|
|
kw_only=True,
|
|
|
|
|
)
|
|
|
|
|
class GeneralTransportDatagram:
|
|
|
|
|
_version: int = 1
|
|
|
|
|
timestamp_ns: int
|
|
|
|
@ -27,7 +35,10 @@ class GeneralTransportDatagram:
|
|
|
|
|
data: JSON | GeneralTransportMetadata | None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@serializable
|
|
|
|
|
@define(
|
|
|
|
|
frozen=True,
|
|
|
|
|
kw_only=True,
|
|
|
|
|
)
|
|
|
|
|
class GeneralTransportMetadata:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
@ -35,13 +46,19 @@ class GeneralTransportMetadata:
|
|
|
|
|
# connect
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@serializable
|
|
|
|
|
@define(
|
|
|
|
|
frozen=True,
|
|
|
|
|
kw_only=True,
|
|
|
|
|
)
|
|
|
|
|
class ConnectDatagram(GeneralTransportDatagram):
|
|
|
|
|
message_type: Literal["connect"] = "connect"
|
|
|
|
|
data: ConnectMetadata
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@serializable
|
|
|
|
|
@define(
|
|
|
|
|
frozen=True,
|
|
|
|
|
kw_only=True,
|
|
|
|
|
)
|
|
|
|
|
class ConnectMetadata(GeneralTransportMetadata):
|
|
|
|
|
epoch: EpochId
|
|
|
|
|
type: ServiceType
|
|
|
|
@ -51,13 +68,19 @@ class ConnectMetadata(GeneralTransportMetadata):
|
|
|
|
|
# disconnect
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@serializable
|
|
|
|
|
@define(
|
|
|
|
|
frozen=True,
|
|
|
|
|
kw_only=True,
|
|
|
|
|
)
|
|
|
|
|
class DisconnectDatagram(GeneralTransportDatagram):
|
|
|
|
|
message_type: Literal["disconnect"] = "disconnect"
|
|
|
|
|
data: DisconnectMetadata
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@serializable
|
|
|
|
|
@define(
|
|
|
|
|
frozen=True,
|
|
|
|
|
kw_only=True,
|
|
|
|
|
)
|
|
|
|
|
class DisconnectMetadata(GeneralTransportMetadata):
|
|
|
|
|
epoch: EpochId
|
|
|
|
|
exceptional: bool
|
|
|
|
@ -67,14 +90,20 @@ class DisconnectMetadata(GeneralTransportMetadata):
|
|
|
|
|
# duplicate & replace sender types
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@serializable
|
|
|
|
|
@define(
|
|
|
|
|
frozen=True,
|
|
|
|
|
kw_only=True,
|
|
|
|
|
)
|
|
|
|
|
class DuplicateSenderDatagram(GeneralTransportDatagram):
|
|
|
|
|
message_type: Literal["duplicate_sender"] = "duplicate_sender"
|
|
|
|
|
data: ConnectMetadata
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@serializable
|
|
|
|
|
class ReplaceSenderDatagram(GeneralTransportMetadata):
|
|
|
|
|
@define(
|
|
|
|
|
frozen=True,
|
|
|
|
|
kw_only=True,
|
|
|
|
|
)
|
|
|
|
|
class ReplaceSenderDatagram(GeneralTransportDatagram):
|
|
|
|
|
message_type: Literal["replace_sender"] = "replace_sender"
|
|
|
|
|
data: ConnectMetadata
|
|
|
|
|
|
|
|
|
@ -82,13 +111,19 @@ class ReplaceSenderDatagram(GeneralTransportMetadata):
|
|
|
|
|
# failure
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@serializable
|
|
|
|
|
@define(
|
|
|
|
|
frozen=True,
|
|
|
|
|
kw_only=True,
|
|
|
|
|
)
|
|
|
|
|
class FailureDatagram(GeneralTransportDatagram):
|
|
|
|
|
message_type: Literal["failure"] = "failure"
|
|
|
|
|
data: FailureMetadata
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@serializable
|
|
|
|
|
@define(
|
|
|
|
|
frozen=True,
|
|
|
|
|
kw_only=True,
|
|
|
|
|
)
|
|
|
|
|
class FailureMetadata(GeneralTransportMetadata):
|
|
|
|
|
"""
|
|
|
|
|
Issues that a specific service has failed.
|
|
|
|
@ -105,7 +140,10 @@ class FailureMetadata(GeneralTransportMetadata):
|
|
|
|
|
# restart
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@serializable
|
|
|
|
|
@define(
|
|
|
|
|
frozen=True,
|
|
|
|
|
kw_only=True,
|
|
|
|
|
)
|
|
|
|
|
class RestartDatagram(GeneralTransportDatagram):
|
|
|
|
|
"""issues a restart of a whole Enjo network"""
|
|
|
|
|
|
|
|
|
@ -116,7 +154,21 @@ class RestartDatagram(GeneralTransportDatagram):
|
|
|
|
|
# transmit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@serializable
|
|
|
|
|
@define(
|
|
|
|
|
frozen=True,
|
|
|
|
|
kw_only=True,
|
|
|
|
|
)
|
|
|
|
|
class TransmitDatagram(GeneralTransportDatagram):
|
|
|
|
|
message_type: Literal["transmit"] = "transmit"
|
|
|
|
|
data: JSON
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MESSAGE_TYPE_MAP: Mapping[str, Type[GeneralTransportDatagram]] = {
|
|
|
|
|
"connect": ConnectDatagram,
|
|
|
|
|
"disconnect": DisconnectDatagram,
|
|
|
|
|
"duplicate_sender": DuplicateSenderDatagram,
|
|
|
|
|
"replace_sender": ReplaceSenderDatagram,
|
|
|
|
|
"failure": FailureDatagram,
|
|
|
|
|
"restart": RestartDatagram,
|
|
|
|
|
"transmit": TransmitDatagram,
|
|
|
|
|
}
|
|
|
|
|