Intial commit

This commit is contained in:
Willem Cazander 2023-09-24 12:41:43 +02:00
parent 7329fb8dea
commit 73f201bdac
268 changed files with 11220 additions and 5 deletions

View file

@ -0,0 +1,25 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>love.distributedrebirth.no2all</groupId>
<artifactId>no2all</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>no2all-react-nostr</artifactId>
<name>No2All-React-NoStr</name>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>no2all-nostr</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>no2all-react-wire</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>no2all-wire-ojw</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View file

@ -0,0 +1,32 @@
package love.distributedrebirth.no2all.react.nostr.client;
import java.io.IOException;
import java.io.StringReader;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import love.distributedrebirth.no2all.nostr.model.NoStrRelayInfo;
import java.net.http.HttpResponse.BodyHandlers;
import jakarta.json.Json;
import jakarta.json.JsonReader;
public class NoStrRelayFetchInfo {
public NoStrRelayInfo fetchRelayInfo(URI uri) throws IOException, InterruptedException {
HttpRequest request = HttpRequest.newBuilder(uri).header("Accept", "application/nostr+json").build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, BodyHandlers.ofString());
if (response.statusCode() != 200) {
return null;
}
String contentJson = response.body();
try (JsonReader read = Json.createReader(new StringReader(contentJson))) {
NoStrRelayInfo result = new NoStrRelayInfo(read.readObject());
return result;
}
}
}

View file

@ -0,0 +1,9 @@
package love.distributedrebirth.no2all.react.nostr.client;
public enum NoStrRelayReadType {
NONE,
ALL,
;
}

View file

@ -0,0 +1,71 @@
package love.distributedrebirth.no2all.react.nostr.client;
import love.distributedrebirth.no2all.nostr.NoStr;
import love.distributedrebirth.no2all.nostr.fire.NoStrFirePipe;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelay;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClientAuth;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClientCount;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClientEose;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClientEvent;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClientNotice;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClientOk;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayAuth;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayClose;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayCount;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayEvent;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayReq;
import love.distributedrebirth.no2all.react.No2AllReactSlotLoad;
import love.distributedrebirth.no2all.react.No2AllReact;
import love.distributedrebirth.no2all.react.No2AllReactListener;
import love.distributedrebirth.no2all.react.No2AllReactSlot;
import love.distributedrebirth.no2all.react.No2AllReactSlotSignal;
import love.distributedrebirth.no2all.react.No2AllReactTypeScript;
import love.distributedrebirth.no2all.react.wire.client.No2AllActClientClose;
import love.distributedrebirth.no2all.react.wire.client.No2AllActClientSendMessage;
import love.distributedrebirth.no2all.react.wire.client.No2AllArtClient;
import love.distributedrebirth.no2all.react.wire.client.No2AllArtClientOnMessage;
import love.distributedrebirth.no2all.react.wire.client.No2AllRtsClient;
public class NoStrRtsClient implements No2AllReactTypeScript {
public static final No2AllReactSlot API = No2AllReactSlot.ofClass(NoStrRtsClient.class);
@Override
public void onEvent(No2AllReactSlotSignal<No2AllReactSlotLoad> signal) {
No2AllReact react = signal.getReact();
react.claim(API);
react.registrate(No2AllRtsClient.API, No2AllArtClient.class, artClient -> {
No2AllReactSlot clientSlot = artClient.getData().getSlot();
react.claimIn(clientSlot, NoStrMsgToRelayAuth.class);
react.claimIn(clientSlot, NoStrMsgToRelayClose.class);
react.claimIn(clientSlot, NoStrMsgToRelayCount.class);
react.claimIn(clientSlot, NoStrMsgToRelayEvent.class);
react.claimIn(clientSlot, NoStrMsgToRelayReq.class);
react.claimOut(clientSlot, NoStrMsgToClientAuth.class);
react.claimOut(clientSlot, NoStrMsgToClientCount.class);
react.claimOut(clientSlot, NoStrMsgToClientEose.class);
react.claimOut(clientSlot, NoStrMsgToClientEvent.class);
react.claimOut(clientSlot, NoStrMsgToClientNotice.class);
react.claimOut(clientSlot, NoStrMsgToClientOk.class);
NoStrFirePipe pipeReader = NoStr.FACTORY.pipeReaderClient(reason -> {
react.fire(clientSlot, No2AllActClientClose.ofRefuse(reason));
}, message -> {
react.fire(clientSlot, message);
});
react.registrate(clientSlot, No2AllArtClientOnMessage.class, v -> {
pipeReader.onFire(v.getData().getMessage());
});
react.registrate(clientSlot, NoStrMsgToRelayAuth.class, pipeWriter(react, clientSlot));
react.registrate(clientSlot, NoStrMsgToRelayClose.class, pipeWriter(react, clientSlot));
react.registrate(clientSlot, NoStrMsgToRelayCount.class, pipeWriter(react, clientSlot));
react.registrate(clientSlot, NoStrMsgToRelayEvent.class, pipeWriter(react, clientSlot));
react.registrate(clientSlot, NoStrMsgToRelayReq.class, pipeWriter(react, clientSlot));
});
}
private <T extends NoStrMsgToRelay> No2AllReactListener<T> pipeWriter(No2AllReact react, No2AllReactSlot clientSlot) {
return v -> {
react.fire(clientSlot, new No2AllActClientSendMessage(v.getData().toBible().toString()));
};
}
}

