Skip to content

Commit 6c8eb36

Browse files
Support WON Query Protocol
1 parent bde8573 commit 6c8eb36

File tree

4 files changed

+37
-9
lines changed

4 files changed

+37
-9
lines changed

opengsq/protocols/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@
66
from opengsq.protocols.quake2 import Quake2
77
from opengsq.protocols.quake3 import Quake3
88
from opengsq.protocols.source import Source
9+
from opengsq.protocols.won import WON

opengsq/protocols/source.py

+9-8
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ class Source(ProtocolBase):
1212
"""Source Engine Query Protocol"""
1313
full_name = 'Source Engine Query Protocol'
1414

15+
_A2S_INFO = b'\x54Source Engine Query\0'
16+
_A2S_PLAYER = b'\x55'
17+
_A2S_RULES = b'\x56'
18+
1519
class __RequestHeader():
16-
A2S_INFO = b'\x54Source Engine Query\0'
17-
A2S_PLAYER = b'\x55'
18-
A2S_RULES = b'\x56'
1920
A2A_PING = b'\x69'
2021
A2S_SERVERQUERY_GETCHALLENGE = b'\x57'
2122

@@ -37,7 +38,7 @@ async def get_info(self) -> dict:
3738
3839
See: https://developer.valvesoftware.com/wiki/Server_queries#A2S_INFO
3940
"""
40-
response_data = await self.__connect_and_send_challenge(self.__RequestHeader.A2S_INFO)
41+
response_data = await self.__connect_and_send_challenge(self._A2S_INFO)
4142

4243
br = BinaryReader(response_data)
4344
header = br.read_byte()
@@ -132,9 +133,9 @@ async def get_players(self) -> list:
132133
"""
133134
This query retrieves information about the players currently on the server.
134135
135-
See: https://developer.valvesoftware.com/wiki/Server_queries#A2S_INFO
136+
See: https://developer.valvesoftware.com/wiki/Server_queries#A2S_PLAYER
136137
"""
137-
response_data = await self.__connect_and_send_challenge(self.__RequestHeader.A2S_PLAYER)
138+
response_data = await self.__connect_and_send_challenge(self._A2S_PLAYER)
138139

139140
br = BinaryReader(response_data)
140141
header = br.read_byte()
@@ -170,7 +171,7 @@ async def get_rules(self) -> dict:
170171
171172
See: https://developer.valvesoftware.com/wiki/Server_queries#A2S_RULES
172173
"""
173-
response_data = await self.__connect_and_send_challenge(self.__RequestHeader.A2S_RULES)
174+
response_data = await self.__connect_and_send_challenge(self._A2S_RULES)
174175

175176
br = BinaryReader(response_data)
176177
header = br.read_byte()
@@ -196,7 +197,7 @@ async def __connect_and_send_challenge(self, header: __RequestHeader) -> bytes:
196197
request_base = b'\xFF\xFF\xFF\xFF' + header
197198
request_data = request_base
198199

199-
if header != self.__RequestHeader.A2S_INFO:
200+
if header != self._A2S_INFO:
200201
request_data += b'\xFF\xFF\xFF\xFF'
201202

202203
sock.send(request_data)

opengsq/protocols/won.py

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from opengsq.protocols.source import Source
2+
3+
4+
class WON(Source):
5+
"""World Opponent Network (WON) Query Protocol"""
6+
full_name = 'World Opponent Network (WON) Protocol'
7+
8+
_A2S_INFO = b'details\0'
9+
_A2S_PLAYER = b'players'
10+
_A2S_RULES = b'rules'
11+
12+
13+
if __name__ == '__main__':
14+
import asyncio
15+
import json
16+
17+
async def main_async():
18+
won = WON(address='212.227.190.150', query_port=27020, timeout=5.0)
19+
info = await won.get_info()
20+
players = await won.get_players()
21+
rules = await won.get_rules()
22+
print(json.dumps(info, indent=None, ensure_ascii=False) + '\n')
23+
print(json.dumps(players, indent=None, ensure_ascii=False) + '\n')
24+
print(json.dumps(rules, indent=None, ensure_ascii=False) + '\n')
25+
26+
asyncio.run(main_async())

opengsq/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '1.2.3'
1+
__version__ = '1.3.0'

0 commit comments

Comments
 (0)