Initial commit of mtgonline project
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
"""Pydantic models for protocol buffer message conversion."""
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional, List, Dict, Any
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class ProtoMessageBase(BaseModel):
|
||||
"""Base class for protocol buffer message models."""
|
||||
message_type: str
|
||||
timestamp: datetime = datetime.now()
|
||||
|
||||
|
||||
class SessionCommand(ProtoMessageBase):
|
||||
"""Session command message."""
|
||||
message_type: str = "SessionCommand"
|
||||
cmd_type: int
|
||||
cmd_id: int = 0
|
||||
data: Dict[str, Any] = {}
|
||||
|
||||
|
||||
class GameCommand(ProtoMessageBase):
|
||||
"""Game command message."""
|
||||
message_type: str = "GameCommand"
|
||||
cmd_type: int
|
||||
cmd_id: int = 0
|
||||
player_id: Optional[int] = None
|
||||
data: Dict[str, Any] = {}
|
||||
|
||||
|
||||
class GameEvent(ProtoMessageBase):
|
||||
"""Game event message."""
|
||||
message_type: str = "GameEvent"
|
||||
event_type: int
|
||||
player_id: Optional[int] = None
|
||||
data: Dict[str, Any] = {}
|
||||
|
||||
|
||||
class Response(ProtoMessageBase):
|
||||
"""Response message."""
|
||||
message_type: str = "Response"
|
||||
cmd_id: int
|
||||
response_code: int
|
||||
data: Dict[str, Any] = {}
|
||||
|
||||
|
||||
class ServerInfoUser(BaseModel):
|
||||
"""ServerInfo_User message."""
|
||||
id: int
|
||||
name: str
|
||||
user_level: int = 0
|
||||
address: Optional[str] = None
|
||||
real_name: Optional[str] = None
|
||||
country: Optional[str] = None
|
||||
avatar_bmp: Optional[bytes] = None
|
||||
server_id: Optional[int] = None
|
||||
session_id: Optional[int] = None
|
||||
accountage_secs: Optional[int] = None
|
||||
email: Optional[str] = None
|
||||
privlevel: Optional[str] = None
|
||||
|
||||
|
||||
class ServerInfoDeckStorageFile(BaseModel):
|
||||
"""ServerInfo_DeckStorage_File message."""
|
||||
creation_time: Optional[int] = None
|
||||
|
||||
|
||||
class ServerInfoDeckStorageFolder(BaseModel):
|
||||
"""ServerInfo_DeckStorage_Folder message."""
|
||||
items: List[Dict[str, Any]] = []
|
||||
|
||||
|
||||
class ServerInfoDeckStorageTreeItem(BaseModel):
|
||||
"""ServerInfo_DeckStorage_TreeItem message."""
|
||||
id: Optional[int] = None
|
||||
name: Optional[str] = None
|
||||
file: Optional[ServerInfoDeckStorageFile] = None
|
||||
folder: Optional[ServerInfoDeckStorageFolder] = None
|
||||
|
||||
|
||||
class ServerInfoCard(BaseModel):
|
||||
"""ServerInfo_Card message."""
|
||||
id: int
|
||||
name: str
|
||||
x: Optional[int] = None
|
||||
y: Optional[int] = None
|
||||
face_down: bool = False
|
||||
tapped: bool = False
|
||||
attacking: bool = False
|
||||
color: Optional[str] = None
|
||||
pt: Optional[str] = None
|
||||
annotation: Optional[str] = None
|
||||
destroy_on_zone_change: bool = False
|
||||
doesnt_untap: bool = False
|
||||
counter_list: List[Dict[str, Any]] = []
|
||||
attach_player_id: Optional[int] = None
|
||||
attach_zone: Optional[str] = None
|
||||
attach_card_id: Optional[int] = None
|
||||
provider_id: Optional[str] = None
|
||||
|
||||
|
||||
class ServerInfoZone(BaseModel):
|
||||
"""ServerInfo_Zone message."""
|
||||
name: str
|
||||
zone_type: int = 0 # PrivateZone=0, PublicZone=1, HiddenZone=2
|
||||
with_coords: bool = False
|
||||
card_count: int = 0
|
||||
card_list: List[ServerInfoCard] = []
|
||||
always_reveal_top_card: bool = False
|
||||
always_look_at_top_card: bool = False
|
||||
|
||||
|
||||
class ServerInfoGame(BaseModel):
|
||||
"""ServerInfo_Game message."""
|
||||
server_id: Optional[int] = None
|
||||
room_id: Optional[int] = None
|
||||
game_id: Optional[int] = None
|
||||
description: Optional[str] = None
|
||||
with_password: bool = False
|
||||
max_players: int = 4
|
||||
game_types: List[int] = []
|
||||
creator_info: Optional[ServerInfoUser] = None
|
||||
only_buddies: bool = False
|
||||
only_registered: bool = False
|
||||
spectators_allowed: bool = False
|
||||
spectators_need_password: bool = False
|
||||
spectators_can_chat: bool = False
|
||||
spectators_omniscient: bool = False
|
||||
share_decklists_on_load: bool = False
|
||||
player_count: int = 0
|
||||
spectators_count: int = 0
|
||||
started: bool = False
|
||||
start_time: Optional[int] = None
|
||||
closed: bool = False
|
||||
Reference in New Issue
Block a user