root/trunk/AE-go_GameServer/src/com/aionemu/gameserver/taskmanager/PacketBroadcaster.java
| 990 | 1002 | ||
|---|---|---|---|
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 | } |
Download diff