17
17
reload (sys )
18
18
sys .setdefaultencoding ('utf-8' )
19
19
20
+
20
21
themeColor = ['red' ,'blue' ,'green' ,'black' ,'gray' ,'yellow' ]
21
22
count = 0
22
23
listenPort = 80
@@ -42,6 +43,14 @@ def SessionExsit(uid):
42
43
print "[-]sessions[{}] doesnt exsit,return False exsit" .format (uid )
43
44
return False
44
45
46
+ def CheckUserRegisted (username ):
47
+ sql = sqlite3 .connect ("chatroom.db" )
48
+ cur = sql .execute ("select id from user where name='{}'" .format (username ))
49
+ res = cur .fetchall ()
50
+ if (len (res )!= 0 ):
51
+ return True
52
+ return False
53
+
45
54
class Index (tornado .web .RequestHandler ):
46
55
def get (self ):
47
56
global listenPort
@@ -102,6 +111,7 @@ def post(self):
102
111
sessions [uid ]= {}#创建会话变量
103
112
sessions [uid ]['username' ]= username
104
113
sessions [uid ]['sessioncount' ]= 0
114
+ sessions [uid ]['chatroom' ]= "mainroom"
105
115
self .redirect ("/" )
106
116
else :
107
117
cur = sql .execute ("select id from user where name='{}' and password='{}' and valid=0" .format (username ,password ))
@@ -122,25 +132,30 @@ def post(self):
122
132
txtEmail = self .get_argument ('txtEmail' )
123
133
txtColege = self .get_argument ('txtColege' )
124
134
print "[Regist]" ,username ,password ,sex ,txtEmail ,txtColege
135
+ if (CheckUserRegisted (username )):
136
+ #已经被人注册了
137
+ print "[-]username already registed"
138
+ self .redirect ('/register.html?error=1' )
139
+ return
125
140
sql = sqlite3 .connect ("chatroom.db" )
126
141
sql .execute ("insert into user (name,password,email,gender,verify,valid) values('{}','{}','{}','{}','{}','{}')" .format (username ,password ,txtEmail ,sex ,md5 .md5 (username ).hexdigest (),0 ))
127
142
sql .commit ()
128
143
sql .close ()
129
144
varifyUrl = "http://" + address + "/verify?action=" + md5 .md5 (username ).hexdigest ()
130
- mailword = '{},您好,感谢您的注册,请点击下方的注册确认链接完成注册。 \n {}' .format (username ,varifyUrl )
131
- sendmail .SendMail (txtEmail ,"[东南偏南聊天室]请确认您的注册信息 " ,mailword )
145
+ mailword = '{},welcome,thanks for your registering!Please confirm your regist! \n {}' .format (username ,varifyUrl )
146
+ sendmail .SendMail (txtEmail ,"[Chatroom]Confirm regist " ,mailword )
132
147
self .redirect ('/login.html' )
133
148
134
149
def combineInfo (message_ = "[]" ,toWho_ = "everyone" ,id_ = 0 ,userName_ = "Annormous" ,status_ = "chat" ,color_ = "black" ):
135
150
strJ = "{message:'" + message_ + "',toWho:'" + toWho_ + "',id:" + str (id_ )+ ",userName:'" + userName_ + "',status:'" + status_ + "',color:'" + color_ + "'}"
136
151
return strJ
137
152
138
153
class SocketHandler (tornado .websocket .WebSocketHandler ):
139
- clients = set ()
154
+ clients = set ()
155
+ roomContainer = dict ()
140
156
global themeColor
141
157
global sessions
142
158
143
-
144
159
@staticmethod
145
160
def repeat_user_name (username ):
146
161
for u in SocketHandler .clients :
@@ -149,36 +164,63 @@ def repeat_user_name(username):
149
164
return False
150
165
151
166
@staticmethod
152
- def send_to_all (message ):
153
- for c in SocketHandler .clients :
154
- c .write_message (message )
167
+ def send_to_all (message ,roomid = "" ):
168
+ if (roomid == "" ):
169
+ for c in SocketHandler .clients :
170
+ c .write_message (message )
171
+ else :
172
+ for c in SocketHandler .roomContainer [roomid ]:
173
+ c .write_message (message )
155
174
156
175
@staticmethod
157
- def update_member (ss ):
158
- clientInfo = "{"
159
- for c in SocketHandler .clients :
160
- clientInfo = clientInfo + c .my_user_name + ":" + "1,"
161
- clientInfo = clientInfo + "}"
162
- if (clientInfo [- 2 ]== ',' ):
163
- clientInfo = clientInfo [:- 2 ]+ "}"
164
- dataToSend = combineInfo (message_ = clientInfo ,status_ = 'updateMember' )
165
- print "[+]updateMemeber self"
166
- ss .write_message (dataToSend )
176
+ def update_member (ss ,roomid = "" ):
177
+ if (roomid == "" ):
178
+ clientInfo = "{"
179
+ for c in SocketHandler .clients :
180
+ clientInfo = clientInfo + c .my_user_name + ":" + "{}," .format (roomid )
181
+ clientInfo = clientInfo + "}"
182
+ if (clientInfo [- 2 ]== ',' ):
183
+ clientInfo = clientInfo [:- 2 ]+ "}"
184
+ dataToSend = combineInfo (message_ = clientInfo ,status_ = 'updateMember' )
185
+ print "[+]updateMemeber self"
186
+ ss .write_message (dataToSend )
187
+ else :
188
+ clientInfo = "{"
189
+ for c in SocketHandler .roomContainer [roomid ]:
190
+ clientInfo = clientInfo + c .my_user_name + ":" + "1,"
191
+ clientInfo = clientInfo + "}"
192
+ if (clientInfo [- 2 ]== ',' ):
193
+ clientInfo = clientInfo [:- 2 ]+ "}"
194
+ dataToSend = combineInfo (message_ = clientInfo ,status_ = 'updateMember' )
195
+ print "[+]updateMemeber self"
196
+ ss .write_message (dataToSend )
167
197
168
198
@staticmethod
169
- def update_member_to_all ():
170
- clientInfo = "{"
171
- for c in SocketHandler .clients :
172
- clientInfo = clientInfo + c .my_user_name + ":" + "1,"
173
- clientInfo = clientInfo + "}"
174
- if (clientInfo [- 2 ]== ',' ):
175
- clientInfo = clientInfo [:- 2 ]+ "}"
176
- dataToSend = combineInfo (message_ = clientInfo ,status_ = 'updateMember' )
177
- print "[+]updateMemeber all"
178
- SocketHandler .send_to_all (dataToSend )
199
+ def update_member_to_all (roomid ):
200
+ if (roomid == "" ):
201
+ clientInfo = "{"
202
+ for c in SocketHandler .clients :
203
+ clientInfo = clientInfo + c .my_user_name + ":" + "1,"
204
+ clientInfo = clientInfo + "}"
205
+ if (clientInfo [- 2 ]== ',' ):
206
+ clientInfo = clientInfo [:- 2 ]+ "}"
207
+ dataToSend = combineInfo (message_ = clientInfo ,status_ = 'updateMember' )
208
+ print "[+]updateMemeber all"
209
+ SocketHandler .send_to_all (dataToSend )
210
+ else :
211
+ clientInfo = "{"
212
+ for c in SocketHandler .clients :
213
+ clientInfo = clientInfo + c .my_user_name + ":" + "1,"
214
+ clientInfo = clientInfo + "}"
215
+ if (clientInfo [- 2 ]== ',' ):
216
+ clientInfo = clientInfo [:- 2 ]+ "}"
217
+ dataToSend = combineInfo (message_ = clientInfo ,status_ = 'updateMember' )
218
+ print "[+]updateMemeber all"
219
+ SocketHandler .send_to_all (dataToSend ,roomid )
179
220
180
221
def open (self ):
181
222
self .my_color_name = "black"
223
+ self .my_chatroom = "1"
182
224
#self.my_user_name='Anonymous'+str(id(self))[-6:]
183
225
uid = self .get_secure_cookie ('uid' )
184
226
if (uid not in sessions ):
@@ -199,21 +241,23 @@ def open(self):
199
241
dataToSend = combineInfo (id_ = id (self ),userName_ = self .my_user_name ,status_ = 'varify' ,color_ = self .my_color_name )
200
242
self .write_message (dataToSend )
201
243
SocketHandler .clients .add (self )
244
+ SocketHandler .roomContainer [self .my_chatroom ].add (self )
202
245
dataToSend = combineInfo (userName_ = self .my_user_name ,status_ = 'join' )
203
246
print "[+]join all"
204
- SocketHandler .send_to_all (dataToSend )
205
- SocketHandler .update_member (self )
206
-
247
+ SocketHandler .send_to_all (dataToSend ,self .my_chatroom )
248
+ SocketHandler .update_member (self ,self .my_chatroom )
207
249
208
250
def on_close (self ):
209
251
uid = self .get_secure_cookie ('uid' )
210
252
if (uid not in sessions ):
211
253
print "[-]ws close found no session "
212
254
return
213
255
SocketHandler .clients .remove (self )
256
+ SocketHandler .roomContainer [self .my_chatroom ].remove (self )
257
+ #sessions.pop(uid,1)#newadd1
214
258
dataToSend = combineInfo (userName_ = self .my_user_name ,status_ = 'remove' )
215
259
print "[+]remove all"
216
- SocketHandler .send_to_all (dataToSend )
260
+ SocketHandler .send_to_all (dataToSend , self . my_chatroom )
217
261
print str (id (self )) + ' has left'
218
262
logStr = getTime ()+ self .my_user_name + ' left\n '
219
263
@@ -231,7 +275,7 @@ def on_message(self, message):
231
275
message ['message' ]= tmp
232
276
print "replace " ,tmp
233
277
dataToSend = combineInfo (userName_ = message ['userName' ],id_ = message ['id' ],message_ = message ['message' ],toWho_ = "everyone" ,status_ = "chat" ,color_ = message ['color' ])
234
- SocketHandler .send_to_all (dataToSend )
278
+ SocketHandler .send_to_all (dataToSend , self . my_chatroom )
235
279
elif (message ['status' ]== 'userNameChange' ):
236
280
tmpSession = {'userName' :message ['userName' ],'id' :str (id (self )),'color' :self .my_color_name }
237
281
logStr = getTime ()+ self .my_user_name + ' try to change nick name to ' + message ['userName' ]+ '\n '
@@ -246,10 +290,31 @@ def on_message(self, message):
246
290
self .write_message (dataToSend )
247
291
self .my_user_name = message ['userName' ]
248
292
print "[+]updateName all"
249
- SocketHandler .update_member_to_all ()
293
+ SocketHandler .update_member_to_all (self . my_chatroom )
250
294
elif (message ['status' ]== 'updateMember' ):
251
295
print "query for update member"
252
- SocketHandler .update_member (self )
296
+ SocketHandler .update_member (self ,self .my_chatroom )
297
+ elif (message ['status' ]== 'changeRoom' ):
298
+ tmp = str (message ['message' ])
299
+ originRoom = self .my_chatroom
300
+ self .my_chatroom = tmp
301
+ newRoom = tmp
302
+ #先删除原来房间的set 在增加新的房间的set
303
+ SocketHandler .roomContainer [originRoom ].remove (self )
304
+ SocketHandler .roomContainer [newRoom ].add (self )
305
+ #通知原房间所有用户一个user消失了
306
+ dataToSend = combineInfo (userName_ = self .my_user_name ,status_ = 'remove' )
307
+ print "[+]remove from origin room"
308
+ SocketHandler .send_to_all (dataToSend ,originRoom )
309
+ #通知新的房间所有用户一个user出现了
310
+ dataToSend = combineInfo (userName_ = self .my_user_name ,status_ = 'join' )
311
+ print "[+]join to new root"
312
+ SocketHandler .send_to_all (dataToSend ,newRoom )
313
+ #更新我的成员列表
314
+ SocketHandler .update_member (self ,self .my_chatroom )
315
+ #发送消息 告知更改mainroomName的html内容
316
+
317
+ print "[+]Change chatting room to [{}] completed" .format (tmp )
253
318
254
319
#print sessions
255
320
@@ -280,7 +345,13 @@ def checkTast():
280
345
if (len (sys .argv )!= 2 ):
281
346
address = "127.0.0.1"
282
347
else :
283
- address = sys .argv [1 ]
348
+ address = "www.shadowwalker.cn"
349
+ #初始化聊天室列表
350
+ SocketHandler .roomContainer ["1" ]= set ()
351
+ SocketHandler .roomContainer ["2" ]= set ()
352
+ SocketHandler .roomContainer ["3" ]= set ()
353
+ SocketHandler .roomContainer ["4" ]= set ()
354
+ #####
284
355
thread .start_new_thread (checkTast ,())
285
356
app .listen (listenPort )
286
357
tornado .ioloop .IOLoop .instance ().start ()
0 commit comments