root/trunk/AE-go_GameServer/src/com/aionemu/gameserver/taskmanager/PacketBroadcaster.java

9901002
16
 */
16
 */
17
package com.aionemu.gameserver.taskmanager;
17
package com.aionemu.gameserver.taskmanager;
18
18
19
import java.util.HashSet;
20
import java.util.Iterator;
21
22
import org.apache.log4j.Logger;
23
24
import com.aionemu.gameserver.model.gameobjects.Creature;
19
import com.aionemu.gameserver.model.gameobjects.Creature;
25
import com.aionemu.gameserver.model.gameobjects.player.Player;
20
import com.aionemu.gameserver.model.gameobjects.player.Player;
26
import com.aionemu.gameserver.utils.ThreadPoolManager;
27
21
28
/**
22
/**
29
 * @author lord_rex and MrPoke
23
 * @author lord_rex and MrPoke
30
 * 
24
 * 
31
 */
25
 */
32
public class PacketBroadcaster implements Runnable
26
public class PacketBroadcaster extends AbstractPeriodicTaskManager<Creature>
33
{
27
{
34
	private static final Logger		log		= Logger.getLogger(PacketBroadcaster.class);
35
36
	private final HashSet<Creature>	SET	= new HashSet<Creature>();
37
38
	private static final class SingletonHolder
28
	private static final class SingletonHolder
39
	{
29
	{
40
		private static final PacketBroadcaster	INSTANCE	= new PacketBroadcaster();
30
		private static final PacketBroadcaster	INSTANCE	= new PacketBroadcaster();
...
...
47
37
48
	private PacketBroadcaster()
38
	private PacketBroadcaster()
49
	{
39
	{
50
		ThreadPoolManager.getInstance().scheduleAtFixedRate(this, 100, 100);
40
		super(100);
51
52
		log.info("PacketBroadcaster: Initialized.");
53
	}
41
	}
54
42
55
	public static enum BroadcastMode
43
	public static enum BroadcastMode
...
...
112
100
113
	private static final BroadcastMode[]	VALUES	= BroadcastMode.values();
101
	private static final BroadcastMode[]	VALUES	= BroadcastMode.values();
114
102
115
	public void add(Creature creature)
116
	{
117
		synchronized(SET)
118
		{
119
			SET.add(creature);
120
		}
121
	}
122
123
	@Override
103
	@Override
124
	public void run()
104
	protected void callTask(Creature creature)
125
	{
105
	{
126
		Iterator<Creature> it = SET.iterator();
106
		for(byte mask; (mask = creature.getPacketBroadcastMask()) != 0;)
127
		while(it.hasNext())
128
		{
107
		{
129
			Creature creature = it.next();
108
			for(BroadcastMode mode : VALUES)
130
			synchronized(SET)
131
			{
109
			{
132
				SET.remove(creature);
110
				mode.trySendPacket(creature, mask);
133
			}
111
			}
134
			for(byte mask; (mask = creature.getPacketBroadcastMask()) != 0;)
135
			{
136
				for(BroadcastMode mode : VALUES) {
137
					mode.trySendPacket(creature, mask);
138
				}
139
			}
140
		}
112
		}
141
	}
113
	}
142
}
114
}