2013-10-22 159 views
1

我正在尝试使用UCWA(Lync网络应用程序)实现双向聊天,我可以将数据发送给客户端,但是如何从客户端接收它?实施适当的双向聊天?使用UCWA聊天

我附上了发送一些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:[email protected]"); 
     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); 

      } 



      } 
    } 

回答

2

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

  • 您是否正在收听活动? (这真的很重要,因为这是如何知道第二方接受/拒绝了消息传递邀请,以及其他内容,如谁在打字和消息)。我会建议调查GettingStarted-Events并建立一个请求事件的机制。
  • 您是否在reportMyActivity上频繁发布(〜3-5分钟)POST请求以确保应用程序未被回收。如果不是,请检查Resources-reportMyActivity

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

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