package handling.cashshop;
import constants.ServerConstants;
import handling.MapleServerHandler;
import handling.channel.PlayerStorage;
import handling.mina.MapleCodecFactory;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.log4j.Logger;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.buffer.SimpleBufferAllocator;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.transport.socket.SocketSessionConfig;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import server.ServerProperties;
import tools.FileoutputUtil;
/**
* 现金商城服务
* @author 7
*/
public class CashShopServer {
private static String ip;
private static IoAcceptor acceptor;
private static PlayerStorage players;
private static boolean finishedShutdown = false;
public static short port;
private static final short DEFAULT_PORT = 8600;
private static final Logger log = Logger.getLogger(CashShopServer.class);
private static int autoPaoDian;
public static void run_startup_configurations() {
autoPaoDian = Integer.parseInt(ServerProperties.getProperty("autoPaoDian", "1"));
port = Short.parseShort(ServerProperties.getProperty("cashshop.port", String.valueOf(DEFAULT_PORT)));
ip = ServerProperties.getProperty("world.host", ServerConstants.IP) + ":" + port;
IoBuffer.setUseDirectBuffer(false);
IoBuffer.setAllocator(new SimpleBufferAllocator());
acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MapleCodecFactory()));
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30);
players = new PlayerStorage(MapleServerHandler.CASH_SHOP_SERVER);
try {
acceptor.setHandler(new MapleServerHandler(MapleServerHandler.CASH_SHOP_SERVER));
acceptor.bind(new InetSocketAddress(port));
((SocketSessionConfig) acceptor.getSessionConfig()).setTcpNoDelay(true);
FileoutputUtil.log("完成!");
FileoutputUtil.log("商城伺服器正在监听" + port + "端口\r\n");
} catch (IOException e) {
FileoutputUtil.log("失败!");
System.err.println("无法绑定" + port + "端口");
throw new RuntimeException("绑定端口失败.", e);
}
}
public static String getIP() {
return ip;
}
public static PlayerStorage getPlayerStorage() {
return players;
}
public static int getConnectedClients() {
return getPlayerStorage().getConnectedClients();
}
public static void shutdown() {
if (finishedShutdown) {
return;
}
FileoutputUtil.log("正在关闭商城服务器...");
players.disconnectAll();
FileoutputUtil.log("商城服务器解除端口绑定...");
acceptor.unbind();
finishedShutdown = true;
}
public static boolean isShutdown() {
return finishedShutdown;
}
public static String getCashBlockedMsg(int itemId) {
switch (itemId) {
case 5050000:
case 5060003:
case 5072000:
case 5073000:
case 5074000:
case 5076000:
case 5077000:
case 5079001:
case 5079002:
case 5360000:
case 5360014:
case 5360015:
case 5360016:
case 5390000:
case 5390001:
case 5390002:
case 5390003:
case 5390004:
case 5390005:
case 5390006:
case 5390007:
case 5390008:
case 5390010:
return "该道具只能通过NPC购买。";
}
return "该道具禁止购买。";
}
}