From 4aed958319adae17cd4cfa4ada6165ac41b73c9d Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Sun, 26 Apr 2020 19:31:21 +0100 Subject: [PATCH] wip on tracker --- .../groovy/com/muwire/tracker/Tracker.groovy | 47 ++++++++++++------- .../com/muwire/tracker/TrackerService.groovy | 12 ++++- .../com/muwire/tracker/TrackerStatus.groovy | 2 +- 3 files changed, 42 insertions(+), 19 deletions(-) diff --git a/tracker/src/main/groovy/com/muwire/tracker/Tracker.groovy b/tracker/src/main/groovy/com/muwire/tracker/Tracker.groovy index 3df3e864..f194dd69 100644 --- a/tracker/src/main/groovy/com/muwire/tracker/Tracker.groovy +++ b/tracker/src/main/groovy/com/muwire/tracker/Tracker.groovy @@ -1,6 +1,8 @@ package com.muwire.tracker import java.nio.charset.StandardCharsets +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors import com.github.arteam.simplejsonrpc.server.JsonRpcServer import com.muwire.core.Core @@ -12,6 +14,8 @@ class Tracker { private static final String VERSION = "0.6.12" + private static final ExecutorService EXECUTOR_SERVICE = Executors.newCachedThreadPool() + public static void main(String [] args) { println "Launching MuWire Tracker version $VERSION" @@ -49,6 +53,8 @@ class Tracker { def i2cpProps = new Properties() i2cpProps['i2cp.tcp.port'] = props['i2cp.tcp.port'] i2cpProps['i2cp.tcp.host'] = props['i2cp.tcp.host'] + i2cpProps['inbound.nickname'] = "MuWire Tracker" + i2cpProps['outbound.nickname'] = "MuWire Tracker" i2pProps.withPrintWriter { i2cpProps.store(it, "") } @@ -69,13 +75,17 @@ class Tracker { InetAddress toBind = InetAddress.getByName(p['jsonrpc.iface']) int port = Integer.parseInt(p['jsonrpc.port']) ServerSocket ss = new ServerSocket(port, Integer.MAX_VALUE, toBind) + println "json rpc listening on $toBind:$port" + JsonRpcServer rpcServer = new JsonRpcServer() - Core core = new Core(muSettings, home, VERSION, "MuWire Tracker") + Core core = new Core(muSettings, home, VERSION) // init json service object TrackerService trackerService = new TrackerService() - JsonRpcServer rpcServer = new JsonRpcServer() + core.eventBus.with { + register(UILoadedEvent.class, trackerService) + } Thread coreStarter = new Thread({ core.startServices() @@ -83,26 +93,29 @@ class Tracker { } as Runnable) coreStarter.start() - println "json rpc listening on $toBind:$port" try { while(true) { Socket s = ss.accept() - try { - println "accepted connection from " + s.getInetAddress() - def reader = new BufferedReader(new InputStreamReader(s.getInputStream())) - String request; - while((request = reader.readLine()) != null) { - println "got request \"$request\"" - String response = rpcServer.handle(request, trackerService) - println "sending response \"$response\"" - s.getOutputStream().newWriter("UTF-8").write(response) - s.getOutputStream().write("\n".getBytes(StandardCharsets.US_ASCII)) - s.getOutputStream().flush() + println "accepted connection from " + s.getInetAddress() + EXECUTOR_SERVICE.submit { + try { + def reader = new BufferedReader(new InputStreamReader(s.getInputStream())) + String request; + while((request = reader.readLine()) != null) { + println "got request \"$request\"" + String response = rpcServer.handle(request, trackerService) + println "sending response \"$response\"" + s.getOutputStream().newWriter("UTF-8").write(response) + s.getOutputStream().write("\n".getBytes(StandardCharsets.US_ASCII)) + s.getOutputStream().flush() + } + } catch (Exception bad) { + bad.printStackTrace() + } finally { + s.close() } - } finally { - s.close() - } + } as Runnable } } catch (Exception bad) { bad.printStackTrace() diff --git a/tracker/src/main/groovy/com/muwire/tracker/TrackerService.groovy b/tracker/src/main/groovy/com/muwire/tracker/TrackerService.groovy index a42ce9a7..02778993 100644 --- a/tracker/src/main/groovy/com/muwire/tracker/TrackerService.groovy +++ b/tracker/src/main/groovy/com/muwire/tracker/TrackerService.groovy @@ -2,18 +2,28 @@ package com.muwire.tracker import com.github.arteam.simplejsonrpc.core.annotation.JsonRpcMethod import com.github.arteam.simplejsonrpc.core.annotation.JsonRpcService +import com.muwire.core.Core +import com.muwire.core.UILoadedEvent @JsonRpcService class TrackerService { private final TrackerStatus status = new TrackerStatus() + private final Core core - TrackerService() { + TrackerService(Core core) { + this.core = core status.status = "Starting" } @JsonRpcMethod public TrackerStatus status() { + status.connections = core.getConnectionManager().getConnections().size() status } + + + void onUILoadedEvent(UILoadedEvent e) { + status.status = "Running" + } } diff --git a/tracker/src/main/groovy/com/muwire/tracker/TrackerStatus.groovy b/tracker/src/main/groovy/com/muwire/tracker/TrackerStatus.groovy index 54baad7b..bb916b83 100644 --- a/tracker/src/main/groovy/com/muwire/tracker/TrackerStatus.groovy +++ b/tracker/src/main/groovy/com/muwire/tracker/TrackerStatus.groovy @@ -1,7 +1,7 @@ package com.muwire.tracker class TrackerStatus { - String status + volatile String status int connections int swarms }