Browse Source

消息收发

master
xuqm 1 year ago
parent
commit
315aa7925e
32 changed files with 694 additions and 23 deletions
  1. +4
    -3
      app/build.gradle
  2. +5
    -2
      app/src/main/java/cn/org/bjca/trust/pushdemo/MainActivity.kt
  3. +15
    -3
      app/src/main/res/layout/activity_main.xml
  4. +20
    -15
      push/build.gradle
  5. +3
    -0
      push/src/main/AndroidManifest.xml
  6. +4
    -0
      push/src/main/java/cn/org/bjca/trust/push/common/CommonHelper.kt
  7. +22
    -0
      push/src/main/java/cn/org/bjca/trust/push/common/DeviceHelper.kt
  8. +54
    -0
      push/src/main/java/cn/org/bjca/trust/push/common/json/GsonImplHelp.java
  9. +29
    -0
      push/src/main/java/cn/org/bjca/trust/push/common/json/Json.java
  10. +15
    -0
      push/src/main/java/cn/org/bjca/trust/push/enums/ConnAckReturnCode.kt
  11. +16
    -0
      push/src/main/java/cn/org/bjca/trust/push/enums/DeviceType.kt
  12. +6
    -0
      push/src/main/java/cn/org/bjca/trust/push/enums/MsgType.kt
  13. +17
    -0
      push/src/main/java/cn/org/bjca/trust/push/enums/OsType.kt
  14. +12
    -0
      push/src/main/java/cn/org/bjca/trust/push/enums/PacketType.kt
  15. +7
    -0
      push/src/main/java/cn/org/bjca/trust/push/enums/QRCodeType.kt
  16. +13
    -0
      push/src/main/java/cn/org/bjca/trust/push/kit/ImClientInterface.kt
  17. +7
    -0
      push/src/main/java/cn/org/bjca/trust/push/kit/SdkInterface.kt
  18. +62
    -0
      push/src/main/java/cn/org/bjca/trust/push/manager/PushSdkManager.kt
  19. +41
    -0
      push/src/main/java/cn/org/bjca/trust/push/message/ImCallback.kt
  20. +15
    -0
      push/src/main/java/cn/org/bjca/trust/push/message/ImManager.kt
  21. +42
    -0
      push/src/main/java/cn/org/bjca/trust/push/message/bean/TextMessage.kt
  22. +31
    -0
      push/src/main/java/cn/org/bjca/trust/push/message/callback/CallbackListener.kt
  23. +35
    -0
      push/src/main/java/cn/org/bjca/trust/push/message/callback/MqttCallback.kt
  24. +5
    -0
      push/src/main/java/cn/org/bjca/trust/push/message/callback/PingService.kt
  25. +83
    -0
      push/src/main/java/cn/org/bjca/trust/push/message/client/ImClient.kt
  26. +25
    -0
      push/src/main/java/cn/org/bjca/trust/push/message/client/ImConnectOptions.kt
  27. +33
    -0
      push/src/main/java/cn/org/bjca/trust/push/message/msg/BaseMessage.kt
  28. +19
    -0
      push/src/main/java/cn/org/bjca/trust/push/message/msg/ConnectMessage.kt
  29. +8
    -0
      push/src/main/java/cn/org/bjca/trust/push/message/msg/DisconnectMessage.kt
  30. +27
    -0
      push/src/main/java/cn/org/bjca/trust/push/message/msg/Message.kt
  31. +16
    -0
      push/src/main/java/cn/org/bjca/trust/push/message/msg/SendMessage.kt
  32. +3
    -0
      settings.gradle

+ 4
- 3
app/build.gradle View File

@@ -46,14 +46,15 @@ android {
} }
} }
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
} }
kotlinOptions { kotlinOptions {
jvmTarget = '1.8'
jvmTarget = '11'
} }
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs',includes: ['*.jar','*.aar'])


implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.appcompat:appcompat:1.4.1'


+ 5
- 2
app/src/main/java/cn/org/bjca/trust/pushdemo/MainActivity.kt View File

