A-A+

UCMA开发-互动消息机器人的实现

2014年10月28日 技术 暂无评论 阅读 3,780 次

索引请点击这里

引用原文自:http://bbs.winos.cn/thread-73856-1-1.html

这次将的是开发OCS 互动消息机器人,通过TCP连接方式。互动机器人的重点是接受会话,所以终端需要去OCS服务器上注册过。使用的终端类为SipEndpoint。

准备参数:

  • robot的sip地址 必须是在AD中存在的OC用户。
  • OCS的FQDN

实现步骤

一些相同和上面相同的就不介绍了。

1、创建项目,添加引用。

2、创建RealTimeServerTcpConnectionManager。

3、创建SipEndpoint。

  1.  SipEndpoint sipEndpoint = new SipEndpoint(_ownerUri
  2. , SipAuthenticationProtocols.Ntlm
  3. , SipTransportType.Tcp
  4. , _ocsFQDN
  5. ,5060
  6. ,true
  7. ,rtsTcpConnectionMgr
  8. ,null);

4、注册SipEndpoint。

  1. sipEndpoint.Register();

5、SipEndpoint 添加Session接收事件。

  1. sipEndpoint.SessionReceived += sipEndpoint_SessionReceived;

6、SessionReceived 事件的处理。

  1. private void sipEndpoint_SessionReceived(object sender, SessionReceivedEventArgs e)
  2. {
  3.    Console.WriteLine("a session received...");
  4.    SignalingSession session = e.Session;
  5.    session .OfferAnswerNegotiation = _sipOfferAnswer;
  6.    Console.WriteLine("Participate session");
  7.    session .BeginParticipate(CompleteParticipate, session);
  8. }

在这一步中,主要是接收其他终端发送过来的Invite请求,然后我们在接收到Invite后需要回复一条加入Session的请求,我使用异步方式加入。

7、Session participate的callback处理。

  1. private void CompleteParticipate(IAsyncResult ar)
  2. {
  3.     SignalingSession session = ar.AsyncState as SignalingSession;
  4.     try
  5.     {
  6.         session.EndParticipate(ar);
  7.         session.MessageReceived += session_MessageReceived;
  8.     }
  9.     catch (System.Exception e)
  10.     {
  11.         Console.WriteLine(e.ToString());
  12.     }
  13. }

在callback过程中,我们为session添加了MessageReceived事件。

8、MessageReceived 事件的处理。

  1. private void session_MessageReceived(object sender, MessageReceivedEventArgs e)
  2. {
  3.     SignalingSession session = sender as SignalingSession;
  4.     if (e.MessageType== MessageType.Message)
  5.     {
  6.         Console.WriteLine(e.TextBody);
  7.         session.SendMessage(MessageType.Message
  8.             , new System.Net.Mime.ContentType("text/plain")
  9.             , Encoding.UTF8.GetBytes("message received.")
  10.         );
  11.     }
  12. }

在这里我们把收到的消息显示出来了,并回复了一条"message received"。

给我留言

Copyright © 字痕随行 保留所有权利.   Theme  Ality

用户登录

分享到: