add delayed task for XMPP presence update

This commit is contained in:
patjense 2013-10-13 12:59:04 -07:00 committed by KHobbits
parent 601bdbff46
commit 27ee587887

View file

@ -3,6 +3,9 @@ package com.earth2me.essentials.xmpp;
import com.earth2me.essentials.IEssentials; import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User; import com.earth2me.essentials.User;
import java.util.List; import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.ess3.api.IUser;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@ -10,64 +13,86 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.Server;
class EssentialsXMPPPlayerListener implements Listener class EssentialsXMPPPlayerListener implements Listener
{ {
private final transient IEssentials ess; private final transient IEssentials ess;
EssentialsXMPPPlayerListener(final IEssentials ess) EssentialsXMPPPlayerListener(final IEssentials ess)
{ {
super(); super();
this.ess = ess; this.ess = ess;
} }
@EventHandler(priority = EventPriority.MONITOR) @EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(final PlayerJoinEvent event) public void onPlayerJoin(final PlayerJoinEvent event)
{ {
final User user = ess.getUser(event.getPlayer()); final User user = ess.getUser(event.getPlayer());
sendMessageToSpyUsers("Player " + user.getDisplayName() + " joined the game");
}
@EventHandler(priority = EventPriority.MONITOR) Bukkit.getScheduler().scheduleSyncDelayedTask(ess, new Runnable()
public void onPlayerChat(final AsyncPlayerChatEvent event) {
{ @Override
final User user = ess.getUser(event.getPlayer()); public void run()
sendMessageToSpyUsers(String.format(event.getFormat(), user.getDisplayName(), event.getMessage())); {
} EssentialsXMPP.updatePresence();
}
});
@EventHandler(priority = EventPriority.MONITOR) sendMessageToSpyUsers("Player " + user.getDisplayName() + " joined the game");
public void onPlayerQuit(final PlayerQuitEvent event) }
{
final User user = ess.getUser(event.getPlayer());
sendMessageToSpyUsers("Player " + user.getDisplayName() + " left the game");
}
private void sendMessageToSpyUsers(final String message) @EventHandler(priority = EventPriority.MONITOR)
{ public void onPlayerChat(final AsyncPlayerChatEvent event)
try {
{ final User user = ess.getUser(event.getPlayer());
List<String> users = EssentialsXMPP.getInstance().getSpyUsers(); sendMessageToSpyUsers(String.format(event.getFormat(), user.getDisplayName(), event.getMessage()));
synchronized (users) }
{
for (final String address : users)
{
Bukkit.getScheduler().scheduleSyncDelayedTask(ess, new Runnable()
{
@Override
public void run()
{
EssentialsXMPP.getInstance().sendMessage(address, message);
}
}); @EventHandler(priority = EventPriority.MONITOR)
public void onPlayerQuit(final PlayerQuitEvent event)
{
final User user = ess.getUser(event.getPlayer());
} Bukkit.getScheduler().scheduleSyncDelayedTask(ess, new Runnable()
} {
} @Override
catch (Exception ex) public void run()
{ {
// Ignore exceptions EssentialsXMPP.updatePresence();
} }
} });
sendMessageToSpyUsers("Player " + user.getDisplayName() + " left the game");
}
private void sendMessageToSpyUsers(final String message)
{
try
{
List<String> users = EssentialsXMPP.getInstance().getSpyUsers();
synchronized (users)
{
for (final String address : users)
{
Bukkit.getScheduler().scheduleSyncDelayedTask(ess, new Runnable()
{
@Override
public void run()
{
EssentialsXMPP.getInstance().sendMessage(address, message);
}
});
}
}
}
catch (Exception ex)
{
// Ignore exceptions
}
}
} }