使用UCWA聊天

时间:2013-10-22 08:02:55

标签: c# asp.net lync ucwa

我正在尝试使用UCWA(Lync Web应用程序)实现双向聊天,我能够将数据发送到客户端,但我如何从该客户端接收回来?实施正确的双向聊天?

我已附加代码以向特定用户发送一些ping,如何从用户接收数据以实现聊天?

       private void StarConversation(string startConversationLink, string hostName, string accessToken, string tokenType)
    {
        var myObject = new JObject();
        myObject.Add("operationId", Guid.NewGuid().ToString().Replace("-", ""));
        myObject.Add("to", "sip:xyz@abcd.com");
        myObject.Add("subject", "TestConv");
        List<string> outgoing = new List<string>();
        List<string> incoming = new List<string>();
        List<string> timeout = new List<string>();
        JObject href = new JObject();
        string sending = "Hey there ! how are you doing ?";
        href.Add("href", "data:text/plain;base64," + Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(sending)));
        JObject message = new JObject();
        message.Add("message", href);
        myObject.Add("_links", message);
       HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", tokenType + " " + accessToken);
        client.PostAsync(new Uri(hostName + startConversationLink), new StringContent(JsonConvert.SerializeObject(myObject), Encoding.UTF8, "application/json")).Result;
        if (response.IsSuccessStatusCode)
        {

            Uri temp = new Uri(hostName + m_eventsLink);
            HttpResponseMessage response2 = Get(client, temp.ToString());
            string nextLink = string.Empty;
            string timeo ;
            string ss = string.Empty;
             int i =0;
            if (response2.IsSuccessStatusCode)
            {
                string retData2 = response2.Content.ReadAsStringAsync().Result;
                var o = JObject.Parse(retData2);
                nextLink = o["_links"]["next"]["href"].Value<string>();

                response = client.PostAsync(new Uri(hostName + startConversationLink), new StringContent(JsonConvert.SerializeObject(myObject), Encoding.UTF8, "application/json")).Result;
                temp = new Uri(hostName + m_eventsLink);
                response2 = Get(client, temp.ToString());
                retData2 = response2.Content.ReadAsStringAsync().Result;
                o = JObject.Parse(retData2);

            }



             }
    }

1 个答案:

答案 0 :(得分:2)

此时您正在做的是与用户开始对话并提供与messagingInvitation一起使用的初始消息。我从这段代码片段中不知道的是:

  • 你在听事件吗? (这非常重要,因为这就是你如何知道第二方接受/拒绝了messageInvitation以及其他内容,比如谁在打字和消息)。我建议调查GettingStarted-Events并建立一个请求事件的机制。
  • 您是否在reportMyActivity上频繁(~3-5分钟)发出POST请求,以确保应用程序不被回收。如果没有,请查看Resources-reportMyActivity

如果代码正在侦听事件和报告活动。下一步是收听messagingInvitation并检查conversation / messaging个事件。会话将从连接(状态)(正在处理messageInvitation)转换为已连接(已接受messagingInvitation)或已断开连接(messagingInvitation已拒绝,会话已结束,其他错误)。假设其他用户接受下一个要检查的事件是Connected的消息传递状态(这意味着消息传递模式在对话中处于活动状态,并且有用的方法如sendMessageaddParticipantsetIsTyping将是可用)或已断开连接(这意味着消息模式未激活,addMessaging可用于启用此模式。

如果您能够达到此点,则当任何参与者向对话发送消息时,将显示message个事件。 direction属性可用于确定当前UCWA用户何时发送消息(传出),对于所有其他用户,应该有可以识别用户的参与者属性。