first commit with streaming support (buggy and unreliable)
This commit is contained in:
@@ -4,4 +4,5 @@ module net.woggioni.rbcs.api {
|
||||
requires io.netty.buffer;
|
||||
exports net.woggioni.rbcs.api;
|
||||
exports net.woggioni.rbcs.api.exception;
|
||||
exports net.woggioni.rbcs.api.event;
|
||||
}
|
@@ -1,14 +1,17 @@
|
||||
package net.woggioni.rbcs.api;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.woggioni.rbcs.api.exception.ContentTooLargeException;
|
||||
import io.netty.buffer.ByteBufAllocator;
|
||||
|
||||
import java.nio.channels.ReadableByteChannel;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
|
||||
public interface Cache extends AutoCloseable {
|
||||
CompletableFuture<ReadableByteChannel> get(String key);
|
||||
|
||||
CompletableFuture<Void> put(String key, ByteBuf content) throws ContentTooLargeException;
|
||||
default void get(String key, ResponseHandle responseHandle, ByteBufAllocator alloc) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
default CompletableFuture<RequestHandle> put(String key, ResponseHandle responseHandle, ByteBufAllocator alloc) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,8 @@
|
||||
package net.woggioni.rbcs.api;
|
||||
|
||||
import net.woggioni.rbcs.api.event.RequestStreamingEvent;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface RequestHandle {
|
||||
void handleEvent(RequestStreamingEvent evt);
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
package net.woggioni.rbcs.api;
|
||||
|
||||
import net.woggioni.rbcs.api.event.ResponseStreamingEvent;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface ResponseHandle {
|
||||
void handleEvent(ResponseStreamingEvent evt);
|
||||
}
|
@@ -0,0 +1,26 @@
|
||||
package net.woggioni.rbcs.api.event;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
public sealed interface RequestStreamingEvent {
|
||||
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
non-sealed class ChunkReceived implements RequestStreamingEvent {
|
||||
private final ByteBuf chunk;
|
||||
}
|
||||
|
||||
final class LastChunkReceived extends ChunkReceived {
|
||||
public LastChunkReceived(ByteBuf chunk) {
|
||||
super(chunk);
|
||||
}
|
||||
}
|
||||
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
final class ExceptionCaught implements RequestStreamingEvent {
|
||||
private final Throwable exception;
|
||||
}
|
||||
}
|
@@ -0,0 +1,42 @@
|
||||
package net.woggioni.rbcs.api.event;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.nio.channels.FileChannel;
|
||||
|
||||
public sealed interface ResponseStreamingEvent {
|
||||
|
||||
final class ResponseReceived implements ResponseStreamingEvent {
|
||||
}
|
||||
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
non-sealed class ChunkReceived implements ResponseStreamingEvent {
|
||||
private final ByteBuf chunk;
|
||||
}
|
||||
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
non-sealed class FileReceived implements ResponseStreamingEvent {
|
||||
private final FileChannel file;
|
||||
}
|
||||
|
||||
final class LastChunkReceived extends ChunkReceived {
|
||||
public LastChunkReceived(ByteBuf chunk) {
|
||||
super(chunk);
|
||||
}
|
||||
}
|
||||
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
final class ExceptionCaught implements ResponseStreamingEvent {
|
||||
private final Throwable exception;
|
||||
}
|
||||
|
||||
final class NotFound implements ResponseStreamingEvent { }
|
||||
|
||||
NotFound NOT_FOUND = new NotFound();
|
||||
ResponseReceived RESPONSE_RECEIVED = new ResponseReceived();
|
||||
}
|
Reference in New Issue
Block a user