View file

@ -0,0 +1,86 @@
package love.distributedrebirth.no2all.react.nostr.server;
import love.distributedrebirth.no2all.nostr.NoStr;
import love.distributedrebirth.no2all.nostr.fire.NoStrFirePipe;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClient;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClientAuth;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClientCount;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClientEose;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClientEvent;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClientNotice;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClientOk;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayAuth;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayClose;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayCount;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayEvent;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayReq;
import love.distributedrebirth.no2all.react.No2AllReactSlotLoad;
import love.distributedrebirth.no2all.react.No2AllReact;
import love.distributedrebirth.no2all.react.No2AllReactListener;
import love.distributedrebirth.no2all.react.No2AllReactSlot;
import love.distributedrebirth.no2all.react.No2AllReactSlotSignal;
import love.distributedrebirth.no2all.react.No2AllReactTypeScript;
import love.distributedrebirth.no2all.react.wire.server.No2AllActServerBroadcastMessage;
import love.distributedrebirth.no2all.react.wire.server.No2AllActServerSocketClose;
import love.distributedrebirth.no2all.react.wire.server.No2AllActServerSocketSendMessage;
import love.distributedrebirth.no2all.react.wire.server.No2AllArtServer;
import love.distributedrebirth.no2all.react.wire.server.No2AllArtServerSocket;
import love.distributedrebirth.no2all.react.wire.server.No2AllArtServerSocketOnMessage;
import love.distributedrebirth.no2all.react.wire.server.No2AllRtsServer;
public class NoStrRtsServer implements No2AllReactTypeScript {
public static final No2AllReactSlot API = No2AllReactSlot.ofClass(NoStrRtsServer.class);
@Override
public void onEvent(No2AllReactSlotSignal<No2AllReactSlotLoad> signal) {
No2AllReact react = signal.getReact();
react.claim(API);
react.requireSlot(API, No2AllRtsServer.API);
react.claimIn(API, NoStrMsgToClientNotice.class);
react.registrate(API, NoStrMsgToClientNotice.class, v -> {
react.fireForEach(No2AllRtsServer.API, new No2AllActServerBroadcastMessage(v.getData().toBible().toString()));
});
react.registrate(No2AllRtsServer.API, No2AllArtServer.class, artServer -> {
No2AllReactSlot serverSlot = artServer.getData().getSlot();
react.claimIn(serverSlot, NoStrMsgToClientNotice.class);
react.registrate(serverSlot, No2AllArtServerSocket.class, artSocket -> {
No2AllReactSlot socketSlot = artSocket.getData().getSlot();
react.claimIn(socketSlot, NoStrMsgToClientAuth.class);
react.claimIn(socketSlot, NoStrMsgToClientCount.class);
react.claimIn(socketSlot, NoStrMsgToClientEose.class);
react.claimIn(socketSlot, NoStrMsgToClientEvent.class);
react.claimIn(socketSlot, NoStrMsgToClientNotice.class);
react.claimIn(socketSlot, NoStrMsgToClientOk.class);
react.claimOut(socketSlot, NoStrMsgToRelayAuth.class);
react.claimOut(socketSlot, NoStrMsgToRelayClose.class);
react.claimOut(socketSlot, NoStrMsgToRelayCount.class);
react.claimOut(socketSlot, NoStrMsgToRelayEvent.class);
react.claimOut(socketSlot, NoStrMsgToRelayReq.class);
NoStrFirePipe pipeReader = NoStr.FACTORY.pipeReaderRelay(reason -> {
react.fire(socketSlot, No2AllActServerSocketClose.ofRefuse(reason));
}, message -> {
react.fire(serverSlot, message);
});
react.registrate(socketSlot, No2AllArtServerSocketOnMessage.class, v -> {
pipeReader.onFire(v.getData().getMessage());
});
react.registrate(socketSlot, NoStrMsgToClientAuth.class, pipeWriter(react, socketSlot));
react.registrate(socketSlot, NoStrMsgToClientCount.class, pipeWriter(react, socketSlot));
react.registrate(socketSlot, NoStrMsgToClientEose.class, pipeWriter(react, socketSlot));
react.registrate(socketSlot, NoStrMsgToClientEvent.class, pipeWriter(react, socketSlot));
react.registrate(socketSlot, NoStrMsgToClientNotice.class, pipeWriter(react, socketSlot));
react.registrate(socketSlot, NoStrMsgToClientOk.class, pipeWriter(react, socketSlot));
});
react.registrate(serverSlot, NoStrMsgToClientNotice.class, v -> {
react.fire(serverSlot, new No2AllActServerBroadcastMessage(v.getData().toBible().toString()));
});
});
}
private <T extends NoStrMsgToClient> No2AllReactListener<T> pipeWriter(No2AllReact react, No2AllReactSlot clientSlot) {
return v -> {
react.fire(clientSlot, new No2AllActServerSocketSendMessage(v.getData().toBible().toString()));
};
}
}

