Archived
0

[WIP] try RxJava

This commit is contained in:
2020-05-21 00:28:10 +03:00
parent 980088b157
commit c9f396a999
14 changed files with 191 additions and 98 deletions

18
server-api/build.gradle Normal file
View 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
}

View File

@@ -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;
}

View 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());
}
}