diff --git a/push/src/main/java/cn/org/bjca/trust/push/common/MessageHelper.kt b/push/src/main/java/cn/org/bjca/trust/push/common/MessageHelper.kt new file mode 100644 index 0000000..07909e8 --- /dev/null +++ b/push/src/main/java/cn/org/bjca/trust/push/common/MessageHelper.kt @@ -0,0 +1,38 @@ +package cn.org.bjca.trust.push.common + +import cn.org.bjca.trust.push.enums.MsgType +import cn.org.bjca.trust.push.message.bean.TextMessage +import cn.org.bjca.trust.push.message.bean.UnknownMessage +import cn.org.bjca.trust.push.message.msg.Message +import cn.org.bjca.trust.push.message.msg.SendMessage +import org.json.JSONException + +object MessageHelper { + + @JvmStatic + fun parseMessage(msgType: MsgType, sendMessage: SendMessage): Message? { + + val clazz: Class<*> = when (msgType) { + MsgType.Text -> { + TextMessage::class.java + } + else -> { + UnknownMessage::class.java + } + } + var message: Message? = null + + try { + message = clazz.newInstance() as Message + message.parse(msgType, sendMessage) + } catch (e: InstantiationException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } catch (e: JSONException) { + e.printStackTrace() + } + + return message + } +} \ No newline at end of file diff --git a/push/src/main/java/cn/org/bjca/trust/push/enums/MsgType.kt b/push/src/main/java/cn/org/bjca/trust/push/enums/MsgType.kt index 178770a..7406a58 100644 --- a/push/src/main/java/cn/org/bjca/trust/push/enums/MsgType.kt +++ b/push/src/main/java/cn/org/bjca/trust/push/enums/MsgType.kt @@ -1,6 +1,17 @@ package cn.org.bjca.trust.push.enums -enum class MsgType(val value:Int) { +enum class MsgType(val value: Int) { UNKNOWN(-1), - Text(1) + Text(1); + + companion object { + fun getMsgType(value: Int): MsgType { + for (item in MsgType.values()) { + if (item.value == value) { + return item + } + } + return MsgType.UNKNOWN + } + } } \ No newline at end of file diff --git a/push/src/main/java/cn/org/bjca/trust/push/message/ImCallback.kt b/push/src/main/java/cn/org/bjca/trust/push/message/ImCallback.kt index ee8f55c..777effa 100644 --- a/push/src/main/java/cn/org/bjca/trust/push/message/ImCallback.kt +++ b/push/src/main/java/cn/org/bjca/trust/push/message/ImCallback.kt @@ -3,8 +3,9 @@ package cn.org.bjca.trust.push.message import cn.org.bjca.trust.push.common.LogHelper import cn.org.bjca.trust.push.enums.ConnAckReturnCode import cn.org.bjca.trust.push.enums.OsType -import cn.org.bjca.trust.push.message.msg.SendMessage import cn.org.bjca.trust.push.message.callback.CallbackListener +import cn.org.bjca.trust.push.message.msg.Message +import cn.org.bjca.trust.push.message.msg.SendMessage class ImCallback : CallbackListener { override fun sendComplete(var1: SendMessage) { @@ -15,8 +16,8 @@ class ImCallback : CallbackListener { LogHelper.d("消息发送失败") } - override fun messageArrived(var1: List) { - TODO("Not yet implemented") + override fun messageArrived(msg: Message) { + LogHelper.d("------新消息------\t${msg}") } override fun connected() { diff --git a/push/src/main/java/cn/org/bjca/trust/push/message/bean/TextMessage.kt b/push/src/main/java/cn/org/bjca/trust/push/message/bean/TextMessage.kt index 7eeac33..266db16 100644 --- a/push/src/main/java/cn/org/bjca/trust/push/message/bean/TextMessage.kt +++ b/push/src/main/java/cn/org/bjca/trust/push/message/bean/TextMessage.kt @@ -16,9 +16,6 @@ class TextMessage : Message() { override fun parse(type: MsgType, sendMessage: SendMessage) { super.parse(type, sendMessage) - -// if (!(jsonStr instanceof String)) -// return; try { val json = sendMessage.message?.let { JSONObject(it) } if (json != null) { diff --git a/push/src/main/java/cn/org/bjca/trust/push/message/bean/UnknownMessage.kt b/push/src/main/java/cn/org/bjca/trust/push/message/bean/UnknownMessage.kt new file mode 100644 index 0000000..3646768 --- /dev/null +++ b/push/src/main/java/cn/org/bjca/trust/push/message/bean/UnknownMessage.kt @@ -0,0 +1,32 @@ +package cn.org.bjca.trust.push.message.bean + +import cn.org.bjca.trust.push.common.LogHelper +import cn.org.bjca.trust.push.enums.MsgType +import cn.org.bjca.trust.push.message.msg.Message +import cn.org.bjca.trust.push.message.msg.SendMessage +import org.json.JSONException +import org.json.JSONObject + +class UnknownMessage : Message() { + var unkonown: String? = null + + init { + this.msgType = MsgType.UNKNOWN + } + + override fun parse(type: MsgType, sendMessage: SendMessage) { + super.parse(type, sendMessage) + this.unkonown = sendMessage.message + } + + override fun createContentJsonStr(): String { + + val json = JSONObject() + try { + json.put("unkonown", this.unkonown) + } catch (e: JSONException) { + LogHelper.e("消息组装失败", e) + } + return json.toString() + } +} \ No newline at end of file diff --git a/push/src/main/java/cn/org/bjca/trust/push/message/callback/CallbackListener.kt b/push/src/main/java/cn/org/bjca/trust/push/message/callback/CallbackListener.kt index 36de2a6..4674d36 100644 --- a/push/src/main/java/cn/org/bjca/trust/push/message/callback/CallbackListener.kt +++ b/push/src/main/java/cn/org/bjca/trust/push/message/callback/CallbackListener.kt @@ -2,6 +2,7 @@ package cn.org.bjca.trust.push.message.callback import cn.org.bjca.trust.push.enums.ConnAckReturnCode import cn.org.bjca.trust.push.enums.OsType +import cn.org.bjca.trust.push.message.msg.Message import cn.org.bjca.trust.push.message.msg.SendMessage interface CallbackListener { @@ -12,7 +13,7 @@ interface CallbackListener { fun sendError(msg: SendMessage) // 消息到达 - fun messageArrived(msg: List) + fun messageArrived(msg: Message) // 连接成功 fun connected() diff --git a/push/src/main/java/cn/org/bjca/trust/push/message/client/ImClient.kt b/push/src/main/java/cn/org/bjca/trust/push/message/client/ImClient.kt index a7c126a..ee232ab 100644 --- a/push/src/main/java/cn/org/bjca/trust/push/message/client/ImClient.kt +++ b/push/src/main/java/cn/org/bjca/trust/push/message/client/ImClient.kt @@ -2,8 +2,10 @@ package cn.org.bjca.trust.push.message.client import android.content.Context import cn.org.bjca.trust.push.common.LogHelper +import cn.org.bjca.trust.push.common.MessageHelper import cn.org.bjca.trust.push.common.json.GsonImplHelp import cn.org.bjca.trust.push.enums.ConnAckReturnCode +import cn.org.bjca.trust.push.enums.MsgType import cn.org.bjca.trust.push.kit.ImClientInterface import cn.org.bjca.trust.push.message.msg.SendMessage import org.eclipse.paho.client.mqttv3.* @@ -89,11 +91,14 @@ class ImClient : ImClientInterface { } override fun messageArrived(topic: String?, message: MqttMessage) { - LogHelper.e( - "----------IM收到消息-------------${topic}::${ - String(message.payload, Charsets.UTF_8) - }" - ) + val sendMessage = GsonImplHelp.get() + .toObject(String(message.payload, Charsets.UTF_8), SendMessage::class.java) + MessageHelper.parseMessage( + MsgType.getMsgType(sendMessage.messageType), + sendMessage + )?.also { + connectOptions.callback?.messageArrived(it) + } } override fun deliveryComplete(token: IMqttDeliveryToken?) { @@ -147,6 +152,10 @@ class ImClient : ImClientInterface { } override fun sendMessage(msg: SendMessage) { + if (!isConnect()) { + connectOptions.callback?.sendError(msg) + return + } try { mqttSendClient.publish( "server", diff --git a/push/src/main/java/cn/org/bjca/trust/push/message/msg/Message.kt b/push/src/main/java/cn/org/bjca/trust/push/message/msg/Message.kt index eabc785..b7cfb48 100644 --- a/push/src/main/java/cn/org/bjca/trust/push/message/msg/Message.kt +++ b/push/src/main/java/cn/org/bjca/trust/push/message/msg/Message.kt @@ -23,5 +23,36 @@ abstract class Message { this.target = sendMessage.target this.tenantNo = sendMessage.tenantNo } + abstract fun createContentJsonStr(): String + + + override fun toString(): String { + val field = this.javaClass.declaredFields + val sb = StringBuffer() + sb.append("id: $messageId\n") + sb.append("from: $fromClientId\n") + sb.append("to: $toClientId\n") + sb.append("type: $msgType\n") + sb.append("timestamp: $timestamp\n") +// sb.append("parseError" + ": " + this.isParseError() + "|") + var i = 0 + while (i < field.size && field.size > 0) { + field[i].isAccessible = true + try { + sb.append( + field[i].name + ": " + + (field[i][this]?.toString() ?: "--") + "\n" + ) + } catch (e: IllegalArgumentException) { + e.printStackTrace() + } catch (e: IllegalAccessException) { + e.printStackTrace() + } catch (e: Exception) { + e.printStackTrace() + } + i++ + } + return sb.toString() + } } \ No newline at end of file