View file

@ -0,0 +1,22 @@
package love.distributedrebirth.no2all.react.nostr.server.relay;
import love.distributedrebirth.no2all.nostr.model.event.NoStrEvent;
public final class NoStrArtServerRelayStoreEvent {
private final NoStrEvent event;
private final String remoteAddr;
protected NoStrArtServerRelayStoreEvent(NoStrEvent event, String remoteAddr) {
this.event = event;
this.remoteAddr = remoteAddr;
}
public NoStrEvent getEvent() {
return event;
}
public String getRemoteAddr() {
return remoteAddr;
}
}

View file

@ -0,0 +1,61 @@
package love.distributedrebirth.no2all.react.nostr.server.relay;
import love.distributedrebirth.no2all.nostr.model.event.NoStrEvent;
import love.distributedrebirth.no2all.nostr.model.event.NoStrEventSignature;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToClientOk;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayEvent;
import love.distributedrebirth.no2all.nostr.nip.NoStrImplMessageOkReason;
import love.distributedrebirth.no2all.react.No2AllReact;
import love.distributedrebirth.no2all.react.No2AllReactSlot;
import love.distributedrebirth.no2all.react.No2AllReactSlotLoad;
import love.distributedrebirth.no2all.react.No2AllReactSlotSignal;
import love.distributedrebirth.no2all.react.No2AllReactTypeScript;
import love.distributedrebirth.no2all.react.nostr.server.NoStrRtsServer;
import love.distributedrebirth.no2all.react.wire.server.No2AllArtServer;
import love.distributedrebirth.no2all.react.wire.server.No2AllArtServerSocket;
import love.distributedrebirth.no2all.react.wire.server.No2AllRtsServer;
public class NoStrRtsServerRelay implements No2AllReactTypeScript {
public static final No2AllReactSlot API = No2AllReactSlot.ofClass(NoStrRtsServerRelay.class);
@Override
public void onEvent(No2AllReactSlotSignal<No2AllReactSlotLoad> signal) {
No2AllReact react = signal.getReact();
react.claim(API);
react.requireSlot(API, NoStrRtsServer.API);
react.registrate(No2AllRtsServer.API, No2AllArtServer.class, artServer -> {
No2AllReactSlot serverSlot = artServer.getData().getSlot();
react.registrate(serverSlot, No2AllArtServerSocket.class, artSocket -> {
No2AllReactSlot socketSlot = artSocket.getData().getSlot();
react.registrate(socketSlot, NoStrMsgToRelayEvent.class, v -> {
handleRelayEvent(react, v.getData().getEvent(), artSocket.getData().getRemoteAddr(), socketSlot);
});
});
});
}
private void handleRelayEvent(No2AllReact react, NoStrEvent event, String remoteAddr, No2AllReactSlot socketSlot) {
boolean eventSaved = false;
String eventResponse = "";
NoStrImplMessageOkReason eventReason = NoStrImplMessageOkReason.DEFAULT;
// filter on
event.getPayload().getKind();
event.getPayload().getPublicKey();
event.getPayload().getTags();
eventSaved = NoStrEventSignature.verify(event);
if (!eventSaved) {
eventReason = NoStrImplMessageOkReason.INVALID;
}
System.out.println("Validate event: " + eventSaved + " eventId: " + event.getId());
if (eventSaved) {
react.fire(API, new NoStrArtServerRelayStoreEvent(event, remoteAddr));
}
react.fire(socketSlot, new NoStrMsgToClientOk(event.getId(), eventSaved, eventReason, eventResponse));
}
}

