从Beginning Python: From Novice to Professional, Second Edition 中的一个chatroom项目中拿出来的。那里的聊天室,只有一个单间聊天室功能,使用asyncore和asynchat实现,只能群聊。后来我给它加上了多人聊天室功能。还加上了私聊等功能。改用twisted实现并把它变成了守护模式(使用twistd)
命令列表:
/login username [roomname]
/who 查看当前登录的用户
/look 查看在当前聊天房间的用户
/to username content 私信用户
/exit 退出当前聊天房间
/logout 退出聊天服务器
代码如下:
from twisted.internet import reactor
from twisted.internet.protocol import Protocol,Factory
from twisted.internet import defer
from twisted.protocols.basic import LineReceiver
from twisted.application import internet,service
from twisted.python import log
class commaneHandler:
def handle(self,session,line):
if not line.strip():return
parts=line.split(' ',1)
cmd=parts[0].strip()
try:
if cmd[0]!='/':
cmd="/say"
line=line.strip()
else:
line=parts[1].strip()
except IndexError:
line=""
finally:
cmd=cmd[1:].strip()
meth=getattr(self,"do_"+cmd,None)
try:
meth(session,line)
except TypeError:
self.unknow(session,cmd)
def unknow(self,session,cmd):
session.write("%s:unknow command!\n"%cmd)
cla