`
xiaoheliushuiya
  • 浏览: 402579 次
文章分类
社区版块
存档分类
最新评论

Sipdroid会话邀请流程(二)

 
阅读更多
请先看Sipdroid会话邀请流程一:
http://www.shouyanwang.org/thread-50-1-1.html

这里咱们要弄明白的是,Sipdroid会话邀请的结果是在哪里进行监听的,以及这种效果是怎么实现的?

发送消息统一是由Sipdroid的sendMessage来进行发送的,然后返回的数据咱们可以在Sipdroid的OnReceiveMessage中来进行获取。

在Sipdroid注册结果的监听:
http://www.shouyanwang.org/thread-44-1-1.html这篇文章中,咱们分析了下,首先会话的类型有很多种,注册会话,邀请会话,通话会话等等,因此在OnReceiveMessage中会对当前进行的会话进行判断,根据当前的会话ID,判断出当前具体的会话类型,然后具体的会话类型通过调用自己的成员函数(会话接口对象的接口方法)将数据会话接口对象.

那么分析就简单了,倒推下:

1.邀请会话类是谁?
2.邀请会话类得会话接口是哪个,邀请会话类会在获取到返回的数据后将获得到得数据传递给会话接口的接口方法中
3.分析会话接口中的方法是怎么处理邀请回话类返回的数据的?

只要咱们这样分析,咱们就可以倒推出最终数据是怎么处理的,处理数据的核心其实还是更新UI界面和进行逻辑判断,所以最终的处理必须是距离UI界面近的类。


会话邀请类是:
  1. InviteTransactionClient invite_tc = new InviteTransactionClient(sip_provider, invite_req, this);
  2. nvite_tc.request();
复制代码
在啰唆一下,SipPorvider在获取到数据后是怎么传给会话邀请类得?
以前已经说过了,再啰唆一次,每个具体的会话类都会继承一个抽象的会话类,这个抽象的会话类继承了SipProviderListener,在SipProvider获得message后,在OnReceiverMessage中,会通过执行SipProviderListener的接口方法将数据传给是实现了此接口的类,在会话邀请类中也就会传递给具体的会话类InviteTransaction.

每一个具体类在初始化的时候,是必须有SipProvider作为参数的,然后在通过SipProvider的addSipProviderListener(id,SipProvierListner)指定会话类型和会话接口,还有SipProvider是唯一和独立的,因此一个会话中,只可能存在一种会话类型.

InviteTransactionClient在onReceiveMessage会将数据传递给transaction_listener,transaction_listener其实就是InviteDialog,InviteDialog实现了TransactionClientListener,并在InviteTransactionClinet的时候传递进去了,所以数据都是按照这样的逻辑往上传的,剩下的分析就非常简单了,大家自己分析吧。

所以最终的数据还是会回到UserAgent里面CallListenerAdapter接口方法里面。

这个方法还挺巧的,谁发送的请求最后就由谁最终来处理这个返回的结果,然后呢,SipdroidEngined就是这些核心类用来交互的一个地儿,然后咱们在启动的Actiivity里面就只管调用SipdroidEngine提供的方法来控制指令就成了,牛X的框架啊。

RegisterAgent最先发送注册请求,最后的注册结果也得RegisterAgent来处理。
UserAgent最先发出会话邀请请求,最后的邀请结果也得UserAget来处理.


掌声.........

转自http://www.shouyanwang.org/thread-51-1-2.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics