织梦CMS - 轻松建站从此开始!

罗索

飞信源码深度解析——连接

落鹤生 发布于 2010-07-30 12:43 点击:次 
我只是列举了一个我目前解决不了的问题,希望大家看了我的分析能够一起解决。
TAG:

前言

我只是列举了一个我目前解决不了的问题,希望大家看了我的分析能够一起解决。

前提条件:

反编译了Fetion的官方源码,这个没什么难度,下载个Reflector就实现了项目的反编译。

废话先说说:

首先发发牢骚,飞信的核心代码写的还算可以,可是到了应用层之后就非常的烂,和实习生的水平差不多,中国移动也真是惨,不懂技术就被微软玩的团团转。举个例子,竟然在user这个级别硬生生插入了个persistencyManager,硬生生的去持久化数据。

这个完全可以用设计模式解决的,却自己和自己绕来绕去。愚蠢!

还有在user.status里面的set,反编译后可以看到一堆的代码,一个赋值操作又被捆绑了一堆逻辑,不知道是fetion小组哪个白痴的杰作。搞到我debug的时候绕了半天才发现这里操作了sqllite。

正文:

连接核心在imps.CLient.CommLayer.ConnectionManagerImp里面。就是CreateSipConnection。

他核心使用了3个连接去尝试,包括:TcpSipConnection / HttpSipConenction / HTSipConnection

当设置了UsrDirect的连接方式,就启动TcpSipConnection

其余的都是默认必须执行

 

官方的飞信实际上使用了HttpSipConnection,可惜我调试了半天发现这个连接没有被启动,估计哪里出现了exception,微软的狗屎代码又没有去catch,然后直接停止了这个连接的启动。

 

网上很多人说官方的代码一段时间会掉线,就是因为没有启动HttpSipConnection,他里面有个5秒钟的轮训发送SIPP,保持连接(用HttpAnalyzer就可以看到)

 

大概过程:

1.登录的时候,loginFramework调用了DoLogin方法,初始化了一堆LoginAction

2.其中有个是sipcTunnelAction 是个关键,就是实际连接远程的服务器

3.当sipcTunnelAction.Execute(),就会调用ConnectionFactory去创建SipConnectionImp,同时就初始化了HTSipConnection / HttpSipCOnnection。并且开始连接。

4.首先是启动HTSipConnection

 

现在的问题就是官方的程序能够启动HTtpSipConnection,但是我反射后的代码不能。

我作了如下测试:

如果我把官方所有的配置文件删除了去启动,第一次也是没有启动HttpSipCOnnection,但是会自动修复配置文件,第二次启动的时候就能够回复httpsipconnection。

 

这个就是关键。

 

希望有兴趣的朋友帮忙继续研究下去!

(citibox)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201007/9902.html]
本文出处:cnblogs.com/citibox 作者:citibox
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容