cleaner thread code

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

@ -43,19 +43,13 @@ public class Main {
Router r = new Router(p); Router r = new Router(p);
new Thread() { new Thread(()->{
@Override
public void run() {
r.setKillVMOnEnd(true); r.setKillVMOnEnd(true);
r.runRouter(); r.runRouter();
} }).start();
}.start();
new Thread() { new Thread(()->{
@Override
public void run() {
try { try {
while(true) { while(true) {
if(r.isAlive()) { if(r.isAlive()) {
break; break;
@ -66,10 +60,10 @@ public class Main {
} }
} }
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();
@ -78,16 +72,12 @@ public class Main {
catch (Exception e) { catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }).start();
}.start();
Runtime.getRuntime().addShutdownHook(new Thread() { Runtime.getRuntime().addShutdownHook(new Thread(()->{
@Override
public void run() {
System.out.println("I2P router will shut down gracefully"); System.out.println("I2P router will shut down gracefully");
r.shutdownGracefully(); 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
public void run() {
I2PTunnel t = new I2PTunnel(new String[]{"-die", "-nocli", "-e", "server "+destHost+" "+destPort+" " + seckeyPath}); I2PTunnel t = new I2PTunnel(new String[]{"-die", "-nocli", "-e", "server "+destHost+" "+destPort+" " + seckeyPath});
serverTunnels.put(destPubKey, t); serverTunnels.put(destPubKey, t);
} }).start();
}.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
public void run() {
var t = serverTunnels.get(destPubKey); var t = serverTunnels.get(destPubKey);
serverTunnels.remove(destPubKey); serverTunnels.remove(destPubKey);
t.runClose(new String[]{"forced", "all"}, t); t.runClose(new String[]{"forced", "all"}, t);
} }).start();
}.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
public void run() {
var t = new I2PTunnel(new String[]{"-die", "-nocli", "-e", "config localhost 7654", "-e", "client " + port + " " + destPubKey}); var t = new I2PTunnel(new String[]{"-die", "-nocli", "-e", "config localhost 7654", "-e", "client " + port + " " + destPubKey});
clientTunnels.put(port, t); clientTunnels.put(port, t);
} }).start();
}.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
public void run() {
var t = clientTunnels.get(port); var t = clientTunnels.get(port);
clientTunnels.remove(port); clientTunnels.remove(port);
t.runClose(new String[]{"forced", "all"}, t); t.runClose(new String[]{"forced", "all"}, t);
} }).start();
}.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
public void run() {
// sockstunnel port // sockstunnel port
var t = new I2PTunnel(new String[]{"-die", "-nocli", "-e", "sockstunnel " + port}); var t = new I2PTunnel(new String[]{"-die", "-nocli", "-e", "sockstunnel " + port});
socksTunnels.put(port, t); socksTunnels.put(port, t);
} }).start();
}.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
public void run() {
var t = socksTunnels.get(port); var t = socksTunnels.get(port);
socksTunnels.remove(port); socksTunnels.remove(port);
t.runClose(new String[]{"forced", "all"}, t); t.runClose(new String[]{"forced", "all"}, t);
} }).start();
}.start();
out.println("OK"); out.println("OK");
} }

Loading…
Cancel
Save