2012-02-15 25 views
5

Tôi là người dùng mới trên stack, nhưng tôi gặp sự cố với MultiUserChat trong thư viện aSmack 3.2.1 dành cho Android. Tôi đang sử dụng máy chủ "gtalk.google.com". Đó là một ví dụ đơn giản và I'am chỉ có một trong phòng:XMPP aSmack Máy chủ MultiUserChat tiếp tục gửi các tin nhắn đã nhận

String room="[email protected]"; 
MultiUserChat muc = new MultiUserChat(connection,room); 
muc.join(userNameInRoom); 

muc.addMessageListener(new PacketListener() 
{ 
    @Override 
    public void processPacket(Packet packet) 
    { 
     ... 
    } 
}); 

Sau:

muc.sendMessage("Text message"); 

Trong Log:

DEBUG/SMACK(281): 06:46:29 PM SENT (1140866576): <message id="gsMe7-18" 
to="[email protected]" type="groupchat"><body>Text message 
</body></message> 

DEBUG/SMACK(281): 06:46:29 PM RCV (1140866576): <message 
from="[email protected]/userNameInRoom" to="userName" 
type="groupchat"><body>Text message</body></message> 

Kết quả: "Tin nhắn văn bản" và nó là đúng, nhưng sau đó:

Tôi lại nhận được "Tin nhắn văn bản" với sự hiện diện:

DEBUG/SMACK(281): 06:54:12 PM RCV (1140866576): <presence 
from="[email protected]/userNameInRoom" to="userName"><x xmlns= 
"vcard-temp:x:update"><photo/></x><x xmlns="http://jabber.org/protocol/muc#user"> 
<item affiliation="owner" role="moderator"/><status code="110"/></x></presence> 

DEBUG/SMACK(281): 06:54:12 PM RCV (1140866576): <message 
from="[email protected]/userNameInRoom" to="userName" 
type="groupchat"><body>Text message</body><delay stamp="2012-02-15T17:46:31Z" 
from="[email protected]" xmlns="urn:xmpp:delay"/><x 
stamp="20120215T17:46:31" from="[email protected]" 
xmlns="jabber:x:delay"/></message> 

Và tôi đã nhận được thông tin đó bất cứ khi nào máy chủ gửi các sự hiện diện cho tôi. Nó tiếp tục vô cùng với khoảng thời gian ~ 5 phút. Và Có trong 30 phút tôi đã nhận được ~ 6 tin nhắn "Tin nhắn văn bản". Nếu tôi gửi nhiều hơn 1 tin nhắn, tất cả các tin nhắn này sẽ được nhận mà không có ngoại lệ khi sự hiện diện gửi cho tôi.

Sự cố với MultiUserChat của tôi và sự cố giao hàng đang làm gì ở đây?

Cảm ơn sự quan tâm!

+0

Thú vị, tất cả tôi có thể thêm là [tình trạng mã 101] (http://xmpp.org/registrar/mucstatus.html) có nghĩa là "thay đổi liên kết cho kết hợp MUC/người dùng" – Flow

+0

Luồng, cảm ơn bạn đã nhận xét. Nhưng có mã trạng thái 110 không 101. Mã trạng thái 110 có nghĩa là sự hiện diện gửi và nó là đúng. – nizhney

+1

IIRC, đây là một số hành vi kỳ lạ trong google talk, nơi họ phát lại sự hiện diện của bạn trong khoảng thời gian, gây ra sự kỳ quặc với căn phòng. – Zash

Trả lời

3

Trong trường hợp "@ conference.jabber.org" Tôi không tìm thấy giải pháp và tôi đã quyết định vấn đề đó vì máy chủ GTalk và phiên bản chính xác của MultiUserChat là trong trường hợp "@ groupchat.google.com".

tôi đã thay đổi mã của tôi từ:

room=roomName+"@conference.jabber.org"; 
MultiUserChat muc = new MultiUserChat(connection, room); 

muc.create(userName); 

muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT)); 

tới:

room="private-chat-" + UUID.randomUUID().toString() + "@groupchat.google.com"; 
MultiUserChat muc = new MultiUserChat(connection, room); 

muc.join(userName); 

muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT)); 

Và tôi đã cố gắng đó, nhưng tôi có vấn đề- mới Khi người dùng • Nhận mời nhắn và chấp nhận nó cả khách hàng sụp đổ với XmlPullException "END_TAG mong đợi" và một cái gì đó như "</stream: stream>" ở vị trí cuối cùng trong logcat.

Tôi bắt đầu google vấn đề này và tìm thấy lý do. Tôi sử dụng asmack từ khách hàng beem (bằng cách này, trước khi tôi sử dụng asmack-7 từ nhà phát triển asmack) và làm thế nào tôi biết nó được dựa trên smack 3.1 ... Tôi thấy rằng smack 3.2.0 quyết định vấn đề này. Tôi đã tải xuống số Flow's version của asmack và tôi hài lòng với điều này.

Kết luận tôi muốn nói "Cảm ơn bạn !!!" để Flow cho phiên bản chính xác của aSmack, hoạt động tốt hơn các phiên bản khác.

+0

Vui vì tôi có thể giúp. Đừng quên để upvote [câu trả lời gốc] (http://stackoverflow.com/a/5487854/194894) mà tôi cố gắng để giữ cho đến ngày. – Flow

1

Đó không phải là vì khách hàng của bạn, và thats Không phải là lỗi, Thats Bởi vì của máy chủ của bạn trò chuyện nhóm của Lịch sử Cài đặt cấu hình để gửi đặc biệt Số Lịch sử trò chuyện khi vào phòng

+0

bạn có thể vui lòng cung cấp thêm chi tiết về cách giải quyết sự cố – Moes

+0

bạn đang sử dụng Máy chủ OpenFire không? – dasdas

Các vấn đề liên quan