Przeglądaj źródła

消息收发

master
xuqm 1 rok temu
rodzic
commit
315aa7925e
32 zmienionych plików z 694 dodań i 23 usunięć
  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 Wyświetl plik

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

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


+ 5
- 2
app/src/main/java/cn/org/bjca/trust/pushdemo/MainActivity.kt Wyświetl plik

@@ -9,8 +9,11 @@ class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
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 Wyświetl plik

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

<TextView
android:id="@+id/tv"
android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:text="注册im服务"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="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>

+ 20
- 15
push/build.gradle Wyświetl plik

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

}
repositories{
flatDir {
dirs 'libs'
}
}
repositories {
flatDir {
dirs 'libs'
publishing {
multipleVariants {
withSourcesJar()
withJavadocJar()
allVariants()
}
}
}
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.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
@@ -74,6 +70,13 @@ dependencies {
kapt("androidx.room:room-compiler: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')

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




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


+ 3
- 0
push/src/main/AndroidManifest.xml Wyświetl plik

@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<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>
<provider


+ 4
- 0
push/src/main/java/cn/org/bjca/trust/push/common/CommonHelper.kt Wyświetl plik

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

import java.util.*

object CommonHelper {
@JvmStatic
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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

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

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

interface SdkInterface {
/**
@@ -8,4 +9,10 @@ interface SdkInterface {
*/
fun register(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 Wyświetl plik

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

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.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 {

lateinit var imConnectOptions: ImConnectOptions

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) {
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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

@@ -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 Wyświetl plik

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


Ładowanie…
Anuluj
Zapisz