-
Notifications
You must be signed in to change notification settings - Fork 0
/
Webirc.py
102 lines (95 loc) · 2.71 KB
/
Webirc.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
99
100
101
102
#qpy:console
from twisted.web import server, resource
from twisted.internet import reactor
import json, datetime
class User:
def __init__(self, name):
self.name = name
self.current_request = None
def receiveMsg(self, request):
self.current_request = request
activeUsers[self.name] = datetime.datetime.now()
def sendMsg(self, msg):
print msg
#print self.name + " receiving msg"
if self.current_request:
self.current_request.write(msg)
self.current_request.finish()
self.current_request = None
#print "sent message to: " + self.name
class Room:
roomusers = []
deadusers = []
def __init__(self, chame):
self.chanName = chame
def sendMsg(self, msg):
for user in users:
#print user + " sent a message: " + msg
try:
users[user].sendMsg(msg)
except:
pass
def addUser(self, user):
self.roomusers.append(user)
def listUsers(self):
return self.roomusers
def removeDeadUSERS():
mcusers = users
for user in mcusers:
userelapsed = datetime.datetime.now() - activeUsers[user]
if userelapsed > datetime.timedelta(minutes=5):
del users[user]
del activeUsers[user]
def messagePacket(name, msg):
msgpkg = {}
msgpkg['from'] = name
msgpkg['msg'] = msg
return json.dumps(msgpkg)
def createRoom(room):
rooms[room] = Room(room)
users = {}
activeUsers = {}
rooms = {}
class Webirc(resource.Resource):
isLeaf = True
mainroom = Room("Main")
def setHeaders(self, request):
request.setHeader('Access-Control-Allow-Origin','*')
request.setHeader('Access-Control-Allow-Methods','GET, POST')
request.setHeader('Access-Control-Allow-Headers','x-prototype-version,x-requested-with')
request.setHeader('Access-Control-Max-Age',2520)
request.setHeader('Content-type','application/json')
def render_GET(self, request):
removeDeadUSERS()
if (request.path == "/msgs"):
self.setHeaders(request)
user = request.args['id'][0]
if user not in users.keys():
users[user] = User(user)
self.mainroom.addUser(user)
users[user].receiveMsg(request)
return server.NOT_DONE_YET
if (request.path == "/lst"):
self.setHeaders(request)
pkg = {}
pkg["users"] = self.mainroom.listUsers()
return json.dumps(pkg)
if (request.path == "/actv"):
return str(activeUsers)
def render_POST(self, request):
if (request.path == "/msg"):
self.setHeaders(request)
data = request.args['data'][0]
self.mainroom.sendMsg(data)
if(request.path == "/crm"):
roomname = request.args['room']
createRoom(roomName)
if(request.path == "/jrm"):
roomname = request.args['room']
userID = request.args['id']
self.rooms[roomname].addUser(userID)
return '200'
root = Webirc()
root.putChild('ajax', Webirc())
reactor.listenTCP(8080, server.Site(root))
reactor.run()