Skip to content

Commit 4e90b04

Browse files
committed
实现了多聊天室切换
1 parent c4169df commit 4e90b04

File tree

7 files changed

+309
-78
lines changed

7 files changed

+309
-78
lines changed

chatroom.db

0 Bytes
Binary file not shown.

log.txt

+64
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,67 @@ qwwqewq
151151
[2017-06-02 11:37:41] test2: sadasdsa
152152
[2017-06-02 11:37:44] test: asdasdsa
153153
[2017-06-02 11:41:21] test joined
154+
[2017-06-02 13:08:53] test joined
155+
[2017-06-02 13:10:53] test joined
156+
[2017-06-02 13:28:11] test joined
157+
[2017-06-02 13:30:17] test joined
158+
[2017-06-02 13:34:36] test joined
159+
[2017-06-02 13:35:43] test joined
160+
[2017-06-02 13:45:26] test joined
161+
[2017-06-02 13:54:50] test joined
162+
[2017-06-02 13:55:28] test2 joined
163+
[2017-06-02 13:55:42] test joined
164+
[2017-06-02 13:56:10] test: 12212
165+
[2017-06-02 13:56:14] test2: 132123213
166+
[2017-06-02 14:26:39] test joined
167+
[2017-06-02 14:26:51] test: 123
168+
[2017-06-02 14:26:59] test2 joined
169+
[2017-06-02 14:27:06] test2: 123213
170+
[2017-06-02 14:27:09] test:
171+
123123
172+
[2017-06-02 14:30:41] test joined
173+
[2017-06-02 14:30:51] test2 joined
174+
[2017-06-02 14:30:56] test2: wqe
175+
[2017-06-02 14:31:55] test joined
176+
[2017-06-02 14:32:22] test2 joined
177+
[2017-06-02 14:32:44] test2: qqq
178+
[2017-06-02 14:32:57] test: 111
179+
[2017-06-02 14:33:05] test2: 13123321
180+
[2017-06-02 14:33:32] test2: 8888
181+
[2017-06-02 14:33:41] test: 456465
182+
[2017-06-02 14:38:46] test joined
183+
[2017-06-02 14:38:55] test2 joined
184+
[2017-06-02 14:39:01] test: wwww
185+
[2017-06-02 14:39:04] test2: 12312312
186+
[2017-06-02 14:39:28] test2: 12312
187+
188+
[2017-06-02 14:39:35] test: 123123
189+
[2017-06-02 14:40:36] test: tetette
190+
191+
[2017-06-02 14:40:41] test2: qweqwewqe
192+
[2017-06-02 14:41:42] test3 joined
193+
[2017-06-02 14:43:39] test joined
194+
[2017-06-02 14:43:49] test2 joined
195+
[2017-06-02 14:46:18] test joined
196+
[2017-06-02 14:47:16] test joined
197+
[2017-06-02 14:47:40] test2 joined
198+
[2017-06-02 14:47:45] test2: 213213
199+
[2017-06-02 14:48:11] test3 joined
200+
[2017-06-02 14:48:57] test joined
201+
[2017-06-02 14:51:59] test joined
202+
[2017-06-02 14:52:21] test2 joined
203+
[2017-06-02 14:53:42] test joined
204+
[2017-06-02 14:53:52] test2 joined
205+
[2017-06-02 14:57:06] test joined
206+
[2017-06-02 14:57:14] test2 joined
207+
[2017-06-02 15:10:04] test joined
208+
[2017-06-02 15:10:36] test2 joined
209+
[2017-06-02 15:14:09] test joined
210+
[2017-06-02 15:15:08] test2 joined
211+
[2017-06-02 15:17:25] test3 joined
212+
[2017-06-02 15:18:30] test joined
213+
[2017-06-02 15:19:48] test1 joined
214+
[2017-06-02 15:20:28] test1 joined
215+
[2017-06-02 15:20:56] test2 joined
216+
[2017-06-02 15:21:05] test2: nihao
217+
[2017-06-02 15:21:31] test2: 2222

