eventwriter.java
来自「一个MMORPG手机游戏的服务器端程序源代码」· Java 代码 · 共 94 行
JAVA
94 行
package zsw_mmorpg.server;import zsw_mmorpg.common.*;import zsw_mmorpg.log.zsw_out;import java.nio.*;import java.nio.channels.*;import java.util.Timer;import java.util.TimerTask;/** * EventWriter.java * * * @author <a href="mailto:shiwei@raymobile.com">朱世伟</a> * @version 1.0 */public class EventWriter extends Wrap { private static GameServer gameServer; /** * 构造函数 */ public EventWriter(GameServer gameServer, int numWorkers) { this.gameServer = gameServer; initWrap(numWorkers); } /** * 处理写(发送)事件的机制 */ public void run() { ByteBuffer writeBuffer = ByteBuffer.allocate(Globals.MAX_EVENT_SIZE); writeBuffer.order(ByteOrder.LITTLE_ENDIAN); GameEvent event; running = true; while (running) { try { if ((event = eventQueue.deQueue()) != null) { processEvent(event, writeBuffer); } } catch(InterruptedException e) { } } } /**没用上 */ protected void processEvent(GameEvent event) { } /** * 把事件处理成数据包 */ protected void processEvent(GameEvent event, ByteBuffer writeBuffer) { NIOUtils.prepBuffer(event, writeBuffer); String[] recipients = event.getRecipients(); if (recipients == null) { log.info("writeEvent: type=" + event.getType() + ", id=" + event.getPlayerId() + ", msg=" + event.getMessage()); String playerId = event.getPlayerId(); write(playerId, writeBuffer); } else { for (int i = 0; i < recipients.length; i++) { if (recipients[i] != null) { zsw_out.outdebug("writeEvent(B): type=" + event.getType() + ", id=" + recipients[i] + ", msg=" + event.getMessage()); write(recipients[i], writeBuffer); } } } } /** * 把数据发送给该玩家的通道 */ private void write( String playerId, ByteBuffer writeBuffer) { Player player = gameServer.getPlayerById(playerId); SocketChannel channel = player.getChannel(); if (channel == null || !channel.isConnected()) { log.error("writeEvent: client channel null or not connected"); return; } NIOUtils.channelWrite(channel, writeBuffer); } public synchronized int All_p_save(){return 0;}}// EventWriter
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?