2014-04-04 4 views
1

현재 Android 용 XMPP 클라이언트를 사용하기 위해 aSmack 라이브러리를 사용하고 있습니다. 내가 궁금하네요두 명의 사용자간에 XMPP 채팅 스레드를 동기화하는 방법은 무엇입니까?

한 가지는 두 명의 사용자가 각각 다른 사람과 채팅을 만들 경우 무슨 일입니까?

connection.getChatManager().createChat("[email protected]", new MessageListener() { 
      @Override 
      public void processMessage(Chat arg0, Message arg1) { 
           //..... 
      } 
     }); 

을 그리고 두 번째 클라이언트가 수행합니다 : 예를 들어 첫 번째 클라이언트 할 것

connection.getChatManager().createChat("[email protected]", new MessageListener() { 
      @Override 
      public void processMessage(Chat arg0, Message arg1) { 
           //..... 
      } 
     }); 

두 채팅 서버 인스턴스 등 메시지 청취자가 선택하지 않습니다이있을 것입니다 그들은 다른 채팅에서 올 것인가?

또는 서버가 자동으로 하나에 채팅 스레드를 동기화합니다, 그래서 메시지 리스너가 제대로 작동하고, 수신 메시지를 가로 챌 수 있습니까?

는 첫 번째 시나리오는, 하나에 채팅을 병합 할 수 있도록이 문제가 해결됩니다 가능한 어떤 솔루션을 다음 있다면?

편집 : 난 그냥 간단한 예에 그것을 시도했습니다 그리고 내가 확실 해요하지만 내가 잘못 뭔가를했기 때문에 그것의 경우는, 첫 번째 경우 것 같다.

답변

1

XMPP 서버는 당신이 당신의 예에서 만든 두 개의 채팅 스레드를 인식하고 동기화하는 것이 없을 수 없습니다. 이는 의도적으로 설계된 동작입니다. XMPP 채팅은 동일한 스레드 ID를 가진 메시지 스탠자 세트입니다.

나는 RFC 6121 5.2.1을 읽는 것이 좋습니다.

+0

추천 도서를 읽어 주셔서 감사합니다. 그것은 우리의 많은 것들을 정리하는 데 도움이되었습니다. 그러나 나는 여전히 문제에 대한 적절한 해결책을 찾을 수 없다. 글쎄, 나는 해결책을 가지고 있지만, 그것이 옳은 일인지보고 싶었다. 본질적으로, 사용자가 앱을 repoens 때, 그가 먼저 메시지를 보내는 경우 (새로운 채팅 생성 포함), 나는 다른 클라이언트의 채팅 인스턴스를 chat listener에서 얻은 것으로 대체합니다. 메시지를 먼저받는다면 새로 생성 된 채팅을 다른 사용자의 클라이언트가 계속 참고하는 메시지로 대체합니다. 그것이 적절한 해결책이 될 것인가? – Pat

+0

다른 해결 방법은 ID를 사용하여 채팅을 참조하는 것이지만 얼마나 신뢰할 수 있고 고유 한 것인지 확실하지 않습니다. – Pat

+0

어떻게 문제를 해결 했습니까? – user2924714

관련 문제