2016-11-28 27 views
11

Openfire (xmpp) sunucusu kullanarak bir sohbet uygulaması oluşturdum. Bire bir kişi sohbetleri iyi çalışıyor ve mesajlar anında teslim ediliyor. Ancak bir gruba mesaj gönderdiğimizde ilk mesaj gecikir ve ikinci mesaj anında gönderilir.Geciken grup openfire mesajlaşma

MultiUserChatManager groupChat = 
      MultiUserChatManager.getInstanceFor(connection).getMultiUserChat("group_name"); 
groupChat.send("Message object"); 

İlk mesaj neden gecikir?

MUC Oluşturma yaratılış hakkında bir konu ve gönderme ile ilgili yayılan yan etkisi bir tür var

MultiUserChatManager mchatManager = MultiUserChatManager.getInstanceFor(xmpptcpConnection); 
     MultiUserChat mchat = mchatManager.getMultiUserChat(group); 
     if (!mchat.isJoined()) { 
     Log.d("CONNECT", "Joining room !! " + group + " and username " + username); 
     boolean createNow = false; 
     try { 
      mchat.createOrJoin(username); 
      createNow = true; 
     } catch (Exception e) { 
      Log.d("CONNECT", "Error while creating the room " + group + e.getMessage()); 
     } 

     if (createNow) { 

      Form form = mchat.getConfigurationForm(); 
      Form submitForm = form.createAnswerForm(); 

      List<FormField> formFieldList = submitForm.getFields(); 
      for (FormField formField : formFieldList) { 
      if(!FormField.Type.hidden.equals(formField.getType()) && formField.getVariable() != null) { 
       submitForm.setDefaultAnswer(formField.getVariable()); 
      } 
      } 

      submitForm.setAnswer("muc#roomconfig_persistentroom", true); 
      submitForm.setAnswer("muc#roomconfig_publicroom", true); 

      mchat.sendConfigurationForm(submitForm); 

      //mchat.sendConfigurationForm(
      // new Form(DataForm.Type.submit)); //this is to create the room immediately after join. 
     } 
     } 
     Log.d("CONNECT", "Room created!!"); 
     return true; 
    } catch (SmackException e) { 
     e.printStackTrace(); 
    } catch (XMPPException.XMPPErrorException e) { 
     e.printStackTrace(); 
    } 
+0

Belki gelen iletiyi bir veritabanında saklıyorsunuz? Evet ise, veri tabanını yaratarak gecikmeli bir mesaj oluşturmaktan daha fazla bir sorun olduğunu tahmin ediyorum. – Opiatefuchs

+0

Sadece ilk mesaj. Grubu değiştirdikten sonra ilk mesajda aynı olur. –

+0

Sadece veritabanı sorunu varsa o zaman tekrar tekrar aynı şeyler olur –

cevap

3

olduğunu.

Sadece daha önce yapmadığınız ilk defa mesaja katılmanız gerektiğine ve ilk mesajın da sunucuda Groupchat özelliğini etkinleştirdiğine inanıyorum, böylece ilk mesaj çok kullanıcılı chat oluşturmayı sonlandırmadığınız için ertelendi.

Nasıl düzeltilir?

if (!mchat.isJoined()) { 
     Log.d("CONNECT", "Joining room !! " + group + " and username " + username); 
     boolean createNow = false; 
     try { 
      mchat.createOrJoin(username); 
      createNow = true; 
     } catch (Exception e) { 
      Log.d("CONNECT", "Error while creating the room " + group + e.getMessage()); 
     } 

sadece İle:

boolean createNow 
try 
{ 
    if (!mchat.isJoined()) 
    { 
     createNow = mchat.createOrJoin(username); 
    } 
} 
catch (Exception e) 
{ 
    throw new Exception("ERROR!"); 
} 

ve bu invokation sonra: Yapım aşamasında

, bu bölüm iyileştirilmesi gerektiği

mchat.sendConfigurationForm(submitForm); 

eklenti:

if (!mchat.isJoined()) { 
    mchat.join(username); 
} 
(Adından da anlaşılacağı gibi) oluşturulması VEYA ilgili

creationOrJoin yöntem katılmak: sohbet etkinleştirmek için, size oluşturma aşamasından sonra onu katılmalısınız.

Ancak createOrJoin belki sunucuda istemci ve oturumda oturumda arasındaki syncro tutmaya çoktan katılmış odalar hakkında bir kez daha kontrol beklenmedik bir davranış vardır, bu yüzden mchat.join() sonra çağrılması gerekir. Açık bir ad aşağıdaki gibi ses çıkartabilir: mustCreateBeforeOrCanJoinDirectly()

+0

Üzgünüz arkadaşım ama çalışmıyor .. –

+0

sunucu tarafında gecikme olabilir ???? –

+0

Yepyeni bir sohbet ile deneyebilir ve deneyebilirseniz Openfire'ı yeniden başlatın. Tekrar çalışmıyorsa, farklı bir şey kontrol edebiliriz (ancak snippet'imi kullanmamı öneririm). İlk mesajla ilgili bir sorunum yok ... – MrPk