@@ -65,7 +65,7 @@ dependencies { | |||
androidTestImplementation 'androidx.test.ext:junit:1.1.3' | |||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' | |||
implementation 'com.xuqm.android:base:0.0.2' | |||
implementation 'com.xuqm.android:base:0.0.5' | |||
// implementation 'cn.org.bjca.trus:push:0.0.1.011' | |||
implementation project(path: ':push') | |||
} |
@@ -9,13 +9,13 @@ | |||
android:fullBackupContent="@xml/backup_rules" | |||
android:icon="@mipmap/ic_launcher" | |||
android:label="@string/app_name" | |||
android:usesCleartextTraffic="true" | |||
android:roundIcon="@mipmap/ic_launcher_round" | |||
android:supportsRtl="true" | |||
android:theme="@style/Theme.PushDemo" | |||
android:usesCleartextTraffic="true" | |||
tools:targetApi="31"> | |||
<activity | |||
android:name=".MainActivity" | |||
android:name=".LoginActivity" | |||
android:exported="true"> | |||
<intent-filter> | |||
<action android:name="android.intent.action.MAIN" /> | |||
@@ -27,6 +27,9 @@ | |||
android:name="android.app.lib_name" | |||
android:value="" /> | |||
</activity> | |||
<activity | |||
android:name=".MainActivity" | |||
android:exported="true"/> | |||
</application> | |||
</manifest> |
@@ -1,6 +1,10 @@ | |||
package cn.org.bjca.trust | |||
import cn.org.bjca.trust.push.PushSdk | |||
import cn.org.bjca.trust.push.common.LogHelper | |||
import cn.org.bjca.trust.push.enums.OsType | |||
import cn.org.bjca.trust.push.message.callback.CallbackListener | |||
import cn.org.bjca.trust.push.message.msg.Message | |||
import com.xuqm.base.App | |||
import com.xuqm.base.di.manager.HttpManager | |||
@@ -9,5 +13,39 @@ class Myapplication : App() { | |||
super.onCreate() | |||
LogHelper.e("+++++++++++++++Application") | |||
appComponent = HttpManager.getAppComponent(""); | |||
PushSdk.instance.setMsgCallback(object : CallbackListener { | |||
override fun sendComplete(msg: Message) { | |||
LogHelper.d("------发送消息完成------") | |||
} | |||
override fun sendError(code: String, msg: Message) { | |||
LogHelper.d("消息发送失败::${code}") | |||
} | |||
override fun messageArrived(msg: Message) { | |||
} | |||
override fun connected() { | |||
LogHelper.d("------im连接成功------") | |||
} | |||
override fun connectionKicked(var1: OsType) { | |||
LogHelper.d("------其它设备登录::${var1}------") | |||
} | |||
override fun connectError(code: String) { | |||
LogHelper.d("im连接失败") | |||
} | |||
override fun connectionLost() { | |||
LogHelper.d("------im连接丢失,正在重连...------") | |||
} | |||
override fun exceptionCause(var1: Throwable) { | |||
LogHelper.e("------im出现错误------", var1) | |||
} | |||
}) | |||
} | |||
} |
@@ -0,0 +1,35 @@ | |||
package cn.org.bjca.trust.pushdemo | |||
import android.content.Intent | |||
import android.os.Bundle | |||
import cn.org.bjca.trust.push.PushSdk | |||
import cn.org.bjca.trust.pushdemo.databinding.ActivityLoginBinding | |||
import com.xuqm.base.dialog.loading.LoadingDialog | |||
import com.xuqm.base.extensions.showMessage | |||
import com.xuqm.base.ui.BaseActivity | |||
import kotlinx.coroutines.CoroutineScope | |||
import kotlinx.coroutines.Dispatchers | |||
import kotlinx.coroutines.delay | |||
import kotlinx.coroutines.launch | |||
class LoginActivity : BaseActivity<ActivityLoginBinding>() { | |||
override fun showStatus(): Int = R.color.purple_700 | |||
override fun getLayoutId(): Int = R.layout.activity_login | |||
override fun initView(savedInstanceState: Bundle?) { | |||
super.initView(savedInstanceState) | |||
binding.button.setOnClickListener { | |||
if (binding.username.text.isNotEmpty()) { | |||
LoadingDialog.showDialog("正在登录,请稍候···") | |||
CoroutineScope(Dispatchers.IO).launch { | |||
delay(2000L) | |||
LoadingDialog.dismissDialog() | |||
PushSdk.instance.register(binding.username.text.toString()) | |||
startActivity(Intent(mContext, MainActivity::class.java)) | |||
} | |||
} | |||
else "请输入用户名".showMessage() | |||
} | |||
} | |||
} |
@@ -1,9 +1,17 @@ | |||
package cn.org.bjca.trust.pushdemo | |||
import android.os.Bundle | |||
import android.provider.MediaStore | |||
import androidx.activity.result.contract.ActivityResultContracts | |||
import cn.org.bjca.trust.push.PushSdk | |||
import cn.org.bjca.trust.push.common.GraphicHelper | |||
import cn.org.bjca.trust.push.common.LogHelper | |||
import cn.org.bjca.trust.push.common.MessageHelper | |||
import cn.org.bjca.trust.push.common.SendMessageHelper | |||
import cn.org.bjca.trust.push.enums.MsgType | |||
import cn.org.bjca.trust.push.message.bean.PictureMessage | |||
import cn.org.bjca.trust.pushdemo.databinding.ActivityMainBinding | |||
import com.xuqm.base.extensions.loge | |||
import com.xuqm.base.ui.BaseActivity | |||
class MainActivity : BaseActivity<ActivityMainBinding>() { | |||
@@ -15,10 +23,26 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { | |||
super.initView(savedInstanceState) | |||
PushSdk.instance.register("xuqinmin") | |||
val r = registerForActivityResult(ActivityResultContracts.GetContent()) { | |||
it.loge() | |||
SendMessageHelper.sendImageMessage( | |||
"xuqinmin", MediaStore.Images.Media.getBitmap( | |||
contentResolver, it | |||
) | |||
) | |||
} | |||
binding.register.setOnClickListener { | |||
val m = MessageHelper.getMessageForPage(1, 10) | |||
LogHelper.e(m[0]) | |||
if (m[0].msgType == MsgType.Image) { | |||
binding.iv.setImageBitmap(GraphicHelper.base64ToBitmap((m[0] as PictureMessage).thumbnail)) | |||
} | |||
} | |||
binding.send.setOnClickListener { | |||
SendMessageHelper.sendTextMessage("xuqinmin", "你好啊${System.currentTimeMillis()}") | |||
// SendMessageHelper.sendTextMessage("xuqinmin", "hello${System.currentTimeMillis()}") | |||
r.launch("image/*") | |||
} | |||
} | |||
@@ -0,0 +1,43 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<layout> | |||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||
xmlns:app="http://schemas.android.com/apk/res-auto" | |||
xmlns:tools="http://schemas.android.com/tools" | |||
android:layout_width="match_parent" | |||
android:layout_height="match_parent" | |||
android:paddingHorizontal="25dp" | |||
tools:context=".LoginActivity"> | |||
<EditText | |||
android:id="@+id/username" | |||
android:layout_width="match_parent" | |||
android:layout_height="68dp" | |||
android:text="xuqinmin" | |||
android:layout_marginBottom="25dp" | |||
android:hint="请输入用户名" | |||
app:layout_constraintBottom_toTopOf="@+id/pwd" | |||
app:layout_constraintEnd_toEndOf="parent" | |||
app:layout_constraintStart_toStartOf="parent" /> | |||
<EditText | |||
android:id="@+id/pwd" | |||
android:layout_width="match_parent" | |||
android:layout_height="68dp" | |||
android:hint="请输入密码" | |||
app:layout_constraintBottom_toBottomOf="parent" | |||
app:layout_constraintEnd_toEndOf="parent" | |||
app:layout_constraintStart_toStartOf="parent" | |||
app:layout_constraintTop_toTopOf="parent" /> | |||
<Button | |||
android:id="@+id/button" | |||
android:layout_width="match_parent" | |||
android:layout_height="68dp" | |||
android:layout_marginTop="35dp" | |||
android:text="登录" | |||
app:layout_constraintEnd_toEndOf="parent" | |||
app:layout_constraintStart_toStartOf="parent" | |||
app:layout_constraintTop_toBottomOf="@+id/pwd" /> | |||
</androidx.constraintlayout.widget.ConstraintLayout> | |||
</layout> |
@@ -29,6 +29,15 @@ | |||
app:layout_constraintStart_toStartOf="parent" | |||
app:layout_constraintTop_toTopOf="parent" | |||
app:layout_constraintVertical_bias="0.188" /> | |||
<ImageView | |||
android:layout_width="200dp" | |||
android:layout_height="200dp" | |||
android:id="@+id/iv" | |||
app:layout_constraintBottom_toBottomOf="parent" | |||
app:layout_constraintStart_toStartOf="parent" | |||
app:layout_constraintEnd_toEndOf="parent" | |||
app:layout_constraintTop_toBottomOf="@+id/send" | |||
/> | |||
</androidx.constraintlayout.widget.ConstraintLayout> | |||
</layout> |
@@ -19,4 +19,6 @@ object CommonHelper { | |||
} | |||
@JvmStatic | |||
fun generateMessageId(): String = UUID.randomUUID().toString() | |||
} |
@@ -1,5 +1,8 @@ | |||
package cn.org.bjca.trust.push.common | |||
import android.graphics.BitmapFactory | |||
import java.io.File | |||
/** | |||
* 文件相关工具类 | |||
*/ | |||
@@ -8,4 +11,18 @@ object FileHelper { | |||
fun openFile() { | |||
throw Throwable("************************") | |||
} | |||
@JvmStatic | |||
fun isPicture(file: File): Boolean { | |||
if (!file.exists()) { | |||
return false | |||
} | |||
val options = BitmapFactory.Options() | |||
BitmapFactory.decodeFile(file.toString(), options) | |||
options.inJustDecodeBounds = true | |||
return when { | |||
options.outWidth != -1 && options.outHeight != -1 -> true | |||
else -> false | |||
} | |||
} | |||
} |
@@ -0,0 +1,108 @@ | |||
package cn.org.bjca.trust.push.common | |||
import android.graphics.Bitmap | |||
import android.graphics.BitmapFactory | |||
import android.graphics.Matrix | |||
import android.util.Base64 | |||
import java.io.ByteArrayOutputStream | |||
import java.io.IOException | |||
import kotlin.math.sqrt | |||
object GraphicHelper { | |||
/** | |||
* 缩放图片到固定文件大小 | |||
* | |||
* @param bm 需要缩放的图片 | |||
* @param maxSize 目标文件大小,单位:KB | |||
* @return | |||
*/ | |||
@JvmStatic | |||
fun imageZoom(bgimage: Bitmap, maxSize: Double): Bitmap { | |||
// 图片允许最大空间 单位:KB | |||
// 将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大) | |||
var bm = bgimage | |||
val baos = ByteArrayOutputStream() | |||
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos) | |||
val b = baos.toByteArray() | |||
// 将字节换成KB | |||
val mid = (b.size / 1024).toDouble() | |||
// 判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩 | |||
if (mid > maxSize) { | |||
// 获取bitmap大小 是允许最大大小的多少倍 | |||
val i = mid / maxSize | |||
// 开始压缩 此处用到平方根 将宽带和高度压缩掉对应的平方根倍 | |||
// 保持刻度和高度和原bitmap比率一致,压缩后也达到了最大大小占用空间的大小 | |||
bm = zoomImage(bm, bm.width / sqrt(i), bm.height / sqrt(i)) | |||
} | |||
return bm | |||
} | |||
/*** | |||
* 图片的缩放方法 | |||
* | |||
* @param bgimage :源图片资源 | |||
* @param newWidth :缩放后宽度 | |||
* @param newHeight :缩放后高度 | |||
* @return | |||
*/ | |||
@JvmStatic | |||
fun zoomImage(bgimage: Bitmap, newWidth: Double, newHeight: Double): Bitmap { | |||
// 获取这个图片的宽和高 | |||
val width = bgimage.width.toFloat() | |||
val height = bgimage.height.toFloat() | |||
// 创建操作图片用的matrix对象 | |||
val matrix = Matrix() | |||
// 计算宽高缩放率 | |||
val scaleWidth = newWidth.toFloat() / width | |||
val scaleHeight = newHeight.toFloat() / height | |||
// 缩放图片动作 | |||
matrix.postScale(scaleWidth, scaleHeight) | |||
return Bitmap.createBitmap(bgimage, 0, 0, width.toInt(), height.toInt(), matrix, true) | |||
} | |||
/** | |||
* bitmap转为base64 | |||
* | |||
* @param bitmap | |||
* @return | |||
*/ | |||
@JvmStatic | |||
fun bitmapToBase64(bitmap: Bitmap): String? { | |||
var result: String? = null | |||
var baos: ByteArrayOutputStream? = null | |||
try { | |||
baos = ByteArrayOutputStream() | |||
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos) | |||
baos.flush() | |||
baos.close() | |||
val bitmapBytes = baos.toByteArray() | |||
result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT) | |||
} catch (e: IOException) { | |||
e.printStackTrace() | |||
} finally { | |||
try { | |||
if (baos != null) { | |||
baos.flush() | |||
baos.close() | |||
} | |||
} catch (e: IOException) { | |||
e.printStackTrace() | |||
} | |||
} | |||
return result | |||
} | |||
/** | |||
* base64转为bitmap | |||
* | |||
* @param base64Data | |||
* @return | |||
*/ | |||
@JvmStatic | |||
fun base64ToBitmap(base64Data: String?): Bitmap? { | |||
val bytes = Base64.decode(base64Data, Base64.DEFAULT) | |||
return BitmapFactory.decodeByteArray(bytes, 0, bytes.size) | |||
} | |||
} |
@@ -11,6 +11,15 @@ import org.json.JSONException | |||
object MessageHelper { | |||
@JvmStatic | |||
fun getMessage(): List<SzyxMessage> = DbHelper.getDataBase().messageDao().getAll() | |||
@JvmStatic | |||
fun getMessageForPage(start: Int, limit: Int): List<Message> = | |||
DbHelper.getDataBase().messageDao().getMessageForPage(start, limit).map { | |||
parseMessage(it)?:UnknownMessage() | |||
} | |||
@JvmStatic | |||
fun parseMessage(sendMessage: SendMessage): Message? { | |||
val msgType = MsgType.getMsgType(sendMessage.messageType) | |||
@@ -1,5 +1,7 @@ | |||
package cn.org.bjca.trust.push.common | |||
import android.graphics.Bitmap | |||
import android.graphics.BitmapFactory | |||
import cn.org.bjca.trust.push.BuildConfig | |||
import cn.org.bjca.trust.push.db.DbHelper | |||
import cn.org.bjca.trust.push.message.ImManager | |||
@@ -7,10 +9,10 @@ import cn.org.bjca.trust.push.message.bean.* | |||
import cn.org.bjca.trust.push.message.msg.Message | |||
import cn.org.bjca.trust.push.message.msg.SendMessage | |||
import java.io.File | |||
import java.net.URI | |||
object SendMessageHelper { | |||
private fun sendMessage(message: Message) { | |||
LogHelper.d("------app端调用发送消息-----") | |||
val sendMessage = SendMessage() | |||
sendMessage.messageId = message.messageId ?: CommonHelper.generateMessageId() | |||
sendMessage.timestamp = System.currentTimeMillis() | |||
@@ -31,8 +33,43 @@ object SendMessageHelper { | |||
@JvmStatic | |||
fun sendImageMessage( | |||
toUserId: String, | |||
uri: URI | |||
) { | |||
sendImageMessage(toUserId, File(uri)) | |||
} | |||
@JvmStatic | |||
fun sendImageMessage( | |||
toUserId: String, | |||
file: File | |||
) { | |||
if (!FileHelper.isPicture(file)) throw Throwable("不是图片文件") | |||
val img = GraphicHelper.imageZoom(BitmapFactory.decodeFile(file.absolutePath), 2048.0) | |||
GraphicHelper.bitmapToBase64(img)?.let { | |||
sendImageMessage( | |||
toUserId, | |||
"dsadsasdsa", | |||
it, | |||
img.width.toDouble(), | |||
img.height.toDouble() | |||
) | |||
} | |||
} | |||
@JvmStatic | |||
fun sendImageMessage( | |||
toUserId: String, | |||
bitmap: Bitmap | |||
) { | |||
val img = GraphicHelper.imageZoom(bitmap, 200.0) | |||
GraphicHelper.bitmapToBase64(img)?.let { | |||
sendImageMessage( | |||
toUserId, | |||
"dsadsasdsa", | |||
it, | |||
img.width.toDouble(), | |||
img.height.toDouble() | |||
) | |||
} | |||
} | |||
@JvmStatic | |||
@@ -40,12 +77,11 @@ object SendMessageHelper { | |||
toUserId: String, | |||
imageStorageId: String, | |||
thumbnail: String, | |||
thumbnailWidth: Int, | |||
thumbnailHeight: Int | |||
thumbnailWidth: Double, | |||
thumbnailHeight: Double | |||
) { | |||
sendMessage( | |||
PictureMessage( | |||
).apply { | |||
PictureMessage().apply { | |||
toClientId = toUserId | |||
this.imageStorageId = imageStorageId | |||
this.thumbnail = thumbnail | |||
@@ -7,6 +7,9 @@ interface MessageDao { | |||
@Query("SELECT * FROM message") | |||
fun getAll(): List<SzyxMessage> | |||
@Query("SELECT * FROM message ORDER BY p_id DESC LIMIT (:start-1)*:limit,:limit") | |||
fun getMessageForPage(start:Int, limit:Int): List<SzyxMessage> | |||
@Query("SELECT * FROM message WHERE message_id = :msgId") | |||
fun getMessage(msgId: String): List<SzyxMessage> | |||
@@ -9,8 +9,8 @@ enum class MsgType(val value: Int) { | |||
Video(5) /* 视频 */, | |||
File(6) /* 文件 */, | |||
At(7) /* @我 */, | |||
Log(8) /* 日志 */, | |||
Other(10010), /* 自定义消息 */ | |||
Other(8) /* 自定义消息 */, | |||
Log(10010), /* 日志 */ | |||
/** | |||
* pc 登陆 end | |||
*/ | |||
@@ -1,5 +1,4 @@ | |||
package com.xuqm.base.extensions | |||
package cn.org.bjca.trust.push.extensions | |||
import android.app.Activity | |||
import android.content.Context | |||
import android.view.inputmethod.InputMethodManager | |||
@@ -13,6 +13,7 @@ import cn.org.bjca.trust.push.message.client.ImConnectOptions | |||
class PushSdkManager : SdkInterface { | |||
private lateinit var imConnectOptions: ImConnectOptions | |||
private lateinit var callback: CallbackListener | |||
override fun register(userId: String) { | |||
registerIm(userId) | |||
@@ -56,7 +57,8 @@ class PushSdkManager : SdkInterface { | |||
BuildConfig.versionName | |||
) | |||
} | |||
imConnectOptions.callback = ImCallback() | |||
if (::callback.isInitialized) this.imConnectOptions.callback = callback | |||
else imConnectOptions.callback = ImCallback() | |||
ImManager.instance.connect(imConnectOptions) | |||
} | |||
@@ -66,6 +68,7 @@ class PushSdkManager : SdkInterface { | |||
override fun setMsgCallback(callback: CallbackListener) { | |||
imConnectOptions.callback = callback | |||
this.callback = callback | |||
if (::imConnectOptions.isInitialized) this.imConnectOptions.callback = callback | |||
} | |||
} |
@@ -10,8 +10,8 @@ import org.json.JSONObject | |||
class PictureMessage : Message() { | |||
var imageStorageId: String? = null | |||
var thumbnail: String? = null | |||
var thumbnailWidth: Int? = null | |||
var thumbnailHeight: Int? = null | |||
var thumbnailWidth: Double? = null | |||
var thumbnailHeight: Double? = null | |||
init { | |||
this.msgType = MsgType.Image | |||
@@ -23,9 +23,9 @@ class PictureMessage : Message() { | |||
val json = sendMessage.message?.let { JSONObject(it) } | |||
if (json != null) { | |||
this.imageStorageId = json.optString("imageStorageId") | |||
this.thumbnail = json.optString("imageStorageId") | |||
this.thumbnailWidth = json.optInt("imageStorageId") | |||
this.thumbnailHeight = json.optInt("imageStorageId") | |||
this.thumbnail = json.optString("thumbnail") | |||
this.thumbnailWidth = json.optDouble("thumbnailWidth") | |||
this.thumbnailHeight = json.optDouble("thumbnailHeight") | |||
} | |||
} catch (e: Exception) { | |||
LogHelper.e("消息组装失败", e) | |||
@@ -35,6 +35,7 @@ class ImClient : ImClientInterface { | |||
connectOptions = mImConnectOptions | |||
init() | |||
mConnect() | |||
startReconnect() | |||
} | |||
private fun mConnect() { | |||
@@ -46,7 +47,11 @@ class ImClient : ImClientInterface { | |||
LogHelper.d("------------开始重连::mqttArrivedClient--------------") | |||
mqttArrivedClient.connect(options) | |||
} | |||
} catch (e: Exception) { | |||
} catch (e: MqttSecurityException) { | |||
LogHelper.e("--------", e) | |||
connectOptions.callback?.connectError(ERROR_CONNECTED) | |||
} catch (e: MqttException) { | |||
LogHelper.e("--------", e) | |||
connectOptions.callback?.connectError(ERROR_CONNECTED) | |||
} | |||
isConnecting = false | |||
@@ -82,7 +87,6 @@ class ImClient : ImClientInterface { | |||
override fun connectComplete(reconnect: Boolean, serverURI: String) { | |||
mqttArrivedClient.subscribe(connectOptions.clientId, 2) | |||
sendConnectMessage() | |||
startReconnect() | |||
} | |||
}) | |||
} | |||
@@ -101,22 +105,25 @@ class ImClient : ImClientInterface { | |||
LogHelper.d("------新消息------\n${str}") | |||
val sendMessage = GsonImplHelp.get() | |||
.toObject(String(payload, Charsets.UTF_8), SendMessage::class.java) | |||
if (sendMessage.messageId.isNullOrEmpty()) return | |||
sendMessage.messageId?.let { ackMessage(it) } | |||
val his = DbHelper.getDataBase().messageDao().getMessage(sendMessage.messageId!!) | |||
if (his.isNotEmpty()) return | |||
// 存表 | |||
DbHelper.getDataBase().messageDao().insertAll( | |||
SzyxMessage( | |||
sendMessage.messageId, | |||
sendMessage.timestamp, | |||
sendMessage.fromClientId, | |||
sendMessage.toClientId, | |||
sendMessage.target, | |||
sendMessage.messageType, | |||
sendMessage.message, | |||
sendMessage.tenantNo, | |||
1 | |||
if (sendMessage.messageType < 100) | |||
DbHelper.getDataBase().messageDao().insertAll( | |||
SzyxMessage( | |||
sendMessage.messageId, | |||
sendMessage.timestamp, | |||
sendMessage.fromClientId, | |||
sendMessage.toClientId, | |||
sendMessage.target, | |||
sendMessage.messageType, | |||
sendMessage.message, | |||
sendMessage.tenantNo, | |||
1 | |||
) | |||
) | |||
) | |||
// 回复服务端收到 | |||
sendMessage.messageId?.let { ackMessage(it) } | |||
// 通知app新消息到达 | |||
MessageHelper.parseMessage(sendMessage)?.also { | |||
connectOptions.callback?.messageArrived(it) | |||
@@ -159,7 +166,7 @@ class ImClient : ImClientInterface { | |||
private lateinit var pingScheduler: ScheduledExecutorService | |||
// ping和断线重连 | |||
fun startReconnect() { | |||
private fun startReconnect() { | |||
if (!::scheduler.isInitialized) { | |||
scheduler = Executors.newSingleThreadScheduledExecutor() | |||
scheduler.scheduleAtFixedRate({ | |||
@@ -207,19 +214,20 @@ class ImClient : ImClientInterface { | |||
msg.fromClientId = connectOptions.clientId | |||
msg.target = connectOptions.clientId | |||
DbHelper.getDataBase().messageDao().insertAll( | |||
SzyxMessage( | |||
msg.messageId, | |||
msg.timestamp, | |||
msg.fromClientId, | |||
msg.toClientId, | |||
msg.target, | |||
msg.messageType, | |||
msg.message, | |||
msg.tenantNo, | |||
0 | |||
if (msg.messageType < 100) | |||
DbHelper.getDataBase().messageDao().insertAll( | |||
SzyxMessage( | |||
msg.messageId, | |||
msg.timestamp, | |||
msg.fromClientId, | |||
msg.toClientId, | |||
msg.target, | |||
msg.messageType, | |||
msg.message, | |||
msg.tenantNo, | |||
0 | |||
) | |||
) | |||
) | |||
if (!isConnect()) { | |||
msg.messageId?.let { MessageHelper.changeStatus(it, false) } | |||
MessageHelper.parseMessage(msg)?.let { | |||
@@ -230,8 +238,10 @@ class ImClient : ImClientInterface { | |||
return | |||
} | |||
try { | |||
val m = GsonImplHelp.get().toJson(msg) | |||
LogHelper.d("------app端调用发送消息-----\t${m}") | |||
mqttArrivedClient.publish( | |||
"server", GsonImplHelp.get().toJson(msg).toByteArray(Charsets.UTF_8), 2, true | |||
"server", m.toByteArray(Charsets.UTF_8), 2, true | |||
) | |||
handler.sendMessageDelayed(Message().apply { | |||
what = 10086 | |||