diff options
Diffstat (limited to 'juick-ws/src/main')
-rw-r--r-- | juick-ws/src/main/java/com/juick/ws/XMPPConnection.java | 54 |
1 files changed, 29 insertions, 25 deletions
diff --git a/juick-ws/src/main/java/com/juick/ws/XMPPConnection.java b/juick-ws/src/main/java/com/juick/ws/XMPPConnection.java index 30dad3f3c..2019ec0a7 100644 --- a/juick-ws/src/main/java/com/juick/ws/XMPPConnection.java +++ b/juick-ws/src/main/java/com/juick/ws/XMPPConnection.java @@ -1,7 +1,9 @@ package com.juick.ws; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.juick.User; -import com.juick.json.MessageSerializer; import com.juick.server.MessagesQueries; import com.juick.server.SubscriptionsQueries; import org.apache.commons.lang3.math.NumberUtils; @@ -31,7 +33,7 @@ public class XMPPConnection implements AutoCloseable { private final JdbcTemplate jdbc; private final WebsocketComponent wsHandler; private final String xmppPassword; - private final MessageSerializer ms; + private final ObjectMapper ms; private final int xmppPort; private final String wsJid; @@ -51,29 +53,33 @@ public class XMPPConnection implements AutoCloseable { xmppPort = NumberUtils.toInt(env.getProperty("xmpp_port"), 5347); wsJid = env.getProperty("ws_jid", "ws.juick.local"); - ms = new MessageSerializer(); + ms = new XmlMapper(); XmppSessionConfiguration configuration = XmppSessionConfiguration.builder() .extensions(Extension.of(com.juick.Message.class)) .build(); xmpp = ExternalComponent.create(wsJid, xmppPassword, configuration, "localhost", xmppPort); xmpp.addInboundMessageListener(e -> { - Message msg = e.getMessage(); - com.juick.Message jmsg = msg.getExtension(com.juick.Message.class); - if (jmsg != null) { - logger.info("got msg: " + ms.serialize(jmsg).toString()); - if (jmsg.getMid() == 0) { - int uid_to = NumberUtils.toInt(msg.getTo().getLocal(), 0); - if (uid_to > 0) { - onJuickPM(uid_to, jmsg); + try { + Message msg = e.getMessage(); + com.juick.Message jmsg = msg.getExtension(com.juick.Message.class); + if (jmsg != null) { + logger.info("got msg: " + ms.writeValueAsString(jmsg)); + if (jmsg.getMid() == 0) { + int uid_to = NumberUtils.toInt(msg.getTo().getLocal(), 0); + if (uid_to > 0) { + onJuickPM(uid_to, jmsg); + } + } else if (jmsg.getRid() == 0) { + onJuickMessagePost(jmsg); + } else { + // to get quote + com.juick.Message reply = MessagesQueries.getReply(jdbc, jmsg.getMid(), jmsg.getRid()); + onJuickMessageReply(reply); } - } else if (jmsg.getRid() == 0) { - onJuickMessagePost(jmsg); - } else { - // to get quote - com.juick.Message reply = MessagesQueries.getReply(jdbc, jmsg.getMid(), jmsg.getRid()); - onJuickMessageReply(reply); } + } catch (JsonProcessingException ex) { + logger.error("mapper exception", ex); } }); try { @@ -91,10 +97,8 @@ public class XMPPConnection implements AutoCloseable { logger.info("XmppSession on WS destroyed"); } - MessageSerializer messageSerializer = new MessageSerializer(); - - private void onJuickPM(final int uid_to, final com.juick.Message jmsg) { - String json = messageSerializer.serialize(jmsg).toString(); + private void onJuickPM(final int uid_to, final com.juick.Message jmsg) throws JsonProcessingException { + String json = ms.writeValueAsString(jmsg); synchronized (wsHandler.getClients()) { wsHandler.getClients().stream().filter(c -> !c.legacy && c.visitor.getUid() == uid_to).forEach(c -> { try { @@ -107,8 +111,8 @@ public class XMPPConnection implements AutoCloseable { } } - private void onJuickMessagePost(final com.juick.Message jmsg) { - String json = messageSerializer.serialize(jmsg).toString(); + private void onJuickMessagePost(final com.juick.Message jmsg) throws JsonProcessingException { + String json = ms.writeValueAsString(jmsg); List<Integer> uids = SubscriptionsQueries.getSubscribedUsers(jdbc, jmsg.getUser().getUid(), jmsg.getMid()) .stream().map(User::getUid).collect(Collectors.toList()); synchronized (wsHandler.getClients()) { @@ -136,8 +140,8 @@ public class XMPPConnection implements AutoCloseable { } } - private void onJuickMessageReply(final com.juick.Message jmsg) { - String json = messageSerializer.serialize(jmsg).toString(); + private void onJuickMessageReply(final com.juick.Message jmsg) throws JsonProcessingException { + String json = ms.writeValueAsString(jmsg); List<Integer> threadUsers = SubscriptionsQueries.getUsersSubscribedToComments(jdbc, jmsg.getMid(), jmsg.getUser().getUid()) .stream().map(User::getUid).collect(Collectors.toList()); |