前言

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

前提条件:

反编译了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。

 

这个就是关键。

 

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

posted on 2009-02-11 23:23  大城小格  阅读(3784)  评论(10编辑  收藏  举报