generic signals

This commit is contained in:
2025-03-10 13:51:48 +01:00
parent 980527f45f
commit 3abdc09819
4 changed files with 24 additions and 9 deletions

View File

@@ -8,11 +8,11 @@ public class ChatApp {
Server server = new Server(6665);
ClientConsole client = new ClientConsole(new InetSocketAddress("localhost", 6665));
client.onConnect.connect(() -> {
client.onConnect.connect((arg) -> {
client.getClientInterface().SendCreateRoom("101");
});
client.onDisconnect.connect(() -> {
client.onDisconnect.connect((arg) -> {
System.out.println("Stopping server ...");
server.close();

View File

@@ -20,7 +20,7 @@ public class ClientConnexion implements PacketVisitor, PacketHandler {
this.serverAddress = serverAddress;
this.socket = socket;
this.callback = callback;
this.socket.onClose.connect(this::onSocketClose);
this.socket.onClose.connect((args) -> onSocketClose());
this.socket.addHandler(this);
}

View File

@@ -5,13 +5,15 @@ import java.util.Set;
public class Signal {
private final Set<Runnable> listeners;
private final Class<?>[] types;
private final Set<Slot> listeners;
public Signal() {
public Signal(Class<?>... types) {
this.types = types;
this.listeners = new HashSet<>();
}
public void connect(Runnable listener) {
public void connect(Slot listener) {
this.listeners.add(listener);
}
@@ -19,9 +21,17 @@ public class Signal {
this.listeners.clear();
}
public void emit() {
for (Runnable listener : this.listeners) {
listener.run();
public void emit(Object... values) {
for (Slot listener : this.listeners) {
if (values.length != types.length) {
throw new UnsupportedOperationException("The number of provided arguments is not right");
}
for (int i = 0; i < values.length; i++) {
if (!types[i].isInstance(values[i])) {
throw new UnsupportedOperationException("Incorrect value at index " + i);
}
}
listener.run(values);
}
}

View File

@@ -0,0 +1,5 @@
package utilities;
public interface Slot {
void run(Object ... args);
}