runMe.py

+106-35
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
reload(sys)
1818
sys.setdefaultencoding('utf-8')
1919

20+
2021
themeColor=['red','blue','green','black','gray','yellow']
2122
count=0
2223
listenPort=80
@@ -42,6 +43,14 @@ def SessionExsit(uid):
4243
print "[-]sessions[{}] doesnt exsit,return False exsit".format(uid)
4344
return False
4445

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+
4554
class Index(tornado.web.RequestHandler):
4655
def get(self):
4756
global listenPort
@@ -102,6 +111,7 @@ def post(self):
102111
sessions[uid]={}#创建会话变量
103112
sessions[uid]['username']=username
104113
sessions[uid]['sessioncount']=0
114+
sessions[uid]['chatroom']="mainroom"
105115
self.redirect("/")
106116
else:
107117
cur=sql.execute("select id from user where name='{}' and password='{}' and valid=0".format(username,password))
@@ -122,25 +132,30 @@ def post(self):
122132
txtEmail=self.get_argument('txtEmail')
123133
txtColege=self.get_argument('txtColege')
124134
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
125140
sql=sqlite3.connect("chatroom.db")
126141
sql.execute("insert into user (name,password,email,gender,verify,valid) values('{}','{}','{}','{}','{}','{}')".format(username,password,txtEmail,sex,md5.md5(username).hexdigest(),0))
127142
sql.commit()
128143
sql.close()
129144
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)
132147
self.redirect('/login.html')
133148

134149
def combineInfo(message_="[]",toWho_="everyone",id_=0,userName_="Annormous",status_="chat",color_="black"):
135150
strJ="{message:'"+message_+"',toWho:'"+toWho_+"',id:"+str(id_)+",userName:'"+userName_+"',status:'"+status_+"',color:'"+color_+"'}"
136151
return strJ
137152

138153
class SocketHandler(tornado.websocket.WebSocketHandler):
139-
clients = set()
154+
clients =set()
155+
roomContainer=dict()
140156
global themeColor
141157
global sessions
142158

143-
144159
@staticmethod
145160
def repeat_user_name(username):
146161
for u in SocketHandler.clients:
@@ -149,36 +164,63 @@ def repeat_user_name(username):
149164
return False
150165

151166
@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)
155174

156175
@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)
167197

168198
@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)
179220

180221
def open(self):
181222
self.my_color_name="black"
223+
self.my_chatroom="1"
182224
#self.my_user_name='Anonymous'+str(id(self))[-6:]
183225
uid=self.get_secure_cookie('uid')
184226
if(uid not in sessions):
@@ -199,21 +241,23 @@ def open(self):
199241
dataToSend=combineInfo(id_=id(self),userName_=self.my_user_name,status_='varify',color_=self.my_color_name)
200242
self.write_message(dataToSend)
201243
SocketHandler.clients.add(self)
244+
SocketHandler.roomContainer[self.my_chatroom].add(self)
202245
dataToSend=combineInfo(userName_=self.my_user_name,status_='join')
203246
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)
207249

208250
def on_close(self):
209251
uid=self.get_secure_cookie('uid')
210252
if(uid not in sessions):
211253
print "[-]ws close found no session "
212254
return
213255
SocketHandler.clients.remove(self)
256+
SocketHandler.roomContainer[self.my_chatroom].remove(self)
257+
#sessions.pop(uid,1)#newadd1
214258
dataToSend=combineInfo(userName_=self.my_user_name,status_='remove')
215259
print "[+]remove all"
216-
SocketHandler.send_to_all(dataToSend)
260+
SocketHandler.send_to_all(dataToSend,self.my_chatroom)
217261
print str(id(self)) + ' has left'
218262
logStr=getTime()+self.my_user_name+' left\n'
219263

