Skip to content

Commit f4539a0

Browse files
committed
feat(sdk/server): improve XStream granularity
1 parent ead6e8d commit f4539a0

File tree

6 files changed

+23
-15
lines changed

6 files changed

+23
-15
lines changed

sdk/src/main/server-api/sc/framework/ReplayListener.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package sc.framework
22

3-
import sc.networking.XStreamProvider.Companion.loadPluginXStream
3+
import sc.networking.XStreamProvider
44
import java.io.IOException
55
import java.io.Writer
66

@@ -12,7 +12,7 @@ class ReplayListener<T>(private val history: MutableList<T> = ArrayList()) {
1212
/** Write replay of game to a writer. */
1313
@Throws(IOException::class)
1414
fun saveReplay(writer: Writer) {
15-
val xStream = loadPluginXStream()
15+
val xStream = XStreamProvider.allPlugins()
1616
writer.write("<protocol>\n")
1717
for (element in history) {
1818
// TODO do we need to save RoomPackets?

sdk/src/main/server-api/sc/framework/ReplayLoader.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class ReplayLoader(inputStream: InputStream) {
2626
file.inputStream()
2727
)
2828

29-
val stream = XStreamProvider.loadPluginXStream().createObjectInputStream(inputStream)
29+
val stream = XStreamProvider.currentPlugin().createObjectInputStream(inputStream)
3030

3131
fun loadHistory(exitCondition: (IGameState) -> Boolean = { false }): Pair<List<IGameState>, GameResult?> {
3232
val history: MutableList<IGameState> = ArrayList(50)

sdk/src/main/server-api/sc/networking/XStreamProvider.kt

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ interface XStreamProvider {
1616
* </prepare>
1717
*/
1818
/** @return a XStream instance with the default project settings. */
19-
fun getPureXStream(): XStream =
19+
fun pure(): XStream =
2020
XStream(KXml2Driver()).apply {
2121
setMode(XStream.NO_REFERENCES)
2222
}
2323

2424
/** @return a XStream instance able to handle all messages in the sdk. */
25-
fun getBasicXStream(): XStream =
26-
getPureXStream().also { xStream ->
25+
fun basic(): XStream =
26+
pure().also { xStream ->
2727
LobbyProtocol.registerMessages(xStream)
2828
}
2929

@@ -32,13 +32,21 @@ interface XStreamProvider {
3232
*
3333
* @return a XStream instance able to handle custom registered classes. */
3434
@JvmStatic
35-
fun loadPluginXStream(): XStream =
36-
getBasicXStream().also { xStream ->
37-
ServiceLoader.load(XStreamProvider::class.java).forEach { provider ->
38-
LobbyProtocol.registerAdditionalMessages(xStream, provider.classesToRegister)
39-
provider.setup(xStream)
40-
}
35+
fun currentPlugin(): XStream =
36+
basic().also { xStream ->
37+
ServiceLoader.load(XStreamProvider::class.java).sortedBy { it.javaClass.name }.last().load(xStream)
4138
}
39+
40+
fun allPlugins(): XStream =
41+
basic().also { xStream ->
42+
ServiceLoader.load(XStreamProvider::class.java).forEach { provider -> provider.load(xStream) }
43+
}
44+
45+
private fun XStreamProvider.load(xStream: XStream) {
46+
println("Loading into XStream: $this")
47+
LobbyProtocol.registerAdditionalMessages(xStream, this.classesToRegister)
48+
this.setup(xStream)
49+
}
4250
}
4351

4452
val classesToRegister: Collection<Class<*>>

sdk/src/main/server-api/sc/networking/clients/XStreamClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public static INetworkInterface createTcpNetwork(String host, int port) throws I
3131
private final INetworkInterface networkInterface;
3232
private final ObjectOutputStream out;
3333
private final Thread receiveThread;
34-
protected final XStream xStream = XStreamProvider.loadPluginXStream();
34+
protected final XStream xStream = XStreamProvider.currentPlugin();
3535

3636
private DisconnectCause disconnectCause = DisconnectCause.NOT_DISCONNECTED;
3737
private boolean closed = false;

sdk/src/test/config/sc/helpers/XStreamMatcher.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import sc.networking.XStreamProvider
99
@AutoScan
1010
object XStreamProjectListener: ProjectListener {
1111
override suspend fun beforeProject() {
12-
testXStream = XStreamProvider.loadPluginXStream()
12+
testXStream = XStreamProvider.allPlugins()
1313
}
1414
}
1515

server/src/test/java/sc/server/helpers/ConverterTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class ConverterTest {
2424
}
2525
}
2626

27-
private val xStream = XStreamProvider.getPureXStream()
27+
private val xStream = XStreamProvider.pure()
2828

2929
@Test
3030
fun shouldSerializeSensitiveDataForAuthorizedPeople() {

0 commit comments

Comments
 (0)