@@ -9,8 +9,11 @@ class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
findViewById<TextView>(R.id.tv).setOnClickListener {
PushSdk.instance.register(this, "xuqm")
findViewById<TextView>(R.id.register).setOnClickListener {
PushSdk.instance.register(this, "xuqinmin")
}
findViewById<TextView>(R.id.send).setOnClickListener {
PushSdk.instance.sendTextMessage("xuqinmin", "你好啊")
} }
} }



+ 15
- 3
app/src/main/res/layout/activity_main.xml View File

@@ -7,13 +7,25 @@
tools:context=".MainActivity"> tools:context=".MainActivity">


<TextView <TextView
android:id="@+id/tv"
android:id="@+id/register"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Hello World!"
android:text="注册im服务"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.08" />

<TextView
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送消息"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.188" />


</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

+ 20
- 15
push/build.gradle View File

@@ -42,26 +42,22 @@ android {
} }
} }
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
} }
kotlinOptions { kotlinOptions {
jvmTarget = '1.8'
jvmTarget = '11'
} }

}
repositories{
flatDir {
dirs 'libs'
}
}
repositories {
flatDir {
dirs 'libs'
publishing {
multipleVariants {
withSourcesJar()
withJavadocJar()
allVariants()
}
} }
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs',includes: ['*.jar','*.aar'])
compileOnly fileTree(dir: 'libs',includes: ['*.jar','*.aar'])
implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0' implementation 'com.google.android.material:material:1.5.0'
@@ -74,6 +70,13 @@ dependencies {
kapt("androidx.room:room-compiler:2.5.0") kapt("androidx.room:room-compiler:2.5.0")
// implementation("androidx.room:room-ktx:2.5.0") // implementation("androidx.room:room-ktx:2.5.0")


//添加mqtt 2个包
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

//gson
implementation 'com.google.code.gson:gson:2.9.0'

// 小米推送 // 小米推送
// implementation (name: 'MiPush_SDK_Client_5_3_0-C_3rd', ext: 'aar') // implementation (name: 'MiPush_SDK_Client_5_3_0-C_3rd', ext: 'aar')


@@ -81,6 +84,8 @@ dependencies {
implementation 'com.huawei.hms:push:6.9.0.300' implementation 'com.huawei.hms:push:6.9.0.300'






} }
// 这个是把源码打入aar包中的任务 // 这个是把源码打入aar包中的任务
task sourceJar(type: Jar) { task sourceJar(type: Jar) {
@@ -101,7 +106,7 @@ afterEvaluate {
// 这里除了有debug 还有release // 这里除了有debug 还有release
from components.release from components.release
// 运行任务,把源码打进去 // 运行任务,把源码打进去
artifact sourceJar
// artifact sourceJar
} }
} }
// 添加仓库地址 // 添加仓库地址


+ 3
- 0
push/src/main/AndroidManifest.xml View File

@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 网络相关权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


<application> <application>
<provider <provider


+ 4
- 0
push/src/main/java/cn/org/bjca/trust/push/common/CommonHelper.kt View File

@@ -1,5 +1,7 @@
package cn.org.bjca.trust.push.common package cn.org.bjca.trust.push.common


import java.util.*

object CommonHelper { object CommonHelper {
@JvmStatic @JvmStatic
fun anyToString(value: Any?): String { fun anyToString(value: Any?): String {
@@ -15,4 +17,6 @@ object CommonHelper {
} }
} }
} }
@JvmStatic
fun generateMessageId(): String = UUID.randomUUID().toString()
} }

+ 22
- 0
push/src/main/java/cn/org/bjca/trust/push/common/DeviceHelper.kt View File

@@ -0,0 +1,22 @@
package cn.org.bjca.trust.push.common

import cn.org.bjca.trust.push.db.DbHelper

object DeviceHelper {
@JvmStatic
fun getDeviceId(): String {
val device = DbHelper.getDataBase().deviceDao().getAll()
if (device.isEmpty()) {
throw Throwable("获取设备信息失败")
}
return device[0].device
}
@JvmStatic
fun getManufacturer(): String {
val device = DbHelper.getDataBase().deviceDao().getAll()
if (device.isEmpty()) {
throw Throwable("获取设备信息失败")
}
return device[0].manufacturer
}
}

+ 54
- 0
push/src/main/java/cn/org/bjca/trust/push/common/json/GsonImplHelp.java View File

