aboutsummaryrefslogtreecommitdiff
path: root/juick-xmpp/src/main/java/com/juick/components/XMPPServer.java
diff options
context:
space:
mode:
Diffstat (limited to 'juick-xmpp/src/main/java/com/juick/components/XMPPServer.java')
-rw-r--r--juick-xmpp/src/main/java/com/juick/components/XMPPServer.java226
1 files changed, 6 insertions, 220 deletions
diff --git a/juick-xmpp/src/main/java/com/juick/components/XMPPServer.java b/juick-xmpp/src/main/java/com/juick/components/XMPPServer.java
index 2c962a51..463d8c2a 100644
--- a/juick-xmpp/src/main/java/com/juick/components/XMPPServer.java
+++ b/juick-xmpp/src/main/java/com/juick/components/XMPPServer.java
@@ -1,24 +1,16 @@
package com.juick.components;
-import com.juick.User;
-import com.juick.server.MessagesQueries;
-import com.juick.server.SubscriptionsQueries;
-import com.juick.server.UserQueries;
import com.juick.components.s2s.*;
import com.juick.xmpp.*;
import com.juick.xmpp.extensions.JuickMessage;
-import com.juick.xmpp.extensions.Nickname;
-import com.juick.xmpp.extensions.XOOB;
import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.stereotype.Component;
import org.xmlpull.v1.XmlPullParserException;
-import javax.inject.Inject;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
@@ -34,14 +26,13 @@ import java.util.concurrent.ExecutorService;
*
* @author ugnich
*/
-public class XMPPServer implements DisposableBean, Stream.StreamListener,
- Message.MessageListener, Iq.IqListener, Presence.PresenceListener {
+public class XMPPServer implements DisposableBean {
private static final Logger logger = LoggerFactory.getLogger(XMPPServer.class);
public ExecutorService service;
- private StreamComponent router;
- JuickBot bot;
+ private ConnectionRouter router;
+ public JuickBot bot;
public String HOSTNAME, componentName;
public String keystore;
@@ -72,19 +63,8 @@ public class XMPPServer implements DisposableBean, Stream.StreamListener,
childParsers.put(JuickMessage.XMLNS, new JuickMessage());
- service.submit(() -> {
- try {
- Socket routerSocket = new Socket("localhost", componentPort);
- router = new StreamComponent(new JID(componentName), routerSocket.getInputStream(), routerSocket.getOutputStream(), env.getProperty("xmpp_password"));
- router.addChildParser(new JuickMessage());
- router.addListener((Stream.StreamListener) this);
- router.addListener((Message.MessageListener) this);
- router.addListener((Iq.IqListener) this);
- router.startParsing();
- } catch (IOException e) {
- logger.error("router error", e);
- }
- });
+ router = new ConnectionRouter(this, componentName, componentPort, env.getProperty("xmpp_password"));
+ service.submit(router);
service.submit(() -> {
final ServerSocket listener = new ServerSocket(s2sPort);
logger.info("s2s listener ready");
@@ -222,7 +202,6 @@ public class XMPPServer implements DisposableBean, Stream.StreamListener,
}
}
-
@Override
public void destroy() {
synchronized (getOutConnections()) {
@@ -240,204 +219,11 @@ public class XMPPServer implements DisposableBean, Stream.StreamListener,
i.remove();
}
}
-
- try {
- closeRouterConnection();
- } catch (IOException e) {
- logger.error("router warning", e);
- }
service.shutdown();
logger.info("component destroyed");
}
- public void closeRouterConnection() throws IOException {
- getRouter().logoff();
- }
-
- public void sendJuickMessage(JuickMessage jmsg) {
- List<String> jids = new ArrayList<>();
-
- if (jmsg.FriendsOnly) {
- jids = SubscriptionsQueries.getJIDSubscribedToUser(jdbc, jmsg.getUser().getUID(), jmsg.FriendsOnly);
- } else {
- List<User> users = SubscriptionsQueries.getSubscribedUsers(jdbc, jmsg.getUser().getUID(), jmsg.getMID());
- for (User user : users) {
- for (String jid : UserQueries.getJIDsbyUID(jdbc, user.getUID())) {
- jids.add(jid);
- }
- }
- }
-
- String txt = "@" + jmsg.getUser().getUName() + ":" + jmsg.getTagsString() + "\n";
- String attachment = jmsg.getAttachmentURL();
- if (attachment != null) {
- txt += attachment + "\n";
- }
- txt += jmsg.getText() + "\n\n";
- txt += "#" + jmsg.getMID() + " http://juick.com/" + jmsg.getMID();
-
- Nickname nick = new Nickname();
- nick.Nickname = "@" + jmsg.getUser().getUName();
-
- com.juick.xmpp.Message msg = new com.juick.xmpp.Message();
- msg.from = bot.JuickJID;
- msg.body = txt;
- msg.type = Message.Type.chat;
- msg.thread = "juick-" + jmsg.getMID();
- msg.addChild(jmsg);
- msg.addChild(nick);
- if (attachment != null) {
- XOOB oob = new XOOB();
- oob.URL = attachment;
- msg.addChild(oob);
- }
-
- for (String jid : jids) {
- msg.to = new JID(jid);
- sendOut(msg);
- }
- }
-
- public void sendJuickComment(JuickMessage jmsg) {
- List<User> users;
- String replyQuote;
- String replyTo;
-
- users = SubscriptionsQueries.getUsersSubscribedToComments(jdbc, jmsg.getMID(), jmsg.getUser().getUID());
- com.juick.Message replyMessage = jmsg.ReplyTo > 0 ? MessagesQueries.getReply(jdbc, jmsg.getMID(), jmsg.ReplyTo)
- : MessagesQueries.getMessage(jdbc, jmsg.getMID());
- replyTo = replyMessage.getUser().getUName();
- replyQuote = getReplyQuote(replyMessage);
-
- String txt = "Reply by @" + jmsg.getUser().getUName() + ":\n" + replyQuote + "\n@" + replyTo + " ";
- String attachment = jmsg.getAttachmentURL();
- if (attachment != null) {
- txt += attachment + "\n";
- }
- txt += jmsg.getText() + "\n\n" + "#" + jmsg.getMID() + "/" + jmsg.getRID() + " http://juick.com/" + jmsg.getMID() + "#" + jmsg.getRID();
-
- com.juick.xmpp.Message msg = new com.juick.xmpp.Message();
- msg.from = bot.JuickJID;
- msg.body = txt;
- msg.type = Message.Type.chat;
- msg.addChild(jmsg);
- for (User user : users) {
- for (String jid : UserQueries.getJIDsbyUID(jdbc, user.getUID())) {
- msg.to = new JID(jid);
- sendOut(msg);
- }
- }
- }
-
- private String getReplyQuote(com.juick.Message q) {
- String quote = q.getText();
- if (quote.length() > 50) {
- quote = ">" + quote.substring(0, 47).replace('\n', ' ') + "...\n";
- } else if (quote.length() > 0) {
- quote = ">" + quote.replace('\n', ' ') + "\n";
- }
- return quote;
- }
-
- public void sendJuickRecommendation(JuickMessage recomm) {
- List<User> users;
- JuickMessage jmsg;
- jmsg = new JuickMessage(MessagesQueries.getMessage(jdbc, recomm.getMID()));
- users = SubscriptionsQueries.getUsersSubscribedToUserRecommendations(jdbc,
- recomm.getUser().getUID(), recomm.getMID(), jmsg.getUser().getUID());
-
- String txt = "Recommended by @" + recomm.getUser().getUName() + ":\n";
- txt += "@" + jmsg.getUser().getUName() + ":" + jmsg.getTagsString() + "\n";
- String attachment = jmsg.getAttachmentURL();
- if (attachment != null) {
- txt += attachment + "\n";
- }
- txt += jmsg.getText() + "\n\n";
- txt += "#" + jmsg.getMID();
- if (jmsg.Replies > 0) {
- if (jmsg.Replies % 10 == 1 && jmsg.Replies % 100 != 11) {
- txt += " (" + jmsg.Replies + " reply)";
- } else {
- txt += " (" + jmsg.Replies + " replies)";
- }
- }
- txt += " http://juick.com/" + jmsg.getMID();
-
- Nickname nick = new Nickname();
- nick.Nickname = "@" + jmsg.getUser().getUName();
-
- com.juick.xmpp.Message msg = new com.juick.xmpp.Message();
- msg.from = bot.JuickJID;
- msg.body = txt;
- msg.type = Message.Type.chat;
- msg.thread = "juick-" + jmsg.getMID();
- msg.addChild(jmsg);
- msg.addChild(nick);
- if (attachment != null) {
- XOOB oob = new XOOB();
- oob.URL = attachment;
- msg.addChild(oob);
- }
-
- for (User user : users) {
- for (String jid : UserQueries.getJIDsbyUID(jdbc, user.getUID())) {
- msg.to = new JID(jid);
- sendOut(msg);
- }
- }
- }
-
- @Override
- public boolean onIq(Iq iq) {
- JID jid = iq.to;
- if (!jid.Host.equals(componentName)) {
- logger.info("STREAM ROUTER (IQ): " + iq.toString());
- sendOut(iq);
- }
- return false;
- }
-
- @Override
- public void onMessage(Message xmsg) {
- logger.info("STREAM ROUTER (PROCESS): " + xmsg.toString());
- JuickMessage jmsg = (JuickMessage) xmsg.getChild(JuickMessage.XMLNS);
- JID jid = xmsg.to;
- if (jid.Host.equals(componentName)) {
- if (jmsg != null) {
- if (jid.Username != null && jid.Username.equals("recomm")) {
- sendJuickRecommendation(jmsg);
- } else {
- if (jmsg.getRID() > 0) {
- sendJuickComment(jmsg);
- } else if (jmsg.getMID() > 0) {
- sendJuickMessage(jmsg);
- }
- }
- }
- } else {
- sendOut(xmsg);
- }
- }
-
- @Override
- public void onPresence(Presence presence) {
- JID jid = presence.to;
- if (!jid.Host.equals(componentName)) {
- logger.info("STREAM ROUTER (PRESENCE): " + presence.toString());
- sendOut(presence);
- }
- }
-
- @Override
- public void onStreamReady() {
- logger.info("STREAM ROUTER (READY)");
- }
-
- @Override
- public void onStreamFail(Exception ex) {
- logger.error("STREAM ROUTER (FAIL)", ex);
- }
- public StreamComponent getRouter() {
+ public ConnectionRouter getRouter() {
return router;
}