Tôi sử dụng API Smack để viết ứng dụng khách Google Talk của mình. Bây giờ tôi cần phải xử lý thêm yêu cầu cho việc này. Tôi đã đặt SubscriptionMode thành thủ công & bây giờ tôi phải đăng ký một người nghe cho các gói hiện diện nhưng tôi không biết làm thế nào !! có thể giúp cơ thể nào không?Cách xử lý yêu cầu thêm trong smack API
Trả lời
Tôi chưa thử, nhưng tôi đoán dưới đây sẽ hoạt động. Nếu sử dụng chế độ thủ công, một PacketListener sẽ được đăng ký để lắng nghe các gói Presence có loại Presence.Type.subscribe
.
Đầu tiên thiết lập danh sách:
Roster roster = connection.getRoster();
roster.setSubscriptionMode(Roster.SubscriptionMode.manual);
Sau đó, thêm một listner gói để kết nối ở trên, ví dụ:
connection.addPacketListener(new SubscriptionListener(), new PacketFilter(){
public boolean accept(Packet packet) {
if(packet instanceof Presence)
if(((Presence)packet).getType().equals(Presence.Type.subscribe))
return true;
return false;
}});
Đoạn mã trên chỉ trả về đúng cho tất cả các yêu cầu, Nhưng bạn có thể tùy chỉnh nó tức là đặt thành true hoặc false dựa trên đầu vào GUI của người dùng.
public static void admitFriendsRequest() {
connection.getRoster().setSubscriptionMode(
Roster.SubscriptionMode.manual);
connection.addPacketListener(new PacketListener() {
public void processPacket(Packet paramPacket) {
System.out.println("\n\n");
if (paramPacket instanceof Presence) {
Presence presence = (Presence) paramPacket;
String email = presence.getFrom();
System.out.println("chat invite status changed by user: : "
+ email + " calling listner");
System.out.println("presence: " + presence.getFrom()
+ "; type: " + presence.getType() + "; to: "
+ presence.getTo() + "; " + presence.toXML());
Roster roster = connection.getRoster();
for (RosterEntry rosterEntry : roster.getEntries()) {
System.out.println("jid: " + rosterEntry.getUser()
+ "; type: " + rosterEntry.getType()
+ "; status: " + rosterEntry.getStatus());
}
System.out.println("\n\n\n");
if (presence.getType().equals(Presence.Type.subscribe)) {
Presence newp = new Presence(Presence.Type.subscribed);
newp.setMode(Presence.Mode.available);
newp.setPriority(24);
newp.setTo(presence.getFrom());
connection.sendPacket(newp);
Presence subscription = new Presence(
Presence.Type.subscribe);
subscription.setTo(presence.getFrom());
connection.sendPacket(subscription);
} else if (presence.getType().equals(
Presence.Type.unsubscribe)) {
Presence newp = new Presence(Presence.Type.unsubscribed);
newp.setMode(Presence.Mode.available);
newp.setPriority(24);
newp.setTo(presence.getFrom());
connection.sendPacket(newp);
}
}
}
}, new PacketFilter() {
public boolean accept(Packet packet) {
if (packet instanceof Presence) {
Presence presence = (Presence) packet;
if (presence.getType().equals(Presence.Type.subscribed)
|| presence.getType().equals(
Presence.Type.subscribe)
|| presence.getType().equals(
Presence.Type.unsubscribed)
|| presence.getType().equals(
Presence.Type.unsubscribe)) {
return true;
}
}
return false;
}
});
connection.getRoster().addRosterListener(new RosterListener() {
public void presenceChanged(Presence presence) {
System.out.println(presence.getFrom() + "presenceChanged");
}
public void entriesUpdated(Collection<String> presence) {
System.out.println("entriesUpdated");
}
public void entriesDeleted(Collection<String> presence) {
System.out.println("entriesDeleted");
}
public void entriesAdded(Collection<String> presence) {
System.out.println("entriesAdded");
}
});
}
Mô tả/nhận xét hỗ trợ trong đoạn mã của bạn sẽ làm cho câu trả lời này hữu ích hơn nhiều. –
trong khi hỗ trợ nhận xét sẽ hữu ích, tôi thấy mã này rất hữu ích. Người ta có thể lập luận rằng nó được viết rất rõ ràng, nó không đòi hỏi bình luận ngay cả. –
Tôi đồng ý: người đầu tiên sẽ đọc hướng dẫn chính thức về smack (http://www.igniterealtime.org/builds/smack/docs/latest/documentation/index.html => danh sách/chủ đề hiện diện và chủ đề gói đến) và sau đó là mã ở trên trở nên rất hữu ích. – loloof64
- 1. xử lý yêu cầu json trong PHP
- 2. Xử lý yêu cầu không tìm thấy:
- 3. Python yêu cầu xử lý ngoại lệ
- 4. Cầu cảng xử lý nhiều yêu cầu như thế nào
- 5. Xử lý dữ liệu nhị phân trong API Web từ yêu cầu REST POST hoặc PUT
- 6. cách xử lý 2000+ yêu cầu/giây trên tomcat?
- 7. Cách xử lý các yêu cầu tính năng thêm phụ thuộc gói mới
- 8. Xử lý nhiều yêu cầu HTTP song song trong Node.js
- 9. Python yêu cầu các đối số/xử lý việc phân trang api
- 10. Cách xử lý các yêu cầu về chức năng vô lý trong phần mềm của bạn?
- 11. Yêu cầu xử lý trong thẻ django inclusion template
- 12. Cách xử lý phản hồi 204 trong yêu cầu thu thập Backbone.js
- 13. Tornado xử lý dữ liệu trong bộ xử lý yêu cầu sau khi trả về
- 14. Servlet xử lý nhiều yêu cầu đăng bài
- 15. Paypal API DoDirectThanh toán sản lượng Lỗi 10001: Yêu cầu xử lý hết thời gian
- 16. Yêu cầu API gộp
- 17. Xử lý nhiều yêu cầu với C# HttpListener
- 18. ASP.NET MVC 4 có yêu cầu xử lý XSS thêm không theo mặc định
- 19. asp.net xử lý webservice gzip nén yêu cầu
- 20. Yêu cầu SAS không thêm các bảng mới được tạo vào Quy trình xử lý
- 21. Nginx xử lý các yêu cầu HTTP như thế nào?
- 22. Ninject - Phạm vi yêu cầu đã được xử lý
- 23. Gói yêu cầu Python: Xử lý phản hồi xml
- 24. Lỗi mô-đun nhập khẩu yêu cầu xử lý Django
- 25. iPhone Thực hiện yêu cầu POST, xử lý cookie
- 26. IIS Express 7.5 không xử lý yêu cầu đồng thời
- 27. Yêu cầu xử lý solrconfig.xml Trình kiểm tra chính tả
- 28. CodeIgniter Rest Server xử lý yêu cầu POST của JSON
- 29. WCF - Yêu cầu xử lý từ nhiều máy khách
- 30. Thêm thông số yêu cầu để yêu cầu
Tôi đã bỏ phiếu vì tôi không thể tìm thấy lớp SubscriptionListener. – Magmatic
SubscriptionListener mới() là trình nghe ví dụ. Rõ ràng bạn sẽ cung cấp việc thực hiện trình lắng nghe của riêng bạn. –