@@ -0,0 +1,54 @@
package cn.org.bjca.trust.push.common.json;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
* Created by xuqm on 2016/6/3.
*/
public class GsonImplHelp extends Json {
private final Gson gson = new Gson();

@Override
public String toJson(Object src) {
return gson.toJson(src);

}

@Override
public <T> T toObject(String json, Class<T> claxx) {
return gson.fromJson(json, claxx);

}

@Override
public <T> T toObject(byte[] bytes, Class<T> claxx) {
return gson.fromJson(new String(bytes), claxx);

}

public <T> List<T> toList(String json, Class<T> clazz) {
JsonArray jsonArray = JsonParser.parseString(json).getAsJsonArray();

List<T> list = new ArrayList<>();
for (JsonElement jsonElement : jsonArray) {
list.add(gson.fromJson(jsonElement, clazz)); //cls
}

return list;


}

public static <T> List<T> stringToArray(String s, Class<T[]> cls) {
T[] array = new Gson().fromJson(s, cls);
return Arrays.asList(array);
}

}

+ 29
- 0
push/src/main/java/cn/org/bjca/trust/push/common/json/Json.java View File

@@ -0,0 +1,29 @@
package cn.org.bjca.trust.push.common.json;

import java.util.List;

/**
* Created by xuqm on 2016/6/3.
*/
public abstract class Json {
private static Json json;

Json() {
}

public static Json get() {
if (json == null) {
json = new GsonImplHelp();
}
return json;
}

public abstract String toJson(Object src);

public abstract <T> T toObject(String json, Class<T> claxx);

public abstract <T> T toObject(byte[] bytes, Class<T> claxx);

public abstract <T> List<T> toList(String json, Class<T> claxx);

}

+ 15
- 0
push/src/main/java/cn/org/bjca/trust/push/enums/ConnAckReturnCode.kt View File

@@ -0,0 +1,15 @@
package cn.org.bjca.trust.push.enums

enum class ConnAckReturnCode(value: Int) {
CONNECTED(1),
VERSION_ERROR(2),
SESSION_KEY_ERROR(3),
OS_ERROR(4),
OS_VER_ERROR(5),
CLIENT_ID_ERROR(6),
DEVICE_ID_ERROR(7),
NOT_AUTHENTICATED(8),
CLIENT_NOT_ALLOCATION_TO_THIS_SERVER(9),
UNKNOWN(-1),
CAN_NOT_CONNECT_TO_SERVER(-2);
}

+ 16
- 0
push/src/main/java/cn/org/bjca/trust/push/enums/DeviceType.kt View File

@@ -0,0 +1,16 @@
package cn.org.bjca.trust.push.enums

enum class DeviceType(val value: Int) {
PHONE(1), PAD(2), PC(3), UNKNOWN(-1);

companion object {
fun getDeviceType(value: Int): DeviceType {
for (item in values()) {
if (item.value == value) {
return item
}
}
return UNKNOWN
}
}
}

+ 6
- 0
push/src/main/java/cn/org/bjca/trust/push/enums/MsgType.kt View File

@@ -0,0 +1,6 @@
package cn.org.bjca.trust.push.enums

enum class MsgType(val value:Int) {
UNKNOWN(-1),
Text(1)
}

+ 17
- 0
push/src/main/java/cn/org/bjca/trust/push/enums/OsType.kt View File

@@ -0,0 +1,17 @@
package cn.org.bjca.trust.push.enums


enum class OsType(val value: Int) {
IOS(1), ANDROID(2), WEB(3), WINDOWS(4), MAC(5), UNKNOWN(-1);

companion object {
fun getOsType(value: Int): OsType {
for (item in values()) {
if (item.value == value) {
return item
}
}
return UNKNOWN
}
}
}

+ 12
- 0
push/src/main/java/cn/org/bjca/trust/push/enums/PacketType.kt View File

@@ -0,0 +1,12 @@
package cn.org.bjca.trust.push.enums

enum class PacketType(value: Int) {
CONNECT(10),
// CONNACK(11),
SEND(20),
// SENDACK(21),
// PINGREQ(30),
// PINGRESP(31),
DISCONNECT(40),
UNKNOWN(-1);
}

+ 7
- 0
push/src/main/java/cn/org/bjca/trust/push/enums/QRCodeType.kt View File

