用python写1个简单的聊天服务器7-业务处理
来源:互联网 发布:unity3d的机械仿真 编辑:程序博客网 时间:2024/05/19 13:30
经过前面的协议处理。DB封装,用户封装以后。
下面进入业务处理单元。
在logic.py的Logic类中。
1:识别协议与分发
def handlePackage(self, connection , package): """ 逻辑处理部分 """ if isinstance(package, PackageRegister): self.handleUserRegister(connection , package) elif isinstance(package, PackageLogin): self.handleUserLogin(connection , package) elif isinstance(package, PackageGetNotFriendsByCodeAndDate): self.handleGetNotFriendsWithCodeAndDate( connection , package ) elif isinstance( package , PackageAddFriendRequest ): self.handleAddFriendRequest( connection, package ) elif isinstance( package , PackageAddFriendStatus ): self.handleAddFriendRequestStatus( connection , package ) elif isinstance( package , PackageGetFriends ): self.handleGetFriends( connection, package ) elif isinstance( package , PackageDeleteFriend ): self.handleDeleteFriend( connection , package ) elif isinstance( package , PackageGetFriendDetail ): self.handleGetFriendDetail( connection , package ) elif isinstance( package , PackageSendChatMessage ): self.handleSendChatMessage( connection , package )
分发需要处理的内容看脑图
举例说明登录部分:
def handleUserLogin(self, connection , package): """ 用户登录处理 """ retPackage = SendToClientPackage('login') #step 1,检查参数合法性 if self.findBadInput(package.username) or self.findBadInput(package.password): retPackage.errcode = PACKAGE_ERRCODE_INPUTWRONG else: #step 2. 查询数据库 db_user = self.dbEngine.isUserExist(package.username, package.password) if db_user: #step 1. 枚举在线好友,如果在线,退掉 online_user = self.onlineUsers.getUserExistByUsername(package.username) if online_user: #step 1.发送异地登录消息 another = SendToClientPackage('anotherlogin') another.status = 1 online_user.connection.send_message( json.dumps( another , cls= ComplexEncoder ) ) #step 2.关闭联接 online_user.connection.close() #从新加入到在线用户 user = UserObject(connection, db_user) self.onlineUsers.addNewOnlineUser(user) retPackage.status = 1 retPackage.obj = SendToClientPackageUser( user.DBUser.uid, user.DBUser.username, user.DBUser.sex, user.DBUser.description) #加载好友列表 self.getUserFriendsWithDBAndOnLineUsers( user ) #检查离线消息,是否有人希望添加我为好友 self.getAllAddFriendRequestFromDBAndSendToClient( user ) #是否有人给我发离线消息 self.getOfflineChatMessageAndSendWithUser( user ) #广播好友列表,通知本人上线 self.broadcastOnlineStatusToAllFriend( user , 1 ) #修改在线列表,本人上线 self.setUserOnlineInOnlineUsersFriends( user ) else: #用户不存在,提醒注册 retPackage.errcode = 10010 connection.send_message( json.dumps(retPackage, cls=ComplexEncoder) )
- 用python写1个简单的聊天服务器7-业务处理
- 用python写1个简单的聊天服务器4-协议设计与处理
- 用python写1个简单的聊天服务器5-DB层处理
- 用python写1个简单的聊天服务器2-项目需求与服务器框架
- 用python写1个简单的聊天服务器3-TCP服务器选择
- 用python写1个简单的聊天服务器8-version0.1收尾工作
- 用python写1个简单的聊天服务器-项目启动原因
- 用python写1个简单的聊天服务器3-目录结构
- 用python写1个简单的聊天服务器6-用户模型
- 利用boost:asio写的简单聊天服务器一
- 利用boost:asio写的简单聊天服务器二
- 利用boost:asio写的简单聊天服务器三
- 利用boost:asio写的简单聊天服务器四
- Java: 写个简单的Client,Server聊天程序
- 用c为python写个简单的模块
- 用c为python写个简单的模块
- 用Python写个简单的推荐系统(一)
- 用python搭建简单的聊天程序
- android 设置Button或者ImageButton的背景透明 半透明 透明
- python中文乱码问题深入分析
- Hadoop程序打印调试
- 如何通过日志恢复数据库
- SQL Server Management Studio Tips : How to activate saving table modifications
- 用python写1个简单的聊天服务器7-业务处理
- NLPIR(ICTCLAS2013)中文分词系统应用在Web项目中
- The type javax.servlet.http.HttpServletRequest cannot be resolved
- 分布式数据库系统---商旅预定系统的实现(11)
- ubuntu 增加硬盘大小
- [概念]图形和图像的区别
- SQLServer中监视sql执行的时间,比较sql语句的效率
- Android发送短信
- 用python写1个简单的聊天服务器6-用户模型