Thu, 26 Dec 2024 12:53:02 +0100
handle presence messages
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | package de.unixwork.im; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
4 | import java.io.IOException; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | import java.util.ArrayList; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | import java.util.List; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | import java.util.concurrent.BlockingQueue; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | import java.util.concurrent.LinkedBlockingQueue; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | import java.util.logging.Level; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | import java.util.logging.Logger; |
|
1
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
11 | import net.java.otr4j.OtrException; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
12 | import net.java.otr4j.OtrPolicy; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
13 | import net.java.otr4j.OtrPolicyImpl; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
14 | import net.java.otr4j.OtrSessionManager; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
15 | import net.java.otr4j.OtrSessionManagerImpl; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
16 | import net.java.otr4j.session.InstanceTag; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
17 | import net.java.otr4j.session.Session; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
18 | import net.java.otr4j.session.SessionID; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
19 | import net.java.otr4j.session.SessionImpl; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
20 | import net.java.otr4j.session.TLV; |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | import org.jivesoftware.smack.ConnectionConfiguration; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | import org.jivesoftware.smack.SmackException; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | import org.jivesoftware.smack.XMPPException; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | import org.jivesoftware.smack.filter.MessageWithBodiesFilter; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
25 | import org.jivesoftware.smack.packet.Message; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | import org.jivesoftware.smack.packet.MessageBuilder; |
|
2
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
27 | import org.jivesoftware.smack.packet.Presence; |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | import org.jivesoftware.smack.roster.Roster; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | import org.jivesoftware.smack.roster.RosterEntry; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | import org.jivesoftware.smack.tcp.XMPPTCPConnection; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration; |
|
2
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
32 | import org.jxmpp.jid.Jid; |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | import org.jxmpp.stringprep.XmppStringprepException; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
34 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
35 | public class Xmpp extends Thread { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
36 | private final XMPPTCPConnectionConfiguration config; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
37 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
38 | private XMPPTCPConnection connection = null; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
39 | |
|
1
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
40 | private final OTR otr; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
41 | |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
42 | private final OtrSessionManager otrSM; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
43 | |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
44 | // BlockingQueue for event-driven communication |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
45 | private final BlockingQueue<XmppEvent> eventQueue = new LinkedBlockingQueue<>(); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
47 | public Xmpp(XMPPTCPConnectionConfiguration xmppConfig) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
48 | config = xmppConfig; |
|
1
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
49 | otr = new OTR(this); |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
50 | otrSM = new OtrSessionManagerImpl(otr); |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
51 | } |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
52 | |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
53 | public OTR getOTR() { |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
54 | return otr; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
55 | } |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
56 | |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
57 | public OtrSessionManager getOtrSM() { |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
58 | return otrSM; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
59 | } |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
60 | |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
61 | public void startOTR(String xid) { |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
62 | String account = config.getUsername() + "@" + config.getHostString() + "/IM5"; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
63 | SessionID sid = new SessionID(account, xid, "xmpp"); |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
64 | |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
65 | Session session = new SessionImpl(sid, otr); |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
66 | String[] outgoingMessage; |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
67 | try { |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
68 | session.startSession(); |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
69 | } catch (OtrException ex) { |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
70 | Logger.getLogger(Xmpp.class.getName()).log(Level.SEVERE, null, ex); |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
71 | } |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
72 | |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
73 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
74 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
75 | // Method to send a message (this will be called from another thread) |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
76 | public void sendMessage(String to, String message, boolean encrypted) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
77 | try { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
78 | XmppMessage event = new XmppMessage(to, message, encrypted); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
79 | eventQueue.put(event); // Block if the queue is full |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
80 | } catch (InterruptedException e) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
81 | Logger.getLogger(Xmpp.class.getName()).log(Level.SEVERE, "Error adding event to queue", e); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
82 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
83 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
84 | |
|
1
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
85 | public void send(String to, String message) { |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
86 | sendMessage(to, message, false); |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
87 | } |
|
42d0d099492b
add incomplete otr code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
88 | |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
89 | private void connect() throws SmackException, IOException, XMPPException, InterruptedException { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
90 | connection = new XMPPTCPConnection(config); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
91 | connection.setUseStreamManagement(false); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
92 | connection.connect(); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
93 | connection.login(); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
94 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
95 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
96 | public List<RosterEntry> getRosterItems() throws SmackException.NotLoggedInException, SmackException.NotConnectedException, InterruptedException { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
97 | try { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
98 | // Ensure we are connected |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
99 | if (connection != null && connection.isConnected()) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
100 | // Get the roster instance |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
101 | Roster roster = Roster.getInstanceFor(connection); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
102 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
103 | // Fetch all roster entries (contacts) |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
104 | roster.reload(); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
105 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
106 | // Add all roster entries to the list |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
107 | ArrayList<RosterEntry> rosterList = new ArrayList<>(16); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
108 | roster.getEntries().forEach(entry -> rosterList.add(entry)); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
109 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
110 | // Optionally, print the list to verify |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
111 | System.out.println("Roster List: "); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
112 | for (RosterEntry entry : rosterList) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
113 | System.out.println("Contact: " + entry.getUser()); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
114 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
115 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
116 | return rosterList; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
117 | } else { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
118 | System.out.println("Not connected to XMPP server."); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
119 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
120 | } catch (SmackException e) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
121 | Logger.getLogger(Xmpp.class.getName()).log(Level.SEVERE, "Error getting roster items", e); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
122 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
123 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
124 | return null; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
125 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
126 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
127 | @Override |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
128 | public void run() { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
129 | try { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
130 | connect(); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
131 | connection.addAsyncStanzaListener((stanza -> { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
132 | var jid = stanza.getFrom(); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
133 | if(jid != null) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
134 | String body = ((Message)stanza).getBody(); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
135 | App.getInstance().dispatchMessage(jid, body, true); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
136 | } |
|
2
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
137 | }), MessageWithBodiesFilter.INSTANCE); |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
138 | connection.addAsyncStanzaListener(stanza -> { |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
139 | if (stanza instanceof Presence) { |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
140 | Presence presence = (Presence) stanza; |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
141 | Jid from = presence.getFrom(); |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
142 | Presence.Type type = presence.getType(); |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
143 | App.getInstance().handlePresence(from, type); |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
144 | } |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1
diff
changeset
|
145 | }, stanza -> stanza instanceof Presence); |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
146 | List<RosterEntry> roster = getRosterItems(); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
147 | if(roster != null) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
148 | App.getInstance().setContacts(roster); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
149 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
150 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
151 | while (true) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
152 | // Wait for an event (message to send) |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
153 | XmppEvent event = eventQueue.take(); // This will block until an event is available |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
154 | event.exec(this, connection); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
155 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
156 | } catch (SmackException ex) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
157 | Logger.getLogger(Xmpp.class.getName()).log(Level.SEVERE, null, ex); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
158 | } catch (IOException ex) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
159 | Logger.getLogger(Xmpp.class.getName()).log(Level.SEVERE, null, ex); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
160 | } catch (XMPPException ex) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
161 | Logger.getLogger(Xmpp.class.getName()).log(Level.SEVERE, null, ex); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
162 | } catch (InterruptedException ex) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
163 | Logger.getLogger(Xmpp.class.getName()).log(Level.SEVERE, null, ex); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
164 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
165 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
166 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
167 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
168 | class XmppMessage implements XmppEvent { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
169 | String to; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
170 | String message; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
171 | boolean encrypted; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
172 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
173 | XmppMessage(String to, String message, boolean encrypted) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
174 | this.to = to; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
175 | this.message = message; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
176 | this.encrypted = encrypted; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
177 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
178 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
179 | public void exec(Xmpp xmpp, XMPPTCPConnection conn) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
180 | final Message msg; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
181 | try { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
182 | msg = MessageBuilder.buildMessage() |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
183 | .to(to) |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
184 | .setBody(message) |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
185 | .build(); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
186 | conn.sendStanza(msg); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
187 | } catch (XmppStringprepException ex) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
188 | Logger.getLogger(XmppMessage.class.getName()).log(Level.SEVERE, null, ex); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
189 | } catch (SmackException.NotConnectedException ex) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
190 | Logger.getLogger(XmppMessage.class.getName()).log(Level.SEVERE, null, ex); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
191 | } catch (InterruptedException ex) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
192 | Logger.getLogger(XmppMessage.class.getName()).log(Level.SEVERE, null, ex); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
193 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
194 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
195 | } |