toad-java/src/main/java/dev.toad/Client.java

49 lines
1.2 KiB
Java
Raw Normal View History

2023-04-11 21:29:23 +00:00
package dev.toad;
2023-04-20 06:58:11 +00:00
import dev.toad.msg.Code;
import dev.toad.msg.Type;
2023-04-17 01:01:54 +00:00
import dev.toad.msg.Message;
2023-04-20 06:58:11 +00:00
import java.net.URISyntaxException;
import java.net.UnknownHostException;
2023-04-17 01:01:54 +00:00
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
public final class Client implements AutoCloseable {
2023-04-11 21:29:23 +00:00
final Toad toad;
Client(Toad toad) {
this.toad = toad;
}
2023-04-17 01:01:54 +00:00
2023-04-20 06:58:11 +00:00
public CompletableFuture<Message> get(String uri) throws URISyntaxException, UnknownHostException {
return this.get(Type.CON, uri);
}
public CompletableFuture<Message> get(Type ty, String uri) throws URISyntaxException, UnknownHostException {
return this.send(Message.builder().uri(uri).type(ty).code(Code.GET).build());
}
2023-04-17 01:01:54 +00:00
public CompletableFuture<Message> send(Message message) {
if (message.addr().isEmpty()) {
throw new IllegalArgumentException(
"Message destination address must be set"
);
}
return Async
.pollCompletable(() -> this.toad.sendMessage(message))
.thenCompose((Toad.IdAndToken sent) ->
Async.pollCompletable(() ->
this.toad.pollResp(sent.token, message.addr().get())
)
)
.thenApply(msg -> msg.toOwned());
}
@Override
public void close() {
this.toad.close();
}
2023-04-11 21:29:23 +00:00
}