-
Notifications
You must be signed in to change notification settings - Fork 0
/
assassind.py
88 lines (68 loc) · 1.76 KB
/
assassind.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
82
83
84
85
86
87
88
from socket import *
class Player:
name = None
ip = None
ident = None
score = None
kills = None
deaths = None
def __init__(self, name, ip, ident, kills, deaths):
self.name = name
self.ip = ip
self.ident = ident
self.score = kills - deaths
self.kills = kills
self.deaths = deaths
def __str__(self):
return "{0} {1} {2}".format(self.name, self.kills, self.deaths)
def kill(self):
self.kills += 1
self.score += 1
def die(self):
self.deaths += 1
self.score -= 1
class Assassin_Daemon:
file_name = ""
data = []
def __init__(self, data_file_name):
self.file_name = data_file_name
def kill(self, killer, victim):
for p in self.data:
if p.ident == int(killer):
p.kill()
if p.ident == int(victim):
p.die()
def load_data_file(self):
with open(self.file_name, "r") as f:
for line in f:
player_data = line.split()
self.data += [Player(player_data[0], player_data[1], int(player_data[2]), int(player_data[4]), int(player_data[5]))]
def save_data_file(self):
with open(self.file_name, "w") as f:
self.data.sort(cmp = lambda x, y: x.score - y.score)
f.writelines(["{0} {1} {2} {3} {4} {5}\n".format(p.name, p.ip, p.ident, p.score, p.kills, p.deaths) for p in self.data])
def run(self):
self.load_data_file()
s = socket(AF_INET, SOCK_STREAM)
host = ""
port = 1337
backlog = 5
size = 1024
s = socket(AF_INET, SOCK_STREAM)
s.bind((host, port))
s.listen(backlog)
while True:
for p in self.data:
print p
client, address = s.accept()
data = client.recv(size)
if data:
msg = str(data)
client.send(msg)
print "Recieved:", str(msg)
cmd = msg.split()
if cmd[0] == "kill":
self.kill(*cmd[1:])
self.save_data_file()
client.close()
Assassin_Daemon("data").run()