📄 eventwriter.java
字号:
/*
* Created on 2005-4-20
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.swing.server.server;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import com.swing.server.common.GameEvent;
import com.swing.server.common.Globals;
import com.swing.server.common.NIOUtils;
import com.swing.server.common.Player;
import com.swing.server.common.Wrap;
import com.swing.server.server.controller.GameController;
/**
* @author vampire_a
*
* 当每有一个上行信息时,本类被用来对该上行信息进行下行,并不进行广播下行
*/
public class EventWriter extends Wrap {
/** reference to the GameServer */
private static GameServer gameServer;
/**
* contructor.
*/
public EventWriter(GameServer gameServer, int numWorkers) {
EventWriter.gameServer = gameServer;
initWrap(numWorkers);
}
/**
* note we override the Wrap's run method here doing essentially the same
* thing, but first we allocate a ByteBuffer for this thread to use
*/
public void run() {
// 改字符顺序~~~~~~
ByteBuffer writeBuffer = ByteBuffer
.allocateDirect(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, ByteBuffer writeBuffer) {
NIOUtils.prepBuffer(event, writeBuffer);
GameController gc = gameServer.getGameControllerByCode(event
.getGameCode());
String playerId = event.getPlayerId();
// Player p = gc.getPlayerById (playerId);
// 针对一个用户,同一时间内只能有一个线程给他发送数据
// synchronized (p) {
write(gc.getPlayerById(playerId), writeBuffer);
// }
}
/**
* write the event to the given playerId's channel
*/
private void write(Player player, ByteBuffer writeBuffer) {
SocketChannel channel = player.getChannel();
if (channel == null || !channel.isConnected()) {
log.error("writeEvent: client channel null or not connected");
return;
}
NIOUtils.channelWrite(channel, writeBuffer);
}
/*
* (non-Javadoc)
*
* @see com.swing.server.common.Wrap#processEvent(com.swing.server.common.GameEvent)
*/
protected void processEvent(GameEvent event) {
}
}// EventWriter
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -