天天看点

(翻译)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:[email protected]", 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对象的作用。

继续阅读