-
Notifications
You must be signed in to change notification settings - Fork 0
/
Model.py
81 lines (71 loc) · 2.51 KB
/
Model.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
'''
Created on 12 Sep 2013
@author: koen
'''
import os
import socket
import subprocess
from BeautifulSoup import BeautifulSoup
class Model():
def __init__(self):
pass
def readIPs(self):
try:
f = open(os.path.expanduser('~/.ETstat'), 'r')
except IOError:
f = open(os.path.expanduser('~/.ETstat'), 'w')
f.close()
f = open(os.path.expanduser('~/.ETstat'), 'r')
ips = []
for i in f:
try:
ip = str(i).split(':')[0]
port = int(str(i).split(':')[1])
socket.inet_aton(ip)
ips.append(i)
except (socket.error, IndexError, ValueError):
pass
f.close()
return ips
def parseServer(self, serverData):
serverData = serverData.replace('<name>', '<servername>')
serverData = serverData.replace('</name>', '</servername>')
parsedServer = []
xml = BeautifulSoup(serverData)
if xml.qstat.server['status'] == 'DOWN':
parsedServer.append('Server is down')
parsedServer.append(xml.qstat.server.hostname.string.split('&')[0])
parsedServer.append('999')
parsedServer.append('0/0')
else:
parsedServer.append(xml.qstat.server.servername.string)
parsedServer.append(xml.qstat.server.hostname.string.split('&')[0])
parsedServer.append(xml.qstat.server.ping.string)
parsedServer.append(xml.qstat.server.numplayers.string + '/' +
xml.qstat.server.maxplayers.string)
return parsedServer
def getServers(self):
servers = []
ips = self.readIPs()
for ip in ips:
proc = subprocess.Popen(['quakestat', '-xml', '-woets', ip],
stdout=subprocess.PIPE)
try:
servers.append(self.parseServer(proc.stdout.read()))
except AttributeError:
print('Invalid server: ' + ip)
self.delServer(ip[:-1]) # Stripping trailing \n
return servers
def addServer(self, IP):
f = open(os.path.expanduser('~/.ETstat'), 'a')
f.write(IP + '\n')
f.close()
def delServer(self, IP):
f = open(os.path.expanduser('~/.ETstat'), 'r')
lines = f.readlines()
f.close()
f = open(os.path.expanduser('~/.ETstat'), 'w')
for i in lines:
if i != IP + '\n':
f.write(i)
f.close()