@@ -231,7 +275,7 @@ def on_message(self, message):
231275
message['message']=tmp
232276
print "replace ",tmp
233277
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)
235279
elif(message['status']=='userNameChange'):
236280
tmpSession={'userName':message['userName'],'id':str(id(self)),'color':self.my_color_name}
237281
logStr=getTime()+self.my_user_name+' try to change nick name to '+message['userName']+'\n'
@@ -246,10 +290,31 @@ def on_message(self, message):
246290
self.write_message(dataToSend)
247291
self.my_user_name=message['userName']
248292
print "[+]updateName all"
249-
SocketHandler.update_member_to_all()
293+
SocketHandler.update_member_to_all(self.my_chatroom)
250294
elif(message['status']=='updateMember'):
251295
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)
253318

254319
#print sessions
255320

@@ -280,7 +345,13 @@ def checkTast():
280345
if(len(sys.argv)!=2):
281346
address="127.0.0.1"
282347
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+
#####
284355
thread.start_new_thread(checkTast,())
285356
app.listen(listenPort)
286357
tornado.ioloop.IOLoop.instance().start()

static/js/login.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ function focus_txtName() {
1818

1919

2020
function check_txtPwd() {
21-
if (frmLogin.txtPwd.value.length <= 6) {
21+
if (frmLogin.txtPwd.value.length < 6) {
2222
//alert("密码不能小于6位");
2323
//frmLogin.txtPwd.focus();
2424
var txtPwd=document.getElementById("txtPwd");

static/js/regstyle.js

+25-13
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,8 @@ function focuspw() {
3939
}
4040

4141
function recheckpw(){
42-
/*if(frmLogin.ctxtPwd.value==""){
43-
//alert("密码不能为空!");
44-
//frmLogin.ctxtPwd.focus();
45-
return false;
46-
} */
42+
4743
if(frmLogin.ctxtPwd.value!=frmLogin.txtPwd.value||frmLogin.ctxtPwd.value==""){
48-
//alert("两次输入密码不一致!");
49-
//frmLogin.ctxtPwd.value="";
50-
//frmLogin.txtPwd.value="";
51-
//frmLogin.txtPwd.focus();
5244
var ctxtPwd=document.getElementById("ctxtPwd");
5345
ctxtPwd.style.borderColor="red";
5446
var cpwdWarning=document.getElementById("cpwdWarning");
@@ -88,16 +80,36 @@ function checkhm(){
8880

8981
function submitForm(){
9082
if(checknm()==true&&checkpw()==true&&recheckpw()==true){
91-
if(confirm('请查收注册确认邮件!')){
92-
// this.form.action="UserReview.asp?action=delall" //设置处理程序
93-
this.form.submit(); //提交表单
83+
if(checkemail()==true){
84+
if(confirm('请查收注册确认邮件!')){
85+
// this.form.action="UserReview.asp?action=delall" //设置处理程序
86+
this.form.submit(); //提交表单
87+
}
88+
else
89+
{
90+
alert("!!!");
91+
}
9492
}
93+
else
94+
{
95+
alert("目前本聊天网站只对南京大学生开放!");
96+
}
9597
}
9698
else{
9799
alert("请完善信息");
98100
}
99101
}
100-
102+
function checkemail(){
103+
var email=document.getElementById("email");
104+
if(email.value.indexOf("@seu.edu.cn")<0&&email.value.indexOf("@nju.edu.cn")<0&&email.value.indexOf("@njust.edu.cn")<0&&email.value.indexOf("@njupt.edu.cn")<0
105+
&&email.value.indexOf("@njue.edu.cn")<0&&email.value.indexOf("[email protected]")<0)
106+
{
107+
alert("邮箱不合法");
108+
return false;
109+
}
110+
else
111+
return true;
112+
}
101113
function changeBg(){
102114
var bg_img=["../static/images/bg_01.jpg",
103115
"../static/images/bg_02.jpg",

0 commit comments

Comments
 (0)