cleaner thread code

pull/2/head
knaccc 5 years ago
parent 7992aeda99
commit 74e6ba67c3

@ -43,51 +43,41 @@ public class Main {
Router r = new Router(p); Router r = new Router(p);
new Thread() { new Thread(()->{
@Override r.setKillVMOnEnd(true);
public void run() { r.runRouter();
r.setKillVMOnEnd(true); }).start();
r.runRouter();
} new Thread(()->{
}.start(); try {
while(true) {
new Thread() { if(r.isAlive()) {
@Override break;
public void run() { }
try { else {
Thread.sleep(1000);
while(true) { System.out.println("Waiting for I2P router to start...");
if(r.isAlive()) {
break;
}
else {
Thread.sleep(1000);
System.out.println("Waiting for I2P router to start...");
}
} }
}
String[] args = new String[]{"sam.keys", "127.0.0.1", "7656", "i2cp.tcp.host=127.0.0.1", "i2cp.tcp.port=7654"}; String[] samArgs = new String[]{"sam.keys", "127.0.0.1", "7656", "i2cp.tcp.host=127.0.0.1", "i2cp.tcp.port=7654"};
I2PAppContext context = r.getContext(); I2PAppContext context = r.getContext();
ClientAppManager mgr = new ClientAppManagerImpl(context); ClientAppManager mgr = new ClientAppManagerImpl(context);
SAMBridge samBridge = new SAMBridge(context, mgr, args); SAMBridge samBridge = new SAMBridge(context, mgr, samArgs);
samBridge.startup(); samBridge.startup();
new Thread(new TunnelControl(new File(new File(p.getProperty("i2p.dir.config")), "tunnel"))).start(); new Thread(new TunnelControl(new File(new File(p.getProperty("i2p.dir.config")), "tunnel"))).start();
}
catch (Exception e) {
e.printStackTrace();
}
} }
}.start(); catch (Exception e) {
e.printStackTrace();
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
System.out.println("I2P router will shut down gracefully");
r.shutdownGracefully();
} }
}); }).start();
Runtime.getRuntime().addShutdownHook(new Thread(()->{
System.out.println("I2P router will shut down gracefully");
r.shutdownGracefully();
}));
} }

@ -56,73 +56,55 @@ public class TunnelControl implements Runnable {
String destPubKey = Base64.encode(Files.readAllBytes(new File(pubkeyPath).toPath())); String destPubKey = Base64.encode(Files.readAllBytes(new File(pubkeyPath).toPath()));
// listen using the I2P server keypair, and forward incoming connections to a destination and port // listen using the I2P server keypair, and forward incoming connections to a destination and port
new Thread() { new Thread(()->{
@Override I2PTunnel t = new I2PTunnel(new String[]{"-die", "-nocli", "-e", "server "+destHost+" "+destPort+" " + seckeyPath});
public void run() { serverTunnels.put(destPubKey, t);
I2PTunnel t = new I2PTunnel(new String[]{"-die", "-nocli", "-e", "server "+destHost+" "+destPort+" " + seckeyPath}); }).start();
serverTunnels.put(destPubKey, t);
}
}.start();
out.println(destPubKey); out.println(destPubKey);
} }
else if(args[0].equals("server.destroy")) { else if(args[0].equals("server.destroy")) {
String destPubKey = args[1]; String destPubKey = args[1];
new Thread() { new Thread(()->{
@Override var t = serverTunnels.get(destPubKey);
public void run() { serverTunnels.remove(destPubKey);
var t = serverTunnels.get(destPubKey); t.runClose(new String[]{"forced", "all"}, t);
serverTunnels.remove(destPubKey); }).start();
t.runClose(new String[]{"forced", "all"}, t);
}
}.start();
out.println("OK"); out.println("OK");
} }
else if(args[0].equals("client.create")) { else if(args[0].equals("client.create")) {
String destPubKey = args[1]; String destPubKey = args[1];
int port = clientPortSeq++; int port = clientPortSeq++;
new Thread() { new Thread(()->{
@Override var t = new I2PTunnel(new String[]{"-die", "-nocli", "-e", "config localhost 7654", "-e", "client " + port + " " + destPubKey});
public void run() { clientTunnels.put(port, t);
var t = new I2PTunnel(new String[]{"-die", "-nocli", "-e", "config localhost 7654", "-e", "client " + port + " " + destPubKey}); }).start();
clientTunnels.put(port, t);
}
}.start();
out.println(port); out.println(port);
} }
if(args[0].equals("client.destroy")) { if(args[0].equals("client.destroy")) {
int port = Integer.parseInt(args[1]); int port = Integer.parseInt(args[1]);
new Thread() { new Thread(()->{
@Override var t = clientTunnels.get(port);
public void run() { clientTunnels.remove(port);
var t = clientTunnels.get(port); t.runClose(new String[]{"forced", "all"}, t);
clientTunnels.remove(port); }).start();
t.runClose(new String[]{"forced", "all"}, t);
}
}.start();
out.println("OK"); out.println("OK");
} }
if(args[0].equals("socks.create")) { if(args[0].equals("socks.create")) {
int port = Integer.parseInt(args[1]); int port = Integer.parseInt(args[1]);
new Thread() { new Thread(()->{
@Override // sockstunnel port
public void run() { var t = new I2PTunnel(new String[]{"-die", "-nocli", "-e", "sockstunnel " + port});
// sockstunnel port socksTunnels.put(port, t);
var t = new I2PTunnel(new String[]{"-die", "-nocli", "-e", "sockstunnel " + port}); }).start();
socksTunnels.put(port, t);
}
}.start();
out.println("OK"); out.println("OK");
} }
if(args[0].equals("socks.destroy")) { if(args[0].equals("socks.destroy")) {
int port = Integer.parseInt(args[1]); int port = Integer.parseInt(args[1]);
new Thread() { new Thread(()->{
@Override var t = socksTunnels.get(port);
public void run() { socksTunnels.remove(port);
var t = socksTunnels.get(port); t.runClose(new String[]{"forced", "all"}, t);
socksTunnels.remove(port); }).start();
t.runClose(new String[]{"forced", "all"}, t);
}
}.start();
out.println("OK"); out.println("OK");
} }

Loading…
Cancel
Save