[WIP] try RxJava
This commit is contained in:
18
server-api/build.gradle
Normal file
18
server-api/build.gradle
Normal file
@@ -0,0 +1,18 @@
|
||||
ext {
|
||||
netty_version = '4.1.22.Final';
|
||||
|
||||
library = [
|
||||
rxjava: ['io.reactivex.rxjava3:rxjava:3.0.3'],
|
||||
netty: [
|
||||
"io.netty:netty-transport:$netty_version"
|
||||
]
|
||||
]
|
||||
}
|
||||
|
||||
dependencies {
|
||||
/* COMPONENTS */
|
||||
compile project(':protocol')
|
||||
compile library.rxjava
|
||||
|
||||
implementation library.netty
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package mc.server.reactive;
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
import lombok.Data;
|
||||
import mc.protocol.Packet;
|
||||
|
||||
@Data
|
||||
public class NetworkContainer<T extends Packet> {
|
||||
|
||||
private final Channel channel;
|
||||
private final T packet;
|
||||
}
|
||||
28
server-api/src/main/java/mc/server/reactive/RxProvider.java
Normal file
28
server-api/src/main/java/mc/server/reactive/RxProvider.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package mc.server.reactive;
|
||||
|
||||
import io.reactivex.rxjava3.core.Observable;
|
||||
import io.reactivex.rxjava3.core.Observer;
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject;
|
||||
import io.reactivex.rxjava3.subjects.Subject;
|
||||
import mc.protocol.Packet;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
public class RxProvider {
|
||||
|
||||
private final Map<Class, Subject> subjectMap = new HashMap<>();
|
||||
|
||||
public <T extends Packet> Observable<NetworkContainer<T>> getPacketObservable(Class<T> packetType) {
|
||||
return giveSubject(packetType);
|
||||
}
|
||||
|
||||
public Observer<NetworkContainer<? extends Packet>> getPacketObserver(Class<? extends Packet> packetType) {
|
||||
return giveSubject(packetType);
|
||||
}
|
||||
|
||||
private Subject giveSubject(Class<? extends Packet> packetType) {
|
||||
return subjectMap.computeIfAbsent(packetType, key -> PublishSubject.create());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user