@@ -0,0 +1,7 @@
package cn.org.bjca.trust.push.enums

enum class QRCodeType {
WINDOWS,
WEB,
MAC;
}

+ 13
- 0
push/src/main/java/cn/org/bjca/trust/push/kit/ImClientInterface.kt View File

@@ -0,0 +1,13 @@
package cn.org.bjca.trust.push.kit

import cn.org.bjca.trust.push.message.client.ImConnectOptions
import cn.org.bjca.trust.push.message.msg.SendMessage

interface ImClientInterface {
fun connect(mImConnectOptions: ImConnectOptions)
fun reConnect()
fun disConnect()
fun isConnect(): Boolean
fun isConnecting(): Boolean
fun sendMessage(msg: SendMessage)
}

+ 7
- 0
push/src/main/java/cn/org/bjca/trust/push/kit/SdkInterface.kt View File

@@ -1,6 +1,7 @@
package cn.org.bjca.trust.push.kit package cn.org.bjca.trust.push.kit


import android.content.Context import android.content.Context
import cn.org.bjca.trust.push.message.msg.Message


interface SdkInterface { interface SdkInterface {
/** /**
@@ -8,4 +9,10 @@ interface SdkInterface {
*/ */
fun register(context: Context, userId: String) fun register(context: Context, userId: String)
fun unregister(context: Context, userId: String) fun unregister(context: Context, userId: String)

/**
* 消息相关
*/
fun sendMessage(message: Message)
fun sendTextMessage(toUserId:String, msg: String)
} }

+ 62
- 0
push/src/main/java/cn/org/bjca/trust/push/manager/PushSdkManager.kt View File

@@ -1,15 +1,77 @@
package cn.org.bjca.trust.push.manager package cn.org.bjca.trust.push.manager


import android.content.Context import android.content.Context
import cn.org.bjca.trust.push.BuildConfig
import cn.org.bjca.trust.push.common.CommonHelper
import cn.org.bjca.trust.push.common.DeviceHelper
import cn.org.bjca.trust.push.common.LogHelper
import cn.org.bjca.trust.push.enums.OsType
import cn.org.bjca.trust.push.kit.SdkInterface import cn.org.bjca.trust.push.kit.SdkInterface
import cn.org.bjca.trust.push.message.ImCallback
import cn.org.bjca.trust.push.message.ImManager
import cn.org.bjca.trust.push.message.bean.TextMessage
import cn.org.bjca.trust.push.message.msg.Message
import cn.org.bjca.trust.push.message.msg.SendMessage
import cn.org.bjca.trust.push.message.client.ImConnectOptions
import kotlin.random.Random


class PushSdkManager : SdkInterface { class PushSdkManager : SdkInterface {


lateinit var imConnectOptions: ImConnectOptions

override fun register(context: Context, userId: String) { override fun register(context: Context, userId: String) {
//先关闭已有连接
if (ImManager.instance.isConnect() || ImManager.instance.isConnecting()) {
ImManager.instance.disConnect()
}


if (::imConnectOptions.isInitialized) {
imConnectOptions.clientId = userId
imConnectOptions.host = "192.168.115.173"
imConnectOptions.port = 1883
imConnectOptions.deviceId = DeviceHelper.getDeviceId()
imConnectOptions.token = "token"
imConnectOptions.osType = OsType.ANDROID
imConnectOptions.sdkVersion = BuildConfig.versionName
} else {
imConnectOptions = ImConnectOptions(
"192.168.115.173",
1883,
userId,
DeviceHelper.getDeviceId(),
"token",
OsType.ANDROID,
BuildConfig.versionName
)
}
imConnectOptions.callback = ImCallback()
ImManager.instance.connect(imConnectOptions)
} }


override fun unregister(context: Context, userId: String) { override fun unregister(context: Context, userId: String) {
TODO("Not yet implemented") TODO("Not yet implemented")
} }


override fun sendTextMessage(toUserId:String, msg: String) {

sendMessage(TextMessage().apply {
toClientId = toUserId
text = msg
})
}
override fun sendMessage(message: Message) {
LogHelper.d("------app端调用发送消息-----")
val sendMessage = SendMessage()
sendMessage.messageId = message.messageId?: CommonHelper.generateMessageId()
sendMessage.timestamp = System.currentTimeMillis()
sendMessage.fromClientId = imConnectOptions.clientId
sendMessage.toClientId = message.toClientId
sendMessage.target = imConnectOptions.clientId
sendMessage.messageType = message.msgType.value
sendMessage.message = message.createContentJsonStr()


ImManager.instance.sendMessage(sendMessage)
}
} }

