diff --git a/app/src/test/java/de/kuschku/quasseldroid/ExampleUnitTest.kt b/app/src/test/java/de/kuschku/quasseldroid/ExampleUnitTest.kt index 1eabb869f96f2ac800b9a7bccea3eff0de76d84d..dae870cd4367beb1be3a6640c9a1b923eeed424a 100644 --- a/app/src/test/java/de/kuschku/quasseldroid/ExampleUnitTest.kt +++ b/app/src/test/java/de/kuschku/quasseldroid/ExampleUnitTest.kt @@ -4,6 +4,7 @@ import de.kuschku.libquassel.protocol.connection.ProtocolInfoSerializer import de.kuschku.libquassel.protocol.features.FeatureSet import de.kuschku.libquassel.protocol.io.ChainedByteBuffer import de.kuschku.libquassel.protocol.messages.handshake.ClientInit +import de.kuschku.libquassel.protocol.serializers.HandshakeSerializers import de.kuschku.libquassel.protocol.serializers.handshake.ClientInitAckSerializer import de.kuschku.libquassel.protocol.serializers.handshake.ClientInitRejectSerializer import de.kuschku.libquassel.protocol.serializers.handshake.ClientInitSerializer @@ -111,10 +112,9 @@ class ExampleUnitTest { read { val data = HandshakeMapSerializer.deserialize(it, connectionFeatureSet) println(data) - when (data["MsgType"].into<String>()) { - "ClientInitAck" -> println(ClientInitAckSerializer.deserialize(data)) - "ClientInitReject" -> println(ClientInitRejectSerializer.deserialize(data)) - } + val msgType: String = data["MsgType"].into("") + val message: Any? = HandshakeSerializers[msgType]?.deserialize(data) + println(message) } } } diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/HandshakeSerializers.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/HandshakeSerializers.kt index e11430ae86c2011b2ef4ee17bc76a13b22b11a5d..c2a9dba5593ffc0016af90cdc04d477263dad529 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/HandshakeSerializers.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/HandshakeSerializers.kt @@ -33,12 +33,11 @@ object HandshakeSerializers { ClientInitRejectSerializer, ).associateBy(HandshakeSerializer<*>::type) - @PublishedApi - internal fun find(type: String) = serializers[type] + operator fun get(type: String) = serializers[type] @Suppress("UNCHECKED_CAST") - inline operator fun <reified T> get(type: String): HandshakeSerializer<T> { - val serializer = find(type) + inline fun <reified T> find(type: String): HandshakeSerializer<T> { + val serializer = get(type) ?: throw NoSerializerForTypeException.Handshake(type, T::class.java) if (serializer.javaType == T::class.java) { return serializer as HandshakeSerializer<T> diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QtSerializers.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QtSerializers.kt index 6cb668042b135917dd0bcf51c503f2dcc22d3ee1..d03d777dcfecaec40d93b3ae1acf78163abeccb6 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QtSerializers.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QtSerializers.kt @@ -54,12 +54,11 @@ object QtSerializers { QVariantMapSerializer, ).associateBy(QtSerializer<*>::qtType) - @PublishedApi - internal fun find(type: QtType) = serializers[type] + operator fun get(type: QtType) = serializers[type] @Suppress("UNCHECKED_CAST") - inline operator fun <reified T> get(type: QtType): QtSerializer<T> { - val serializer = find(type) + inline fun <reified T> find(type: QtType): QtSerializer<T> { + val serializer = get(type) ?: throw NoSerializerForTypeException.Qt(type, T::class.java) if (serializer.javaType == T::class.java) { return serializer as QtSerializer<T> diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QuasselSerializers.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QuasselSerializers.kt index 0d201e7acba9bee560ec663c6332ffeb474a5778..59c3d014ddd2f5fd17d63ede0474c0ebf50f1f19 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QuasselSerializers.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/QuasselSerializers.kt @@ -42,12 +42,11 @@ object QuasselSerializers { PeerPtrSerializer, ).associateBy(QuasselSerializer<*>::quasselType) - @PublishedApi - internal fun find(type: QuasselType) = serializers[type] + operator fun get(type: QuasselType) = serializers[type] @Suppress("UNCHECKED_CAST") - inline operator fun <reified T> get(type: QuasselType): QuasselSerializer<T> { - val serializer = find(type) + inline fun <reified T> find(type: QuasselType): QuasselSerializer<T> { + val serializer = get(type) ?: throw NoSerializerForTypeException.Quassel(type, T::class.java) if (serializer.javaType == T::class.java) { return serializer as QuasselSerializer<T> diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/handshake/ClientInitSerializer.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/handshake/ClientInitSerializer.kt index 0d1348698d1650398a914bb6887bb716d540c82a..831feaf554856be7a6475d3e4c3094969cd2b3d8 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/handshake/ClientInitSerializer.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/handshake/ClientInitSerializer.kt @@ -34,6 +34,7 @@ object ClientInitSerializer : HandshakeSerializer<ClientInit> { override val javaType: Class<out ClientInit> = ClientInit::class.java override fun serialize(data: ClientInit) = mapOf( + "MsgType" to qVariant(type, QtType.QString), "ClientVersion" to qVariant(data.clientVersion, QtType.QString), "ClientDate" to qVariant(data.buildDate, QtType.QString), "Features" to qVariant(data.clientFeatures.toBits(), QtType.UInt), diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/QVariantSerializer.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/QVariantSerializer.kt index 8deb400fd4264eff1de2b28cb7919e256ca15d8a..19dd1b435c802fe0b266e58e0b6ed662d52741c2 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/QVariantSerializer.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/QVariantSerializer.kt @@ -62,7 +62,7 @@ object QVariantSerializer : QtSerializer<QVariant_> { @Suppress("UNCHECKED_CAST") private fun deserialize(type: QtType, buffer: ByteBuffer, featureSet: FeatureSet): QVariant_ { - val serializer = QtSerializers.find(type) + val serializer = QtSerializers[type] ?: throw NoSerializerForTypeException.Qt(type) val value = serializer.deserialize(buffer, featureSet) return QVariant.of(value, serializer as QtSerializer<Any?>) @@ -70,7 +70,7 @@ object QVariantSerializer : QtSerializer<QVariant_> { @Suppress("UNCHECKED_CAST") private fun deserialize(type: QuasselType, buffer: ByteBuffer, featureSet: FeatureSet): QVariant_ { - val serializer = QuasselSerializers.find(type) + val serializer = QuasselSerializers[type] ?: throw NoSerializerForTypeException.Quassel(type) val value = serializer.deserialize(buffer, featureSet) return QVariant.of(value, serializer as QuasselSerializer<Any?>) diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/variant/QVariant.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/variant/QVariant.kt index 8747eeb4e2aef164a2ec50f5e5c24bf667aaef59..c4bf2986cf242df87588da9bc57741359a82dba2 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/variant/QVariant.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/variant/QVariant.kt @@ -72,10 +72,10 @@ sealed class QVariant<T> constructor( } inline fun <reified T> qVariant(data: T, type: QtType): QVariant<T> = - QVariant.of(data, QtSerializers[type]) + QVariant.of(data, QtSerializers.find(type)) inline fun <reified T> qVariant(data: T, type: QuasselType): QVariant<T> = - QVariant.of(data, QuasselSerializers[type]) + QVariant.of(data, QuasselSerializers.find(type)) inline fun <reified T> QVariant_?.into(): T? = this?.withType<T>()?.value()