mirror of
https://github.com/imayushsaini/Bombsquad-Ballistica-Modded-Server.git
synced 2026-08-15 13:04:30 +00:00
76 lines
2 KiB
Python
76 lines
2 KiB
Python
|
|
# Released under the MIT License. See LICENSE for details.
|
||
|
|
#
|
||
|
|
"""Analytics support."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from typing import assert_never, override, Annotated
|
||
|
|
|
||
|
|
from enum import Enum, unique
|
||
|
|
from dataclasses import dataclass
|
||
|
|
|
||
|
|
from efro.dataclassio import ioprepped, IOMultiType, IOAttrs
|
||
|
|
|
||
|
|
|
||
|
|
class AnalyticsEventTypeID(Enum):
|
||
|
|
"""Type ID for each of our subclasses."""
|
||
|
|
|
||
|
|
CLASSIC = 'c'
|
||
|
|
|
||
|
|
|
||
|
|
class AnalyticsEvent(IOMultiType[AnalyticsEventTypeID]):
|
||
|
|
"""Top level class for our multitype."""
|
||
|
|
|
||
|
|
@override
|
||
|
|
@classmethod
|
||
|
|
def get_type_id(cls) -> AnalyticsEventTypeID:
|
||
|
|
# Require child classes to supply this themselves. If we did a
|
||
|
|
# full type registry/lookup here it would require us to import
|
||
|
|
# everything and would prevent lazy loading.
|
||
|
|
raise NotImplementedError()
|
||
|
|
|
||
|
|
@override
|
||
|
|
@classmethod
|
||
|
|
def get_type(cls, type_id: AnalyticsEventTypeID) -> type[AnalyticsEvent]:
|
||
|
|
"""Return the subclass for each of our type-ids."""
|
||
|
|
# pylint: disable=cyclic-import
|
||
|
|
|
||
|
|
t = AnalyticsEventTypeID
|
||
|
|
if type_id is t.CLASSIC:
|
||
|
|
return ClassicAnalyticsEvent
|
||
|
|
|
||
|
|
# Important to make sure we provide all types.
|
||
|
|
assert_never(type_id)
|
||
|
|
|
||
|
|
@override
|
||
|
|
@classmethod
|
||
|
|
def get_type_id_storage_name(cls) -> str:
|
||
|
|
return '_t'
|
||
|
|
|
||
|
|
|
||
|
|
@ioprepped
|
||
|
|
@dataclass
|
||
|
|
class ClassicAnalyticsEvent(AnalyticsEvent):
|
||
|
|
"""Analytics event related to classic."""
|
||
|
|
|
||
|
|
@unique
|
||
|
|
class EventType(Enum):
|
||
|
|
"""Types of classic events."""
|
||
|
|
|
||
|
|
JOIN_PUBLIC_PARTY = 'jpb'
|
||
|
|
JOIN_PRIVATE_PARTY = 'jpr'
|
||
|
|
JOIN_PARTY_BY_ADDRESS = 'ja'
|
||
|
|
JOIN_NEARBY_PARTY = 'jn'
|
||
|
|
START_TEAMS_SESSION = 'st'
|
||
|
|
START_FFA_SESSION = 'sf'
|
||
|
|
START_COOP_SESSION = 'sc'
|
||
|
|
START_TOURNEY_COOP_SESSION = 'stc'
|
||
|
|
|
||
|
|
eventtype: Annotated[EventType, IOAttrs('t')]
|
||
|
|
extra: Annotated[str | None, IOAttrs('e', store_default=False)] = None
|
||
|
|
|
||
|
|
@override
|
||
|
|
@classmethod
|
||
|
|
def get_type_id(cls) -> AnalyticsEventTypeID:
|
||
|
|
return AnalyticsEventTypeID.CLASSIC
|