用python写1个简单的聊天服务器7-业务处理

经过前面的协议处理。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) )



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值