View file

@ -0,0 +1,39 @@
package love.distributedrebirth.no2all.react.nostr.server.relay;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayClose;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayReq;
import love.distributedrebirth.no2all.react.No2AllReactSlotLoad;
import love.distributedrebirth.no2all.react.No2AllReact;
import love.distributedrebirth.no2all.react.No2AllReactSlot;
import love.distributedrebirth.no2all.react.No2AllReactSlotSignal;
import love.distributedrebirth.no2all.react.No2AllReactTypeScript;
import love.distributedrebirth.no2all.react.wire.server.No2AllArtServer;
import love.distributedrebirth.no2all.react.wire.server.No2AllArtServerSocket;
import love.distributedrebirth.no2all.react.wire.server.No2AllRtsServer;
public class NoStrRtsServerRelaySubs implements No2AllReactTypeScript {
public static final No2AllReactSlot API = No2AllReactSlot.ofClass(NoStrRtsServerRelaySubs.class);
@Override
public void onEvent(No2AllReactSlotSignal<No2AllReactSlotLoad> signal) {
No2AllReact react = signal.getReact();
react.claim(API);
react.requireSlot(API, NoStrRtsServerRelay.API);
react.registrate(No2AllRtsServer.API, No2AllArtServer.class, v -> {
No2AllReactSlot serverSlot = v.getData().getSlot();
react.registrate(serverSlot, No2AllArtServerSocket.class, x -> {
No2AllReactSlot socketSlot = x.getData().getSlot();
react.registrate(socketSlot, NoStrMsgToRelayReq.class, y -> {
String subId = y.getData().getSubscriptionId();
y.getData().getFilters();
System.out.println("sub new: " + subId);
});
react.registrate(socketSlot, NoStrMsgToRelayClose.class, y -> {
String subId = y.getData().getSubscriptionId();
System.out.println("sub clone: " + subId);
});
});
});
}
}

View file