+ 41
- 0
push/src/main/java/cn/org/bjca/trust/push/message/ImCallback.kt View File

@@ -0,0 +1,41 @@
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

class ImCallback : CallbackListener {
override fun sendComplete(var1: List<SendMessage>) {
TODO("Not yet implemented")
}

override fun sendError(msg: SendMessage) {
TODO("Not yet implemented")
}

override fun messageArrived(var1: List<SendMessage>) {
TODO("Not yet implemented")
}

override fun connected() {
LogHelper.d("------im连接成功------")
}

override fun connectionKicked(var1: OsType) {
TODO("Not yet implemented")
}

override fun connectError(var1: ConnAckReturnCode) {
TODO("Not yet implemented")
}

override fun connectionLost() {
TODO("Not yet implemented")
}

override fun exceptionCause(var1: Throwable) {
TODO("Not yet implemented")
}
}

+ 15
- 0
push/src/main/java/cn/org/bjca/trust/push/message/ImManager.kt View File

@@ -0,0 +1,15 @@
package cn.org.bjca.trust.push.message

import cn.org.bjca.trust.push.kit.ImClientInterface
import cn.org.bjca.trust.push.message.client.ImClient

object ImManager {
private lateinit var imClientInterface: ImClientInterface
val instance: ImClientInterface
get() {
if (!::imClientInterface.isInitialized) {
imClientInterface = ImClient()
}
return imClientInterface
}
}

+ 42
- 0
push/src/main/java/cn/org/bjca/trust/push/message/bean/TextMessage.kt View File

@@ -0,0 +1,42 @@
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 TextMessage : Message() {
var text: String? = null

init {
this.msgType = MsgType.Text
}

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) {
this.text = json.getString("text")
}
} catch (e: Exception) {
LogHelper.e("消息组装失败", e)
}
}

override fun createContentJsonStr(): String {

val json = JSONObject()
try {
json.put("text", this.text)
} catch (e: JSONException) {
LogHelper.e("消息组装失败", e)
}
return json.toString()
}
}

+ 31
- 0
push/src/main/java/cn/org/bjca/trust/push/message/callback/CallbackListener.kt View File

@@ -0,0 +1,31 @@
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.SendMessage

interface CallbackListener {
// 发送消息完成
fun sendComplete(msg: List<SendMessage>)

// 发送消息失败
fun sendError(msg: SendMessage)

// 消息到达
fun messageArrived(msg: List<SendMessage>)

// 连接成功
fun connected()

// 踢出消息
fun connectionKicked(var1: OsType)

// im连接失败
fun connectError(var1: ConnAckReturnCode)

// im连接丢失
fun connectionLost()

// 其它异常
fun exceptionCause(var1: Throwable)
}

+ 35
- 0
push/src/main/java/cn/org/bjca/trust/push/message/callback/MqttCallback.kt View File

@@ -0,0 +1,35 @@
package cn.org.bjca.trust.push.message.callback

import cn.org.bjca.trust.push.common.LogHelper
import cn.org.bjca.trust.push.common.json.GsonImplHelp
import cn.org.bjca.trust.push.message.ImManager
import com.xiaomi.push.service.bj.G
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken
import org.eclipse.paho.client.mqttv3.MqttCallback
import org.eclipse.paho.client.mqttv3.MqttMessage
import java.nio.charset.Charset

class MqttCallback(val callback: CallbackListener?) : MqttCallback {
override fun connectionLost(cause: Throwable?) {
callback?.connectionLost()
LogHelper.e("----------IM断开-------------")
LogHelper.e("----------IM开始重连-------------")
ImManager.instance.reConnect()
}

override fun messageArrived(topic: String, message: MqttMessage) {
LogHelper.e(
"----------IM收到消息-------------${topic}::${
String(
message.payload,
Charset.forName("GB2312")
)
}"
)
}

