-
Notifications
You must be signed in to change notification settings - Fork 1
/
entity.py
98 lines (86 loc) · 2.91 KB
/
entity.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
89
90
91
92
93
94
95
96
97
98
import traceback
import sys
import threading
import time
import socket
import commandparser
from mushyutils import wrap
class Entity(object):
__slots__ = ("proxy", "name", "session", "dm", "status", "tallies",
"bags", "facade", "tallies_persist", "bags_persist",
"languages", "aliases", "hcode", "salt", "mask", "settings", "test",
"spectator", "aspects")
def __init__(self, name="", hcode=None, salt=None, proxy=None, session=None):
self.proxy = proxy
if self.proxy is not None:
self.proxy.setEntity(self)
self.name = name
self.session = session
self.dm = False
self.spectator = False
self.mask = None
self.status = ""
self.tallies = {}
self.bags = {}
self.facade = None
self.tallies_persist = []
self.bags_persist = []
self.hcode = hcode
self.salt = salt
self.languages = []
self.aliases = {}
self.aspects = []
self.settings = {
"cols": 0,
"saywrap": False
}
def sendMessage(self, message):
if(self.proxy is not None):
try:
if self.settings["cols"] != 0:
message = wrap(message, cols=self.settings["cols"])
self.proxy.socket.send(message + "\n")
except:
print "Server: Exception thrown while sending " + self.name + " a message."
self.proxy.kill()
def hookProxy(self, proxy):
self.proxy = proxy
self.proxy.setEntity(self)
class ClientProxy(threading.Thread):
__slots__ = ("socket", "entity", "running", "bypass", "parser")
def __init__(self, socket):
threading.Thread.__init__(self)
self.socket = socket
self.entity = None
self.running = False
self.bypass = False
self.parser = commandparser.CommandParser()
def setEntity(self, entity):
self.entity = entity
def kill(self):
try:
if self.socket:
self.socket.shutdown(socket.SHUT_RDWR)
self.socket.close()
self.running = False
except:
pass
def run(self):
try:
self.running = True
while self.running:
if self.bypass:
time.sleep(0)
else:
data = self.socket.recv(4096).strip()
if not data:
continue
else:
self.parser.parseLine(data, self.entity)
except:
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_exception(exc_type, exc_value, exc_traceback, limit=None, file=sys.stdout)
self.running = False
if self.socket:
self.socket.close()
print "Client connection closed"