Update the lobbybot such that it can work both with 2.0,2.1 and 2.2 lobbies, defaulting to 2.1 (as that's the current release)
git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@7101 4a71c877-e1ca-e34f-864e-861f7616d084master
parent
d001fdbafc
commit
7261e3392a
|
@ -23,6 +23,7 @@
|
|||
|
||||
from __future__ import with_statement
|
||||
from contextlib import contextmanager
|
||||
from pkg_resources import parse_version
|
||||
import socket
|
||||
import struct
|
||||
|
||||
|
@ -40,12 +41,29 @@ def _swap_endianness(i):
|
|||
return struct.unpack(">I", struct.pack("<I", i))
|
||||
|
||||
class masterserver_connection:
|
||||
# >= 2.0 data
|
||||
name_length = 64
|
||||
host_length = 16
|
||||
|
||||
# >= 2.2 data
|
||||
misc_length = 64
|
||||
extra_length = 255
|
||||
versionstring_length = 64
|
||||
modlist_length = 255
|
||||
|
||||
host = None
|
||||
port = None
|
||||
|
||||
def __init__(self, host, port):
|
||||
def __init__(self, host, port, version = '2.2'):
|
||||
# Binary struct format to use (GAMESTRUCT)
|
||||
if parse_version(version) >= parse_version('2.0'):
|
||||
gameFormat = "!%dsII%ds6I" % (self.name_length, self.host_length)
|
||||
if parse_version(version) >= parse_version('2.2'):
|
||||
gameFormat += '%ds%ds%ds%ds10I' % (self.misc_length, self.extra_length, self.versionstring_length, self.modlist_length)
|
||||
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.version = version
|
||||
|
||||
def list(self, allowException = False):
|
||||
with _socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||
|
@ -58,7 +76,7 @@ class masterserver_connection:
|
|||
(count,) = self._recv(s, "!I")
|
||||
for i in xrange(0,count):
|
||||
(description, size, flags, host, maxPlayers, currentPlayers,
|
||||
user1, user2, user3, user4 ) = self._recv(s, "!64sII16sIIIIII")
|
||||
user1, user2, user3, user4) = self._recv(s, self.gameFormat)
|
||||
description = description.strip("\0")
|
||||
host = host.strip("\0")
|
||||
# Workaround for the fact that some of the
|
||||
|
|
|
@ -46,7 +46,7 @@ class Bot:
|
|||
self.commands = BotCommands()
|
||||
self.commands.bot = self
|
||||
self.irc = bot_connection(self.commands, ircServer, ircPort, ircChannel, ircNick)
|
||||
self.lobby = masterserver_connection(lobbyServer, lobbyPort)
|
||||
self.lobby = masterserver_connection(lobbyServer, lobbyPort, version='2.1')
|
||||
self.check = change_notifier(self.irc, self.lobby)
|
||||
|
||||
def start(self):
|
||||
|
|
Loading…
Reference in New Issue