override fun deliveryComplete(token: IMqttDeliveryToken?) {
LogHelper.d("----------IM发送完成-------------${GsonImplHelp.get().toJson(token)}")
// callback?.sendComplete()
}
}

+ 5
- 0
push/src/main/java/cn/org/bjca/trust/push/message/callback/PingService.kt View File

@@ -0,0 +1,5 @@
package cn.org.bjca.trust.push.message.callback

interface PingService {
fun ping()
}

+ 83
- 0
push/src/main/java/cn/org/bjca/trust/push/message/client/ImClient.kt View File

@@ -0,0 +1,83 @@
package cn.org.bjca.trust.push.message.client

import cn.org.bjca.trust.push.common.LogHelper
import cn.org.bjca.trust.push.common.json.GsonImplHelp
import cn.org.bjca.trust.push.enums.ConnAckReturnCode
import cn.org.bjca.trust.push.kit.ImClientInterface
import cn.org.bjca.trust.push.message.callback.MqttCallback
import cn.org.bjca.trust.push.message.msg.SendMessage
import org.eclipse.paho.client.mqttv3.MqttClient
import org.eclipse.paho.client.mqttv3.MqttConnectOptions
import org.eclipse.paho.client.mqttv3.MqttException
import org.eclipse.paho.client.mqttv3.MqttMessage
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence

class ImClient : ImClientInterface {
private lateinit var connectOptions: ImConnectOptions
private lateinit var mqttClient: MqttClient
private lateinit var options: MqttConnectOptions
override fun connect(mImConnectOptions: ImConnectOptions) {
connectOptions = mImConnectOptions
init()
mConnect()
}

private fun mConnect() {
if (isConnect()) return
try {
mqttClient.connect(options)
mqttClient.subscribe(connectOptions.clientId, 2)
connectOptions.callback?.connected()
} catch (e: java.lang.Exception) {
connectOptions.callback?.connectError(ConnAckReturnCode.CONNECTED)
}
}

private fun init() {
if (!::mqttClient.isInitialized) {
mqttClient = MqttClient(
"tcp://${connectOptions.host}:${connectOptions.port}",
connectOptions.clientId,
MemoryPersistence()
)
options = MqttConnectOptions()
options.isCleanSession = true
options.userName = connectOptions.clientId
options.password = "xuqinmin1022".toCharArray()
options.connectionTimeout = connectOptions.connectTimeOutSecond
options.keepAliveInterval = connectOptions.pingInterval
mqttClient.setCallback(MqttCallback(connectOptions.callback))
}
}

override fun reConnect() {
init()
mConnect()
}

override fun disConnect() {
init()
mqttClient.disconnect()
}

override fun isConnect(): Boolean {
return if (::mqttClient.isInitialized) {
mqttClient.isConnected
} else {
false
}
}

override fun isConnecting(): Boolean {
return false
}

override fun sendMessage(msg: SendMessage) {
try {
mqttClient.publish("server", MqttMessage(GsonImplHelp.get().toJson(msg).toByteArray()))
} catch (e: MqttException) {
LogHelper.e("发送消息失败", e)
connectOptions.callback?.sendError(msg)
}
}
}

+ 25
- 0
push/src/main/java/cn/org/bjca/trust/push/message/client/ImConnectOptions.kt View File

@@ -0,0 +1,25 @@
package cn.org.bjca.trust.push.message.client

import cn.org.bjca.trust.push.enums.DeviceType
import cn.org.bjca.trust.push.enums.OsType
import cn.org.bjca.trust.push.enums.QRCodeType
import cn.org.bjca.trust.push.message.callback.CallbackListener
import cn.org.bjca.trust.push.message.callback.PingService


class ImConnectOptions(
var host: String,
var port: Int,
var clientId: String,
var deviceId: String,
var token: String,
var osType: OsType,
var sdkVersion: String
) {
var pingInterval = 20
var timeOut = 60
var connectTimeOutSecond = 30
var callback: CallbackListener? = null
var qrCodeType: QRCodeType? = null
var pingService: PingService? = null
}

+ 33
- 0
push/src/main/java/cn/org/bjca/trust/push/message/msg/BaseMessage.kt View File

@@ -0,0 +1,33 @@
package cn.org.bjca.trust.push.message.msg

import cn.org.bjca.trust.push.enums.PacketType


