mirror of
https://github.com/TotalFreedomMC/TF-EssentialsX.git
synced 2025-04-25 07:59:44 +00:00
Fixes for XMPP: Prevent loops on errors
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1577 e251c2fe-e539-e718-e476-b85c1f46cddb
This commit is contained in:
parent
991a5cb24c
commit
5a47d18a9b
1 changed files with 23 additions and 24 deletions
|
@ -40,7 +40,7 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
||||||
private transient List<String> logUsers;
|
private transient List<String> logUsers;
|
||||||
private transient Level logLevel;
|
private transient Level logLevel;
|
||||||
private transient boolean ignoreLagMessages = true;
|
private transient boolean ignoreLagMessages = true;
|
||||||
|
|
||||||
public XMPPManager(final JavaPlugin parent)
|
public XMPPManager(final JavaPlugin parent)
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
|
@ -49,7 +49,7 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
||||||
config.setTemplateName("/config.yml", EssentialsXMPP.class);
|
config.setTemplateName("/config.yml", EssentialsXMPP.class);
|
||||||
reloadConfig();
|
reloadConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendMessage(final String address, final String message)
|
public void sendMessage(final String address, final String message)
|
||||||
{
|
{
|
||||||
if (address != null && !address.isEmpty())
|
if (address != null && !address.isEmpty())
|
||||||
|
@ -65,17 +65,19 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
||||||
}
|
}
|
||||||
catch (XMPPException ex)
|
catch (XMPPException ex)
|
||||||
{
|
{
|
||||||
disableChat(address, ex);
|
disableChat(address);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processMessage(final Chat chat, final Message msg)
|
public void processMessage(final Chat chat, final Message msg)
|
||||||
{
|
{
|
||||||
final String message = msg.getBody();
|
// Normally we should log the error message
|
||||||
if (message.length() > 0)
|
// But we would create a loop if the connection to a log-user fails.
|
||||||
|
if (msg.getType() != Message.Type.error && msg.getBody().length() > 0)
|
||||||
{
|
{
|
||||||
|
final String message = msg.getBody();
|
||||||
switch (message.charAt(0))
|
switch (message.charAt(0))
|
||||||
{
|
{
|
||||||
case '@':
|
case '@':
|
||||||
|
@ -89,7 +91,7 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void connect()
|
private void connect()
|
||||||
{
|
{
|
||||||
final String server = config.getString("xmpp.server");
|
final String server = config.getString("xmpp.server");
|
||||||
|
@ -124,7 +126,7 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
||||||
LOGGER.log(Level.WARNING, "Failed to connect to server: " + server, ex);
|
LOGGER.log(Level.WARNING, "Failed to connect to server: " + server, ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void disconnect()
|
public final void disconnect()
|
||||||
{
|
{
|
||||||
if (connection != null)
|
if (connection != null)
|
||||||
|
@ -132,7 +134,7 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
||||||
connection.disconnect(new Presence(Presence.Type.unavailable));
|
connection.disconnect(new Presence(Presence.Type.unavailable));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void chatCreated(final Chat chat, final boolean createdLocally)
|
public void chatCreated(final Chat chat, final boolean createdLocally)
|
||||||
{
|
{
|
||||||
|
@ -146,7 +148,7 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void reloadConfig()
|
public final void reloadConfig()
|
||||||
{
|
{
|
||||||
|
@ -174,7 +176,7 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
||||||
ignoreLagMessages = config.getBoolean("ignore-lag-messages", true);
|
ignoreLagMessages = config.getBoolean("ignore-lag-messages", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void publish(final LogRecord logRecord)
|
public void publish(final LogRecord logRecord)
|
||||||
{
|
{
|
||||||
|
@ -199,25 +201,23 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
// Ignore all exception and just print them to the console
|
// Ignore all exceptions
|
||||||
// Otherwise we create a loop.
|
// Otherwise we create a loop.
|
||||||
System.out.println(e.getMessage());
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void flush()
|
public void flush()
|
||||||
{
|
{
|
||||||
// Ignore this
|
// Ignore this
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() throws SecurityException
|
public void close() throws SecurityException
|
||||||
{
|
{
|
||||||
// Ignore this
|
// Ignore this
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startChat(final String address) throws XMPPException
|
private void startChat(final String address) throws XMPPException
|
||||||
{
|
{
|
||||||
if (chatManager == null)
|
if (chatManager == null)
|
||||||
|
@ -237,14 +237,14 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendPrivateMessage(final Chat chat, final String message)
|
private void sendPrivateMessage(final Chat chat, final String message)
|
||||||
{
|
{
|
||||||
final String[] parts = message.split(" ", 2);
|
final String[] parts = message.split(" ", 2);
|
||||||
if (parts.length == 2)
|
if (parts.length == 2)
|
||||||
{
|
{
|
||||||
final List<Player> matches = parent.getServer().matchPlayer(parts[0].substring(1));
|
final List<Player> matches = parent.getServer().matchPlayer(parts[0].substring(1));
|
||||||
|
|
||||||
if (matches.isEmpty())
|
if (matches.isEmpty())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -258,7 +258,7 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
final String from = "[X:" + EssentialsXMPP.getInstance().getUserByAddress(StringUtils.parseBareAddress(chat.getParticipant())) + ">";
|
final String from = "[X:" + EssentialsXMPP.getInstance().getUserByAddress(StringUtils.parseBareAddress(chat.getParticipant())) + ">";
|
||||||
for (Player p : matches)
|
for (Player p : matches)
|
||||||
{
|
{
|
||||||
p.sendMessage(from + p.getDisplayName() + "] " + message);
|
p.sendMessage(from + p.getDisplayName() + "] " + message);
|
||||||
|
@ -266,7 +266,7 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendCommand(final Chat chat, final String message)
|
private void sendCommand(final Chat chat, final String message)
|
||||||
{
|
{
|
||||||
if (config.getStringList("op-users", new ArrayList<String>()).contains(StringUtils.parseBareAddress(chat.getParticipant())))
|
if (config.getStringList("op-users", new ArrayList<String>()).contains(StringUtils.parseBareAddress(chat.getParticipant())))
|
||||||
|
@ -278,15 +278,14 @@ public class XMPPManager extends Handler implements MessageListener, ChatManager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void disableChat(final String address, final XMPPException exception)
|
private void disableChat(final String address)
|
||||||
{
|
{
|
||||||
final Chat chat = chats.get(address);
|
final Chat chat = chats.get(address);
|
||||||
if (chat != null)
|
if (chat != null)
|
||||||
{
|
{
|
||||||
chat.removeMessageListener(this);
|
chat.removeMessageListener(this);
|
||||||
chats.remove(address);
|
chats.remove(address);
|
||||||
LOGGER.log(Level.WARNING, "Failed to send xmpp message.", exception);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue