-
Notifications
You must be signed in to change notification settings - Fork 36
/
Copy pathrooms.py
94 lines (76 loc) · 2.51 KB
/
rooms.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
'''
Created on 2016年7月22日
@author: heguofeng
todo:改成event模式 7.22
'''
from _overlapped import NULL
class room(object):
roomid=""
def __init__(self,roomid="",users=[],messages=[],roomsize=2):
self.roomid=roomid[:]
self.roomsize=roomsize
self.users=users[:]
self.messages=messages[:]
self.messageids=[]
self.currentid=0
def getroomid(self):
return self.roomid
def subscribe(self,user):
if(len(self.users)>self.roomsize-1):
return False
self.users.append(user)
def unsubscribe(self,user):
self.users.remove(user)
def publish(self,message):
self.messages.append(message)
self.messageids.append(str(self.currentid))
self.currentid+=1
def getmessage(self,index=0):
if((len(self.messages))>0):
message=(self.messages[0])[:]
messageid=(self.messageids[0])[:]
#print("getmessage 1")
#print(message)
return(message,messageid)
return("","0")
def delmessage(self,messageid):
try:
index=self.messageids.index(messageid)
del self.messages[index]
del self.messageids[index]
return True
except:
return False
class rooms(object):
def __init__(self,roomlimit=100):
self.roomlimit=roomlimit
self.rooms=[]
def getroom(self,roomid):
#print(len(self.rooms))
for i in range(0,len(self.rooms)):
r=self.rooms[i]
if(r.roomid==roomid):
return(r)
return(NULL)
def subscribe(self,roomid,user):
for r in self.rooms:
if(r.roomid==roomid):
return(r.subscribe(user))
if(len(self.rooms)<self.roomlimit-1):
r=room(roomid,[user])
self.rooms.append(r)
return True
return False
def unsubscrible(self,roomid,user):
for r in self.rooms:
if(r.getroomid()==roomid):
r.unsubscribe(user)
if(len(r.users)==0):
del r
return True
return False
def getmessage(self,roomid):
for r in self.rooms:
if(r.roomid==roomid):
return r.getmessage()
return ""