Thread safety for XMPP

This commit is contained in:
snowleo 2012-08-04 10:48:56 +02:00
parent af73c11638
commit bf93bb2026
2 changed files with 11 additions and 6 deletions

View File

@ -2,6 +2,7 @@ package com.earth2me.essentials.xmpp;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User;
import java.util.List;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
@ -20,21 +21,21 @@ class EssentialsXMPPPlayerListener implements Listener
this.ess = ess;
}
@EventHandler(priority= EventPriority.MONITOR)
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(final PlayerJoinEvent event)
{
final User user = ess.getUser(event.getPlayer());
sendMessageToSpyUsers("Player " + user.getDisplayName() + " joined the game");
}
@EventHandler(priority= EventPriority.MONITOR)
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerChat(final AsyncPlayerChatEvent event)
{
final User user = ess.getUser(event.getPlayer());
sendMessageToSpyUsers(String.format(event.getFormat(), user.getDisplayName(), event.getMessage()));
}
@EventHandler(priority= EventPriority.MONITOR)
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerQuit(final PlayerQuitEvent event)
{
final User user = ess.getUser(event.getPlayer());
@ -45,9 +46,13 @@ class EssentialsXMPPPlayerListener implements Listener
{
try
{
for (String address : EssentialsXMPP.getInstance().getSpyUsers())
List<String> users = EssentialsXMPP.getInstance().getSpyUsers();
synchronized (users)
{
EssentialsXMPP.getInstance().sendMessage(address, message);
for (String address : users)
{
EssentialsXMPP.getInstance().sendMessage(address, message);
}
}
}
catch (Exception ex)

View File

@ -9,7 +9,7 @@ import java.util.*;
public class UserManager implements IConf
{
private final transient EssentialsConf users;
private final transient List<String> spyusers = new ArrayList<String>();
private final transient List<String> spyusers = Collections.synchronizedList(new ArrayList<String>());
private final static String ADDRESS = "address";
private final static String SPY = "spy";