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 + -
显示快捷键?