Skip to content

Commit b8a0309

Browse files
committed
ENHANCEMENTS:
- Ports have a tag if they are UDP or TCP (or both) now - /doc command shows tcp/udp notation in server documentation - /doc new node sheet added to server documentation CHANGES - Some code cleanups BUGFIX: - Rare hangup if a DCS server starts non-responsive
1 parent 77338af commit b8a0309

File tree

43 files changed

+690
-147
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+690
-147
lines changed

core/data/const.py

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
"Side",
55
"Status",
66
"Coalition",
7-
"Channel"
7+
"Channel",
8+
"PortType",
9+
"Port",
810
]
911

1012

@@ -44,3 +46,41 @@ class Channel(Enum):
4446
COALITION_BLUE_EVENTS = 'blue_events'
4547
COALITION_RED_CHAT = 'red'
4648
COALITION_RED_EVENTS = 'red_events'
49+
50+
51+
class PortType(Enum):
52+
TCP = 'tcp'
53+
UDP = 'udp'
54+
BOTH = 'tcp+udp'
55+
56+
57+
class Port:
58+
59+
def __init__(self, port: int, typ: PortType):
60+
self.port = port
61+
self.typ = typ
62+
63+
def __repr__(self):
64+
return f'{self.port}/{self.typ.value}'
65+
66+
def __str__(self):
67+
return str(self.port)
68+
69+
def __int__(self):
70+
return self.port
71+
72+
def __index__(self):
73+
return self.port
74+
75+
def __hash__(self):
76+
return hash(self.port)
77+
78+
def __eq__(self, other):
79+
if isinstance(other, Port):
80+
return self.port == other.port
81+
elif isinstance(other, int):
82+
return self.port == other
83+
return False
84+
85+
def type(self):
86+
return self.typ

core/data/dataobject.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import logging
44

5+
from abc import ABC
56
from configparser import ConfigParser
67
from dataclasses import dataclass, field
78
from typing import TYPE_CHECKING, Callable, Type, TypeVar, Generic, ClassVar, Any
@@ -18,7 +19,7 @@
1819

1920

2021
@dataclass
21-
class DataObject:
22+
class DataObject(ABC):
2223
name: str
2324
node: Node = field(compare=False, repr=False)
2425
pool: ConnectionPool = field(compare=False, repr=False, init=False)
@@ -36,6 +37,11 @@ def __post_init__(self):
3637
def __hash__(self):
3738
return hash(self.name)
3839

40+
def __eq__(self, other):
41+
if isinstance(other, DataObject):
42+
return self.name == other.name
43+
return False
44+
3945

4046
T = TypeVar("T", bound=DataObject)
4147

core/data/impl/instanceimpl.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from core.utils.helper import SettingsDict
1010
from dataclasses import dataclass
1111
from typing import TYPE_CHECKING
12+
from typing_extensions import override
1213

1314
if TYPE_CHECKING:
1415
from core import Server
@@ -20,6 +21,7 @@
2021
@DataObjectFactory.register()
2122
class InstanceImpl(Instance):
2223

24+
@override
2325
def __post_init__(self):
2426
super().__post_init__()
2527
self.is_remote = False
@@ -86,6 +88,7 @@ def update_instance(self, server_name: str | None = None):
8688
self.log.error(f"bot_port {self.locals.get('bot_port', 6666)} is already in use on node {self.node.name}!")
8789
raise
8890

91+
@override
8992
@property
9093
def home(self) -> str:
9194
return os.path.expandvars(self.locals.get('home', os.path.join(SAVED_GAMES, self.name)))
@@ -98,6 +101,7 @@ def update_server(self, server: Server | None = None):
98101
WHERE node = %s AND instance = %s
99102
""", (server.name if server and server.name != 'n/a' else None, self.node.name, self.name))
100103

104+
@override
101105
def set_server(self, server: Server | None):
102106
if self._server and self._server.status not in [Status.UNREGISTERED, Status.SHUTDOWN]:
103107
raise InstanceBusyError()
@@ -107,12 +111,12 @@ def set_server(self, server: Server | None):
107111
settings_path = os.path.join(self.home, 'Config', 'serverSettings.lua')
108112
if os.path.exists(settings_path):
109113
os.remove(settings_path)
110-
self.prepare()
114+
self._prepare()
111115
if server and server.name:
112116
server.instance = self
113117
self.update_server(server)
114118

115-
def prepare(self):
119+
def _prepare(self):
116120
if 'DCS' not in self.node.locals:
117121
return
118122
# desanitisation of Slmod (if there)

0 commit comments

Comments
 (0)