package org.reunionemu.jreunion.proxy; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.ConsoleAppender; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.log4j.PatternLayout; import org.apache.log4j.spi.LoggingEvent; import org.reunionemu.jcommon.ParsedItem; import org.reunionemu.jcommon.Parser; import org.reunionemu.jreunion.network.NetworkThread; import org.reunionemu.jreunion.network.PacketConnection; public class Proxy { private ProxyExternalNetwork externalNetwork; private NetworkThread<? extends PacketConnection<?>> internalNetwork; private PacketConnection<?> loginServer; private List<PacketConnection<?>> gameServers = new LinkedList<PacketConnection<?>>(); public Proxy(InetSocketAddress externalAddress, InetSocketAddress externalBoundAddress, InetSocketAddress internal) throws IOException { externalNetwork = new ProxyExternalNetwork(externalAddress, externalBoundAddress); internalNetwork = new ProxyInternalNetwork(internal); externalNetwork.start(); internalNetwork.start(); } public Proxy(InetSocketAddress externalAddress,InetSocketAddress internal) throws IOException { this(externalAddress, null, internal); } public void connectToGameServers(){ Parser maps = new Parser(); try { maps.Parse("config/Maps.dta"); } catch (IOException e) { e.printStackTrace(); } map_for: for(ParsedItem item: maps){ try { String ip = item.getMemberValue("Ip"); int port = Integer.parseInt(item.getMemberValue("Port")); InetSocketAddress address = new InetSocketAddress(InetAddress.getByName(ip), port); for(PacketConnection<?> connection: gameServers){ if(connection.getSocketChannel().socket()!=null&&connection.getSocketChannel().socket().isConnected()){ if(connection.getSocketChannel().socket().getRemoteSocketAddress().equals(address)) continue map_for; } } gameServers.add(internalNetwork.connect(address)); } catch (IOException e) { e.printStackTrace(); } } } public void connectToLoginServer(){ } /** * @param args */ public static void main(String[] args) throws Exception { BasicConfigurator.configure(); Proxy proxy = new Proxy(new InetSocketAddress(InetAddress.getByName("192.168.1.199"), 4005), new InetSocketAddress(4005), new InetSocketAddress(5001)); Thread.sleep(1000); proxy.connectToGameServers(); //Connection<ProxyExternalConnection> connection = proxy.connect(new InetSocketAddress(4005)); //System.out.println(connection.getSocketChannel()); } }