@ -0,0 +1,110 @@
package love.distributedrebirth.no2all.react.nostr.client;
import java.net.URI;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import love.distributedrebirth.no2all.nostr.NoStr;
import love.distributedrebirth.no2all.nostr.fire.NoStrFireWaterBoiler;
import love.distributedrebirth.no2all.nostr.model.NoStrIdentity;
import love.distributedrebirth.no2all.nostr.model.NoStrIdentityPrivateKey;
import love.distributedrebirth.no2all.nostr.model.event.NoStrEvent;
import love.distributedrebirth.no2all.nostr.model.message.NoStrMsgToRelayClose;
import love.distributedrebirth.no2all.nostr.nip.NoStrImplEventKind;
import love.distributedrebirth.no2all.react.No2AllReactSlot;
import love.distributedrebirth.no2all.react.warp.No2AllReactWarpCore;
import love.distributedrebirth.no2all.react.warp.No2AllRtsWarpSpeedMonitor;
import love.distributedrebirth.no2all.react.wire.client.No2AllActClient;
import love.distributedrebirth.no2all.react.wire.client.No2AllActClientClose;
import love.distributedrebirth.no2all.react.wire.client.No2AllActClientConnect;
import love.distributedrebirth.no2all.react.wire.client.No2AllArtClient;
import love.distributedrebirth.no2all.react.wire.client.No2AllArtClientOnClose;
import love.distributedrebirth.no2all.react.wire.client.No2AllArtClientOnError;
import love.distributedrebirth.no2all.react.wire.client.No2AllArtClientOnOpen;
import love.distributedrebirth.no2all.react.wire.client.No2AllRtsClient;
import love.distributedrebirth.no2all.wire.ojw.OjwWireClientEndpoint;
public class NoStrClientTest {
private final static NoStrIdentity SENDER = new NoStrIdentity(NoStrIdentityPrivateKey.ofRandom());
// private final static Map<String, String> RELAYS = Map.of("brb", "brb.io",
// "damus", "relay.damus.io", "ZBD", "nostr.zebedee.cloud", "taxi",
// "relay.taxi", "vision", "relay.nostr.vision");
public static void main(String[] args) throws Exception {
No2AllReactWarpCore react = new No2AllReactWarpCore();
react.load(new No2AllRtsWarpSpeedMonitor());
react.load(new No2AllRtsClient());
react.load(new NoStrRtsClient());
react.registrate(No2AllRtsClient.API, No2AllArtClient.class, v -> {
No2AllReactSlot clientSlot = v.getData().getSlot();
System.out.println("NoStrClient connect");
react.registrate(clientSlot, No2AllArtClientOnError.class, x -> {
System.out.println("NoStrClient socket error: " + x.getData().getError().getMessage());
});
react.registrate(clientSlot, No2AllArtClientOnClose.class, x -> {
System.out.println("NoStrClient socket close");
});
react.registrate(clientSlot, No2AllArtClientOnOpen.class, x -> {
System.out.println("NoStrClient socket open");
react.fire(clientSlot, new NoStrMsgToRelayClose("give-me-error"));
});
react.fire(clientSlot, new No2AllActClientConnect());
});
OjwWireClientEndpoint clientEndpoint = new OjwWireClientEndpoint(new URI("ws://localhost:8080"));
System.out.println("NoStrClient start");
react.fire(No2AllRtsClient.API, new No2AllActClient(clientEndpoint));
OjwWireClientEndpoint clientEndpoint2 = new OjwWireClientEndpoint(new URI("ws://localhost:8080"));
System.out.println("NoStrClient start2");
react.fire(No2AllRtsClient.API, new No2AllActClient(clientEndpoint2));
for (int i = 0; i < 100; i++) {
react.fire(No2AllRtsClient.API, SENDER);
Thread.sleep(100);
}
Thread.sleep(500);
Thread exitTimer = new Thread(() -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
System.out.println("NoStrClient stopping");
react.fireForEach(No2AllRtsClient.API, No2AllActClientClose.ofNormal("exit"));
System.out.println("NoStrClient stopped");
});
exitTimer.start();
}
public static void main2(String[] args) throws Exception {
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> {
try {
NoStrFireWaterBoiler userBoiler = NoStr.FACTORY.boiler(SENDER);
NoStrEvent event = userBoiler.smoker()
.tagSubject("Reply to all")
.tagR("")
.burn()
.water(NoStrImplEventKind.TEXT_NOTE, "Hello world");
System.out.println(event);
// GenericMessage message = new EventMessage(event);
// CLIENT.send(message);
} catch (Exception ex) {
ex.printStackTrace();
}
});
executor.shutdown();
executor.awaitTermination(60, TimeUnit.SECONDS);
}
}

