package net.glowstone.net; import com.flowpowered.network.ConnectionManager; import com.flowpowered.network.session.Session; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import net.glowstone.GlowServer; import net.glowstone.net.pipeline.GlowChannelInitializer; import java.net.InetSocketAddress; import java.util.concurrent.CountDownLatch; import java.util.logging.Level; public final class GameServer extends GlowSocketServer implements ConnectionManager { public GameServer(GlowServer server, CountDownLatch latch) { super(server, latch); bootstrap.childHandler(new GlowChannelInitializer(this)); } public ChannelFuture bind(InetSocketAddress address) { GlowServer.logger.info("Binding server to " + address + "..."); return super.bind(address); } @Override public void onBindSuccess(InetSocketAddress address) { getServer().setPort(address.getPort()); getServer().setIp(address.getHostString()); GlowServer.logger.info("Successfully bound server to " + address + '.'); super.onBindSuccess(address); } @Override public void onBindFailure(InetSocketAddress address, Throwable t) { GlowServer.logger.severe("Failed to bind server to " + address + '.'); if (t.getMessage().contains("Cannot assign requested address")) { GlowServer.logger.severe("The 'server.ip' in your configuration may not be valid."); GlowServer.logger.severe("Unless you are sure you need it, try removing it."); GlowServer.logger.severe(t.getLocalizedMessage()); } else if (t.getMessage().contains("Address already in use")) { GlowServer.logger.severe("The address was already in use. Check that no server is"); GlowServer.logger.severe("already running on that port. If needed, try killing all"); GlowServer.logger.severe("Java processes using Task Manager or similar."); GlowServer.logger.severe(t.getLocalizedMessage()); } else { GlowServer.logger.log(Level.SEVERE, "An unknown bind error has occurred.", t); } System.exit(1); } @Override public GlowSession newSession(Channel c) { GlowSession session = new GlowSession(getServer(), c, this); getServer().getSessionRegistry().add(session); return session; } @Override public void sessionInactivated(Session session) { getServer().getSessionRegistry().remove((GlowSession) session); } }