open class BaseMessage protected constructor(packetType: PacketType) {
private val packetType: PacketType

init {
this.packetType = packetType
}

fun getPacketType(): PacketType {
return packetType
}

open fun getClassz(): Class<*> {
return getClassz(packetType)
}

open fun getClassz(packetType: PacketType): Class<*> {
return when (packetType) {
PacketType.CONNECT -> ConnectMessage::class.java
// PacketType.CONNACK -> ConnAckMessage::class.java
PacketType.SEND -> SendMessage::class.java
// PacketType.SENDACK -> SendAckMessage::class.java
// PacketType.PINGREQ -> PingReqMessage::class.java
// PacketType.PINGRESP -> PingRespMessage::class.java
PacketType.DISCONNECT -> DisconnectMessage::class.java
else -> throw IllegalStateException("协议类型不正确!")
}
}
}

+ 19
- 0
push/src/main/java/cn/org/bjca/trust/push/message/msg/ConnectMessage.kt View File

@@ -0,0 +1,19 @@
package cn.org.bjca.trust.push.message.msg

import cn.org.bjca.trust.push.enums.DeviceType
import cn.org.bjca.trust.push.enums.OsType
import cn.org.bjca.trust.push.enums.PacketType
import cn.org.bjca.trust.push.enums.QRCodeType
import cn.org.bjca.trust.push.message.msg.BaseMessage


class ConnectMessage : BaseMessage(PacketType.CONNECT) {
var sessionKey: String? = null
var osType: OsType? = null
var osVer: String? = null
var deviceType: DeviceType? = null
var token: String? = null
var clientId: String? = null
var deviceId: String? = null
var qrCodeType: QRCodeType? = null
}

+ 8
- 0
push/src/main/java/cn/org/bjca/trust/push/message/msg/DisconnectMessage.kt View File

@@ -0,0 +1,8 @@
package cn.org.bjca.trust.push.message.msg

import cn.org.bjca.trust.push.enums.PacketType
import cn.org.bjca.trust.push.message.msg.BaseMessage

class DisconnectMessage : BaseMessage(PacketType.DISCONNECT) {
var requestCode: Int? = -1
}

+ 27
- 0
push/src/main/java/cn/org/bjca/trust/push/message/msg/Message.kt View File

@@ -0,0 +1,27 @@
package cn.org.bjca.trust.push.message.msg

import cn.org.bjca.trust.push.enums.MsgType
import org.json.JSONException

abstract class Message {
var messageId: String? = null
var timestamp: Long = 0
var fromClientId: String? = null
var toClientId: String? = null
var target: String? = null
var msgType: MsgType = MsgType.UNKNOWN
var message: String? = null
var tenantNo: String? = null

@Throws(JSONException::class)
open fun parse(type: MsgType, sendMessage: SendMessage) {
this.msgType = type
this.messageId = sendMessage.messageId
this.timestamp = sendMessage.timestamp
this.fromClientId = sendMessage.fromClientId
this.toClientId = sendMessage.toClientId
this.target = sendMessage.target
this.tenantNo = sendMessage.tenantNo
}
abstract fun createContentJsonStr(): String
}

+ 16
- 0
push/src/main/java/cn/org/bjca/trust/push/message/msg/SendMessage.kt View File

@@ -0,0 +1,16 @@
package cn.org.bjca.trust.push.message.msg

import cn.org.bjca.trust.push.enums.PacketType
import cn.org.bjca.trust.push.message.msg.BaseMessage

class SendMessage : BaseMessage(PacketType.SEND) {
var messageId: String? = null
var timestamp: Long = 0
var fromClientId: String? = null
var toClientId: String? = null
var target: String? = null
var messageType = 0
var message: String? = null
var tenantNo: String? = null

}

+ 3
- 0
settings.gradle View File

@@ -10,6 +10,9 @@ pluginManagement {
url 'http://nexus.51trust.net/repository/maven-public/' url 'http://nexus.51trust.net/repository/maven-public/'
allowInsecureProtocol true allowInsecureProtocol true
} }
maven {
url "https://repo.eclipse.org/content/repositories/paho-releases/"
}
} }
} }
dependencyResolutionManagement { dependencyResolutionManagement {


Loading…
Cancel
Save