起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5092|回复: 1

[分享] 铛铛登陆流程分析

  [复制链接]

27

主题

94

帖子

210

积分

中级会员

Rank: 3Rank: 3

积分
210
QQ
发表于 2016-8-31 11:21:43 | 显示全部楼层 |阅读模式
本帖最后由 peterwch 于 2016-9-8 10:56 编辑

花了点时间理了下铛铛登陆的流程,稍作记录,有点乱
IM.autoLogin方法采用needLogin函数判断是否需要登陆。判断方法是读取localstorage的chat_loginData
  • 如果没读取到数据,显示登陆框:justep.Shell.fireEvent('onShowLoginDialog', {});
  • 否则,采用该localstorage中的用户名密码数据进行登陆:
this.login(loadLoginDataByStore()).fail(function(error) {
        self.logout();
});
其中login方法依次调用:
  • im.wex5.impl中的doLogin方法,与逻辑服务器交互,返回登陆信息。(此处还没有登录dangchat-server)
  • 调用saveLoginDataToStore 存储登陆的账户密码信息,可以自行查看localstorage
  • 调用doLoginAfter,派发以下onLoggedIn事件
  • index.js 中的loggedIn事件
  • contact.js中的init
  • main.js中的init事件
    • 读取localstorage  chat_dialogData 对话数据
    • 读取localstorage chat_uid 数据,和当前Uid进行比较:
              如果相等, 那么用户没有改变, 那么直接加载此对话数据到dialogData 数据组件;
              如果不等,那么更新localstorage  chat_uid  为当前用户Uid . 此Id为用户Id不是actor返回的Id。
     4.登录dangchat-server : loginActor重点!!!!

------------------------------------------------------------
loginActor详解
1.根据id判断当前用户是否登陆 : ActorClient.isLoggedIn(pid),原理是比较服务端user.nick和pid是否相等(为什么是nick?)
如果用户已登陆,那么调用loadPersongetOrgPersons方法加载组织人员数据。

如果用户未登陆:
1.actor中client.validPerson方法,personId, name为参数,传递至dangserver进行验证,返回登陆状态:state。
如果状态为logged_in 那么说明dangchat-server登陆成功,得到一个新的client 用户的uid
此处除了加载人员信息外,还额外进行了一步操作,那就是self.updatePersonUid(uid, pid) ,通过ajax更新了用户的uid,
String sql = "update sa_opperson set sNumb=" + uid + " where sID= '"+pid+"'" ; 即更新了sa_opperson 表的sNumb字段。
同时也更新本地的person的uid.

acrtor登陆完成后:
       1.派发actor已登录事件:   actorLongined
       2.触发inintEvent事件,主要是消息推送相关的设置,以及加载会话数据。
       3.updateClientState 论坛大神解答说是判断当前app是否是后台模式,用来控制推送信息。

                this.loginActorDfd.done(function() {
                        justep.Shell.fireEvent('actorLongined');  
                        self.initEvent();
                        var uid = IM.getCurrentPerson().uid;
                        $(document).on('resume', function() {
                                IM.updateClientState("-1,"+uid+",1");
                        });
                        $(document).on('pause', function() {
                                IM.updateClientState("-1,"+uid+",0");
                        });

                });





15

主题

118

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2019-6-11 15:25:34 | 显示全部楼层
学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2019-8-18 07:22 , Processed in 0.111467 second(s), 25 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表