(翻译)Conversation对象的作用

简介: 原文地址:http://blog.greenl.ee/2012/02/22/conversation-objects-for/   为了让开发者尽情的扩展Lync的功能而无需了解SIP协议的本质,UCMA引入了很多抽象类,其中最常用的就是Conversation类。

原文地址:http://blog.greenl.ee/2012/02/22/conversation-objects-for/

 

为了让开发者尽情的扩展Lync的功能而无需了解SIP协议的本质,UCMA引入了很多抽象类,其中最常用的就是Conversation类。但是对于刚接触UCMA的开发者还有写迷惑,部分原因可能是当你要发送IM或者应答语音呼叫时它的目的不是显而易见的。

下面的代码对于UCMA开发者应该很熟悉:

Conversation conversation = new Conversation(_endpoint);
AudioVideoCall avCall = new AudioVideoCall(conversation);
 
avCall.BeginEstablish("sip:user@domain.local", null, OnCallEstablished, avCall);
...

想要创建一个Call对象却不提供Conversation对象是不可能的。所以问题就来了:Conversation对象到底是干嘛的?

答案和Lync的多方式通信有关。耶?你说的“多方式通信”是几个意思啊?当你和另一个哥们正在文字热聊却感觉不够过瘾,于是增加语音聊天到当前窗口中,这就是多方式通信。这样,当Lync给最初存在的会话,比如IM或者其他,发送一个新的 SIP INVITE信息时,里面会保护一个SIP头信息(称为Ms-Conversation-ID),类似于这样:

Ms-Conversation-ID: 2f1a99b1cf19081c425f09a8700679

如果你后来又增加了不同的方式,比如在语音 聊天中增加文件传输,Lync会在SIP INVITE消息中重新使用这个ID。这样这个ID就把不同的通信方式联系在了一起。

在UCMA中Conversation对象就是这样一个可以包含多方式通信的东西。换句话说,Conversation对象管理着一个或多个具有相同会话ID的Call 对象。

刚才的那个例子里,在创建了语音视频通信后如果还想增加文字方式,可以这样:

InstantMessagingCall imCall = 
    new InstantMessagingCall(avCall.Conversation);

这会告诉UCMA你并没有新建一个独立的IM通信,相反你只是增加了IM方式。

希望我理清了Conversation对象的作用。

目录
相关文章
|
6月前
|
编译器 C++ 开发者
在C++语言中声明语言的作用类型
在C++语言中声明语言的作用类型
61 0
|
5月前
|
JavaScript 前端开发 Java
函数形状的定义方式在编程中可以有多种,具体取决于使用的编程语言和上下文。以下是几种常见的定义方式:
函数形状的定义方式在编程中可以有多种,具体取决于使用的编程语言和上下文。以下是几种常见的定义方式:
42 3
|
5月前
|
IDE Java 编译器
深入解析JAVA注解:元数据如何改变编程世界
【6月更文挑战第29天】Java注解,作为元数据机制,为代码增添上下文信息,改变编程方式。注解标记在类、方法等上,不直接影响执行,但为编译器等提供额外信息。分为元注解、编译时和运行时注解,用于元数据提供、代码简化、提高可读性及自动化。示例展示了定义`@Loggable`注解来标记日志记录方法。注解广泛应用于依赖注入、ORM、Web服务等,提升效率和灵活性,是现代Java开发的关键。未来其应用将更广泛。
82 3
|
前端开发 JavaScript
带你读《现代Javascript高级教程》三、函数上下文和this关键字(1)
带你读《现代Javascript高级教程》三、函数上下文和this关键字(1)
107 1
|
JavaScript 前端开发
带你读《现代Javascript高级教程》三、函数上下文和this关键字(2)
带你读《现代Javascript高级教程》三、函数上下文和this关键字(2)
|
6月前
|
缓存 监控 Java
Hysterix的概念、作用、使用方法
Hysterix的概念、作用、使用方法
59 0
|
6月前
|
前端开发 JavaScript
怎样使用接口引用数据
怎样使用接口引用数据
|
NoSQL Java 数据库
解释afterPropertiesSet方法的用处
解释afterPropertiesSet方法的用处
|
存储 程序员 编译器
C#编程深入研究变量,类型和方法(二)
C#编程深入研究变量,类型和方法
C#编程深入研究变量,类型和方法(二)
|
存储 安全 编译器
C#编程深入研究变量,类型和方法(一)
C#编程深入研究变量,类型和方法
C#编程深入研究变量,类型和方法(一)