View file

@ -0,0 +1,65 @@
package love.distributedrebirth.no2all.react.nostr.server;
import java.net.InetSocketAddress;
import love.distributedrebirth.no2all.react.No2AllReactSlot;
import love.distributedrebirth.no2all.react.nostr.server.relay.NoStrRtsServerRelay;
import love.distributedrebirth.no2all.react.nostr.server.relay.NoStrRtsServerRelaySubs;
import love.distributedrebirth.no2all.react.warp.No2AllReactWarpCore;
import love.distributedrebirth.no2all.react.warp.No2AllRtsWarpSpeedMonitor;
import love.distributedrebirth.no2all.react.wire.server.No2AllActServer;
import love.distributedrebirth.no2all.react.wire.server.No2AllArtServer;
import love.distributedrebirth.no2all.react.wire.server.No2AllArtServerOnStart;
import love.distributedrebirth.no2all.react.wire.server.No2AllArtServerSocket;
import love.distributedrebirth.no2all.react.wire.server.No2AllArtServerSocketOnClose;
import love.distributedrebirth.no2all.react.wire.server.No2AllRtsServerLog;
import love.distributedrebirth.no2all.react.wire.server.No2AllRtsServer;
import love.distributedrebirth.no2all.wire.ojw.OjwWireServer;
import love.distributedrebirth.no2all.wire.ojw.OjwWireServerEndpoint;
public class NoStrServerTest {
static OjwWireServer server = null;
public static void main(String[] args) throws Exception {
No2AllReactWarpCore react = new No2AllReactWarpCore();
react.load(new No2AllRtsWarpSpeedMonitor());
react.load(new No2AllRtsServer());
react.load(new No2AllRtsServerLog());
react.load(new NoStrRtsServer());
react.load(new NoStrRtsServerRelay());
react.load(new NoStrRtsServerRelaySubs());
react.registrate(No2AllRtsServer.API, No2AllArtServer.class, artServer -> {
No2AllReactSlot serverSlot = artServer.getData().getSlot();
react.registrate(serverSlot, No2AllArtServerOnStart.class, v -> {
System.out.println("RelayServer started: " + v.getTarget().getSlotSlug());
});
react.registrate(serverSlot, No2AllArtServerSocket.class, v -> {
System.out.println("RelayServer client-open: " + v.getData().getSlot().getSlotPath());
react.registrate(v.getData().getSlot(), No2AllArtServerSocketOnClose.class, y -> {
System.out.println("RelayServer client-close: " + y.getData().getCode() + " of: " + y.getTarget().getSlotPath());
});
});
react.registrate(serverSlot, OjwWireServer.class, x -> { // TODO: add interface matching ...
server = x.getData();
});
});
System.out.println("RelayServer fire configs");
OjwWireServerEndpoint serverEndpoint = new OjwWireServerEndpoint(new InetSocketAddress(8080), 120);
react.fire(No2AllRtsServer.API, new No2AllActServer(serverEndpoint));
for (int i=0;i<1000;i++) {
//react.fire(No2AllServerRTS.API, react);
Thread.sleep(100);
}
Thread.sleep(40000);
if (server != null) {
System.out.println("RelayServers stopping");
server.getHandler().stop();
}
//react.fireForEach(No2AllServerRTS.API, new No2AllActServerStop());
System.out.println("RelayServers stopped");
}
}