diff --git a/app/build.gradle b/app/build.gradle index f18641e..fbb49f8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,13 +3,11 @@ plugins { } android { - compileSdk 33 - buildToolsVersion '33.0.2' - + compileSdk 34 defaultConfig { applicationId "com.xinbida.wukongdemo" - minSdkVersion 19 - targetSdkVersion 33 + minSdkVersion 21 + targetSdkVersion 34 versionCode 1 versionName "1.0" multiDexEnabled true @@ -31,13 +29,11 @@ android { dependencies { implementation project(':wkim') - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'com.google.android.material:material:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - implementation 'org.jetbrains:annotations:15.0' - testImplementation 'junit:junit:4.+' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'com.google.android.material:material:1.12.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'org.jetbrains:annotations:23.0.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.7' implementation 'com.github.li-xiaojun:XPopup:2.9.19' implementation 'com.github.bigdongdong:ChatView:2.0' //添加依赖 diff --git a/app/src/main/java/com/xinbida/wukongdemo/LoginActivity.java b/app/src/main/java/com/xinbida/wukongdemo/LoginActivity.java index 76cf3fe..1b32365 100644 --- a/app/src/main/java/com/xinbida/wukongdemo/LoginActivity.java +++ b/app/src/main/java/com/xinbida/wukongdemo/LoginActivity.java @@ -30,7 +30,7 @@ public class LoginActivity extends AppCompatActivity { private void onListener() { EditText urlET = findViewById(R.id.urlET); String url = urlET.getText().toString(); - if (!TextUtils.isEmpty(url)){ + if (!TextUtils.isEmpty(url)) { HttpUtil.getInstance().apiURL = url; } diff --git a/app/src/main/java/com/xinbida/wukongdemo/MainActivity.java b/app/src/main/java/com/xinbida/wukongdemo/MainActivity.java index 5b1b528..502edb1 100644 --- a/app/src/main/java/com/xinbida/wukongdemo/MainActivity.java +++ b/app/src/main/java/com/xinbida/wukongdemo/MainActivity.java @@ -3,7 +3,6 @@ package com.xinbida.wukongdemo; import android.content.Context; import android.os.Bundle; import android.text.TextUtils; -import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.TextView; @@ -16,6 +15,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.lxj.xpopup.XPopup; import com.xinbida.wukongim.WKIM; +import com.xinbida.wukongim.entity.WKChannel; import com.xinbida.wukongim.entity.WKChannelType; import com.xinbida.wukongim.entity.WKMsg; import com.xinbida.wukongim.message.type.WKConnectStatus; @@ -72,7 +72,7 @@ public class MainActivity extends AppCompatActivity { return; } - WKIM.getInstance().getMsgManager().sendMessage(new WKTextContent(content), channelID, channelType); + WKIM.getInstance().getMsgManager().send(new WKTextContent(content), new WKChannel(channelID,channelType)); contentEt.setText(""); }); diff --git a/app/src/main/res/layout/act_login_layout.xml b/app/src/main/res/layout/act_login_layout.xml index 37d59c6..13dacfc 100644 --- a/app/src/main/res/layout/act_login_layout.xml +++ b/app/src/main/res/layout/act_login_layout.xml @@ -9,10 +9,10 @@ android:layout_height="wrap_content" android:layout_marginTop="30dp" android:gravity="center" - android:textStyle="bold" android:text="悟空IM登录" android:textColor="@color/black" - android:textSize="28sp" /> + android:textSize="28sp" + android:textStyle="bold" /> diff --git a/build.gradle b/build.gradle index a18cb66..153aed5 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.4.1' + classpath 'com.android.tools.build:gradle:8.5.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 17655d0..48c0a02 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/wkim/build.gradle b/wkim/build.gradle index e88c86b..675a289 100644 --- a/wkim/build.gradle +++ b/wkim/build.gradle @@ -23,10 +23,10 @@ afterEvaluate { } android { - compileSdk 33 + compileSdk 34 defaultConfig { - minSdkVersion 19 - targetSdkVersion 33 + minSdkVersion 21 + targetSdkVersion 34 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" diff --git a/wkim/src/main/java/com/xinbida/wukongim/WKIM.java b/wkim/src/main/java/com/xinbida/wukongim/WKIM.java index 2fbc58e..fcde85e 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/WKIM.java +++ b/wkim/src/main/java/com/xinbida/wukongim/WKIM.java @@ -13,13 +13,12 @@ import com.xinbida.wukongim.manager.ReminderManager; import com.xinbida.wukongim.manager.RobotManager; import com.xinbida.wukongim.message.MessageHandler; import com.xinbida.wukongim.utils.CryptoUtils; -import com.xinbida.wukongim.utils.WKLoggerUtils; /** * 5/20/21 5:25 PM */ public class WKIM { - private final String Version = "V1.1.7"; + private final String Version = "V1.1.9"; private WKIM() { diff --git a/wkim/src/main/java/com/xinbida/wukongim/WKIMApplication.java b/wkim/src/main/java/com/xinbida/wukongim/WKIMApplication.java index 50b88c8..29ab938 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/WKIMApplication.java +++ b/wkim/src/main/java/com/xinbida/wukongim/WKIMApplication.java @@ -22,7 +22,6 @@ import java.util.UUID; public class WKIMApplication { private final String sharedName = "wk_account_config"; //协议版本 - public final byte defaultProtocolVersion = 4; public byte protocolVersion = 4; private WKIMApplication() { @@ -208,38 +207,6 @@ public class WKIMApplication { } } return false; -// -// ConnectivityManager connectivity = (ConnectivityManager) mContext.get().getSystemService(Context.CONNECTIVITY_SERVICE); -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { -// if (connectivity != null) { -// Network networks = connectivity.getActiveNetwork(); -// NetworkCapabilities networkCapabilities = connectivity.getNetworkCapabilities(networks); -// if (networkCapabilities != null) { -// if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { -// success = true; -// } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { -// success = true; -// } -// } else { -// success = false; -// } -// } -// -// } else { -// NetworkInfo.State state = connectivity.getNetworkInfo( -// ConnectivityManager.TYPE_WIFI).getState(); // 获取网络连接状态 -// if (NetworkInfo.State.CONNECTED == state) { -// // 判断是否正在使用WIFI网络 -// success = true; -// } else { -// state = connectivity.getNetworkInfo( -// ConnectivityManager.TYPE_MOBILE).getState(); // 获取网络连接状态 -// if (NetworkInfo.State.CONNECTED == state) { // 判断是否正在使用GPRS网络 -// success = true; -// } -// } -// } - } public void setFileCacheDir(String fileDir) { diff --git a/wkim/src/main/java/com/xinbida/wukongim/db/ChannelDBManager.java b/wkim/src/main/java/com/xinbida/wukongim/db/ChannelDBManager.java index b92c759..4a2a1c1 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/db/ChannelDBManager.java +++ b/wkim/src/main/java/com/xinbida/wukongim/db/ChannelDBManager.java @@ -34,6 +34,29 @@ public class ChannelDBManager { return ChannelDBManagerBinder.channelDBManager; } + public List queryWithChannelIds(List channelIDs) { + List list = new ArrayList<>(); + if (WKIMApplication + .getInstance() + .getDbHelper() == null) { + return list; + } + try (Cursor cursor = WKIMApplication + .getInstance() + .getDbHelper() + .select(channel, "channel_id in (" + WKCursor.getPlaceholders(channelIDs.size()) + ")", channelIDs.toArray(new String[0]), null)) { + if (cursor == null) { + return list; + } + for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { + WKChannel channel = serializableChannel(cursor); + list.add(channel); + } + } catch (Exception ignored) { + } + return list; + } + public List queryWithChannelIdsAndChannelType(List channelIDs, byte channelType) { List list = new ArrayList<>(); if (WKIMApplication @@ -158,7 +181,7 @@ public class ChannelDBManager { try { cv = WKSqlContentValues.getContentValuesWithChannel(wkChannel); } catch (Exception e) { - WKLoggerUtils.getInstance().e(TAG , "insert channel error"); + WKLoggerUtils.getInstance().e(TAG, "insert channel error"); } if (WKIMApplication.getInstance().getDbHelper() == null) { return; @@ -175,7 +198,7 @@ public class ChannelDBManager { try { cv = WKSqlContentValues.getContentValuesWithChannel(wkChannel); } catch (Exception e) { - WKLoggerUtils.getInstance().e(TAG , "update channel error"); + WKLoggerUtils.getInstance().e(TAG, "update channel error"); } if (WKIMApplication.getInstance().getDbHelper() == null) { return; diff --git a/wkim/src/main/java/com/xinbida/wukongim/db/ConversationDbManager.java b/wkim/src/main/java/com/xinbida/wukongim/db/ConversationDbManager.java index b616be2..af016ac 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/db/ConversationDbManager.java +++ b/wkim/src/main/java/com/xinbida/wukongim/db/ConversationDbManager.java @@ -16,6 +16,7 @@ import com.xinbida.wukongim.entity.WKChannelType; import com.xinbida.wukongim.entity.WKConversationMsg; import com.xinbida.wukongim.entity.WKConversationMsgExtra; import com.xinbida.wukongim.entity.WKMsg; +import com.xinbida.wukongim.entity.WKMsgExtra; import com.xinbida.wukongim.entity.WKUIConversationMsg; import com.xinbida.wukongim.manager.ConversationManager; import com.xinbida.wukongim.utils.WKCommonUtils; @@ -85,18 +86,88 @@ public class ConversationDbManager { if (cursor == null) { return list; } + List clientMsgNos = new ArrayList<>(); for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { WKConversationMsg msg = serializeMsg(cursor); if (msg.isDeleted == 0) { WKUIConversationMsg uiMsg = getUIMsg(msg, cursor); list.add(uiMsg); + clientMsgNos.add(uiMsg.clientMsgNo); } } - } catch (Exception ignored) { + if (!clientMsgNos.isEmpty()) { + List msgList = queryWithClientMsgNos(clientMsgNos); + List msgIds = new ArrayList<>(); + if (WKCommonUtils.isNotEmpty(msgList)) { + for (WKUIConversationMsg uiMsg : list) { + for (WKMsg msg : msgList) { + if (uiMsg.clientMsgNo.equals(msg.clientMsgNO)) { + uiMsg.setWkMsg(msg); + if (!TextUtils.isEmpty(msg.messageID)) { + msgIds.add(msg.messageID); + } + break; + } + } + } + } + List extraList = queryWithMsgIds(msgIds); + if (WKCommonUtils.isNotEmpty(extraList)) { + for (WKUIConversationMsg uiMsg : list) { + for (WKMsgExtra extra : extraList) { + if (uiMsg.getWkMsg() != null && !TextUtils.isEmpty(uiMsg.getWkMsg().messageID) && uiMsg.getWkMsg().messageID.equals(extra.messageID)) { + uiMsg.getWkMsg().remoteExtra = extra; + break; + } + } + } + } + } + } catch (Exception e) { + WKLoggerUtils.getInstance().e(TAG, "queryAll error"); } return list; } + private List queryWithMsgIds(List msgIds) { + List msgExtraList = new ArrayList<>(); + List ids = new ArrayList<>(); + for (int i = 0, size = msgIds.size(); i < size; i++) { + if (ids.size() == 200) { + List list = MsgDbManager.getInstance().queryMsgExtrasWithMsgIds(ids); + if (WKCommonUtils.isNotEmpty(list)) { + msgExtraList.addAll(list); + } + ids.clear(); + } + ids.add(msgIds.get(i)); + } + return msgExtraList; + } + + private List queryWithClientMsgNos(List clientMsgNos) { + List msgList = new ArrayList<>(); + List nos = new ArrayList<>(); + for (int i = 0, size = clientMsgNos.size(); i < size; i++) { + if (nos.size() == 200) { + List list = MsgDbManager.getInstance().queryWithClientMsgNos(nos); + if (WKCommonUtils.isNotEmpty(list)) { + msgList.addAll(list); + } + nos.clear(); + } + nos.add(clientMsgNos.get(i)); + } + if (!nos.isEmpty()) { + List list = MsgDbManager.getInstance().queryWithClientMsgNos(nos); + if (WKCommonUtils.isNotEmpty(list)) { + msgList.addAll(list); + } + nos.clear(); + } + return msgList; + } + public List queryWithChannelIds(List channelIds) { String sql = "select " + conversation + ".*," + channelCols + "," + extraCols + " from " + conversation + " left join " + channel + " on " + conversation + ".channel_id=" + channel + ".channel_id and " + conversation + ".channel_type=" + channel + ".channel_type left join " + conversationExtra + " on " + conversation + ".channel_id=" + conversationExtra + ".channel_id and " + conversation + ".channel_type=" + conversationExtra + ".channel_type where " + conversation + ".is_deleted=0 and " + conversation + ".channel_id in (" + WKCursor.getPlaceholders(channelIds.size()) + ")"; List list = new ArrayList<>(); @@ -211,7 +282,7 @@ public class ConversationDbManager { cv.put(WKDBColumns.WKCoverMessageColumns.last_msg_seq, lastMsgSeq); cv.put(WKDBColumns.WKCoverMessageColumns.unread_count, count); } catch (Exception e) { - WKLoggerUtils.getInstance().e(TAG , "updateMsg error"); + WKLoggerUtils.getInstance().e(TAG, "updateMsg error"); } WKIMApplication.getInstance().getDbHelper() .update(conversation, cv, WKDBColumns.WKCoverMessageColumns.channel_id + "=? and " + WKDBColumns.WKCoverMessageColumns.channel_type + "=?", update); @@ -241,7 +312,7 @@ public class ConversationDbManager { try { cv.put(WKDBColumns.WKCoverMessageColumns.is_deleted, isDeleted); } catch (Exception e) { - WKLoggerUtils.getInstance().e(TAG , "deleteWithChannel error"); + WKLoggerUtils.getInstance().e(TAG, "deleteWithChannel error"); } boolean result = WKIMApplication.getInstance().getDbHelper() @@ -294,7 +365,7 @@ public class ConversationDbManager { try { cv = WKSqlContentValues.getContentValuesWithCoverMsg(msg, false); } catch (Exception e) { - WKLoggerUtils.getInstance().e(TAG,"insert error"); + WKLoggerUtils.getInstance().e(TAG, "insert error"); } long result = -1; try { @@ -319,7 +390,7 @@ public class ConversationDbManager { try { cv = WKSqlContentValues.getContentValuesWithCoverMsg(msg, false); } catch (Exception e) { - WKLoggerUtils.getInstance().e(TAG,"update error"); + WKLoggerUtils.getInstance().e(TAG, "update error"); } return WKIMApplication.getInstance().getDbHelper() .update(conversation, cv, WKDBColumns.WKCoverMessageColumns.channel_id + "=? and " + WKDBColumns.WKCoverMessageColumns.channel_type + "=?", update); @@ -504,7 +575,7 @@ public class ConversationDbManager { hashMap.put(key, jsonObject.opt(key)); } } catch (JSONException e) { - WKLoggerUtils.getInstance().e(TAG , "serializeMsg error"); + WKLoggerUtils.getInstance().e(TAG, "serializeMsg error"); } msg.localExtraMap = hashMap; } diff --git a/wkim/src/main/java/com/xinbida/wukongim/db/MsgDbManager.java b/wkim/src/main/java/com/xinbida/wukongim/db/MsgDbManager.java index 6c79365..f19e093 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/db/MsgDbManager.java +++ b/wkim/src/main/java/com/xinbida/wukongim/db/MsgDbManager.java @@ -21,9 +21,12 @@ import com.xinbida.wukongim.entity.WKMsg; import com.xinbida.wukongim.entity.WKMsgExtra; import com.xinbida.wukongim.entity.WKMsgReaction; import com.xinbida.wukongim.entity.WKMsgSetting; +import com.xinbida.wukongim.entity.WKSyncChannelMsg; +import com.xinbida.wukongim.entity.WKSyncRecent; import com.xinbida.wukongim.interfaces.IGetOrSyncHistoryMsgBack; import com.xinbida.wukongim.manager.MsgManager; import com.xinbida.wukongim.message.type.WKSendMsgResult; +import com.xinbida.wukongim.msgmodel.WKFormatErrorContent; import com.xinbida.wukongim.msgmodel.WKMessageContent; import com.xinbida.wukongim.utils.WKCommonUtils; import com.xinbida.wukongim.utils.WKLoggerUtils; @@ -59,7 +62,8 @@ public class MsgDbManager { } private int requestCount; -// private int more = 1; + // private int more = 1; + private final HashMap channelMinMsgSeqs = new HashMap<>(); public void queryOrSyncHistoryMessages(String channelId, byte channelType, long oldestOrderSeq, boolean contain, int pullMode, int limit, final IGetOrSyncHistoryMsgBack iGetOrSyncHistoryMsgBack) { //获取原始数据 @@ -146,7 +150,7 @@ public class MsgDbManager { if (max > startMsgSeq) { startMsgSeq = max; } - if (endMsgSeq ==0 || min < endMsgSeq) { + if (endMsgSeq == 0 || min < endMsgSeq) { endMsgSeq = min; } } else { @@ -167,8 +171,16 @@ public class MsgDbManager { startMsgSeq = 0; endMsgSeq = 0; } + String key = channelId + "_" + channelType; if (!isSyncMsg) { - if (minMessageSeq == 1) { + long minSeq = 1; + if (channelMinMsgSeqs.containsKey(key)) { + Object s = channelMinMsgSeqs.get(key); + if (s != null) { + minSeq = Long.parseLong(s.toString()); + } + } + if (minMessageSeq == minSeq) { requestCount = 0; // more = 1; new Handler(Looper.getMainLooper()).post(() -> iGetOrSyncHistoryMsgBack.onResult(list)); @@ -202,10 +214,9 @@ public class MsgDbManager { requestCount++; MsgManager.getInstance().setSyncChannelMsgListener(channelId, channelType, startMsgSeq, endMsgSeq, limit, pullMode, syncChannelMsg -> { if (syncChannelMsg != null) { - if (oldestMsgSeq == 0) { + if (oldestMsgSeq == 0 || (syncChannelMsg.messages != null && syncChannelMsg.messages.size() < limit)) { requestCount = 5; } -// more = syncChannelMsg.more; queryOrSyncHistoryMessages(channelId, channelType, oldestOrderSeq, contain, pullMode, limit, iGetOrSyncHistoryMsgBack); } else { requestCount = 0; @@ -218,7 +229,30 @@ public class MsgDbManager { // more = 1; new Handler(Looper.getMainLooper()).post(() -> iGetOrSyncHistoryMsgBack.onResult(list)); } + } + private long getMinSeq(WKSyncChannelMsg syncChannelMsg, List tempList) { + long minSeq = 0; + if (WKCommonUtils.isNotEmpty(syncChannelMsg.messages)) { + for (WKSyncRecent recent : syncChannelMsg.messages) { + if (minSeq == 0) { + minSeq = recent.message_seq; + } else { + minSeq = Math.min(minSeq, recent.message_seq); + } + } + } else { + if (WKCommonUtils.isNotEmpty(tempList)) { + for (WKMsg msg : tempList) { + if (minSeq == 0) { + minSeq = msg.messageSeq; + } else { + minSeq = Math.min(minSeq, msg.messageSeq); + } + } + } + } + return minSeq; } public List queryWithFlame() { @@ -888,7 +922,7 @@ public class MsgDbManager { } - private List queryMsgExtrasWithMsgIds(List msgIds) { + public List queryMsgExtrasWithMsgIds(List msgIds) { List list = new ArrayList<>(); try (Cursor cursor = WKIMApplication.getInstance().getDbHelper().select(messageExtra, "message_id in (" + WKCursor.getPlaceholders(msgIds.size()) + ")", msgIds.toArray(new String[0]), null)) { if (cursor == null) { @@ -1638,6 +1672,7 @@ public class MsgDbManager { jsonObject = new JSONObject(msg.content); } catch (JSONException e) { WKLoggerUtils.getInstance().e(TAG, "getMsgModel error content not json format"); + return new WKFormatErrorContent(); } } return WKIM.getInstance() diff --git a/wkim/src/main/java/com/xinbida/wukongim/db/ReminderDBManager.java b/wkim/src/main/java/com/xinbida/wukongim/db/ReminderDBManager.java index 7fb381f..346498a 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/db/ReminderDBManager.java +++ b/wkim/src/main/java/com/xinbida/wukongim/db/ReminderDBManager.java @@ -34,6 +34,16 @@ public class ReminderDBManager { return ReminderDBManagerBinder.binder; } + public void doneWithReminderIds(List ids) { + ContentValues cv = new ContentValues(); + cv.put("done", 1); + String[] strings = new String[ids.size()]; + for (int i = 0; i < ids.size(); i++) { + strings[i] = ids.get(i) + ""; + } + WKIMApplication.getInstance().getDbHelper().update(reminders, cv, "reminder_id in (" + WKCursor.getPlaceholders(ids.size()) + ")", strings); + } + public long queryMaxVersion() { String sql = "select * from " + reminders + " order by version desc limit 1"; long version = 0; @@ -237,7 +247,7 @@ public class ReminderDBManager { hashMap.put(key, jsonObject.opt(key)); } } catch (JSONException e) { - WKLoggerUtils.getInstance().e(TAG , "serializeReminder error"); + WKLoggerUtils.getInstance().e(TAG, "serializeReminder error"); } reminder.data = hashMap; } diff --git a/wkim/src/main/java/com/xinbida/wukongim/db/WKSqlContentValues.java b/wkim/src/main/java/com/xinbida/wukongim/db/WKSqlContentValues.java index 0031357..6d16f0e 100755 --- a/wkim/src/main/java/com/xinbida/wukongim/db/WKSqlContentValues.java +++ b/wkim/src/main/java/com/xinbida/wukongim/db/WKSqlContentValues.java @@ -233,7 +233,7 @@ class WKSqlContentValues { cv.put("keep_message_seq", extra.keepMessageSeq); cv.put("keep_offset_y", extra.keepOffsetY); cv.put("draft", extra.draft); - cv.put("draft_updated_at", extra.version); + cv.put("draft_updated_at", extra.draftUpdatedAt); cv.put("version", extra.version); return cv; } diff --git a/wkim/src/main/java/com/xinbida/wukongim/entity/WKMentionType.java b/wkim/src/main/java/com/xinbida/wukongim/entity/WKMentionType.java index d5e5705..74e504e 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/entity/WKMentionType.java +++ b/wkim/src/main/java/com/xinbida/wukongim/entity/WKMentionType.java @@ -9,4 +9,4 @@ public class WKMentionType { public static final int WKReminderTypeMentionMe = 1; //申请加群 public static final int WKApplyJoinGroupApprove = 2; -} +} \ No newline at end of file diff --git a/wkim/src/main/java/com/xinbida/wukongim/entity/WKMsg.java b/wkim/src/main/java/com/xinbida/wukongim/entity/WKMsg.java index 29a5826..71d5d45 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/entity/WKMsg.java +++ b/wkim/src/main/java/com/xinbida/wukongim/entity/WKMsg.java @@ -76,6 +76,7 @@ public class WKMsg implements Parcelable { public int viewed; // 查看时间戳 public long viewedAt; + public String robotID; // 话题ID public String topicID; //消息设置 @@ -97,6 +98,7 @@ public class WKMsg implements Parcelable { this.expireTimestamp = 0; status = WKSendMsgResult.send_loading; clientMsgNO = WKIM.getInstance().getMsgManager().createClientMsgNO(); + setting=new WKMsgSetting(); header = new WKMsgHeader(); remoteExtra = new WKMsgExtra(); } @@ -138,6 +140,7 @@ public class WKMsg implements Parcelable { topicID = in.readString(); expireTime = in.readInt(); expireTimestamp = in.readLong(); + robotID = in.readString(); } public static final Creator CREATOR = new Creator() { @@ -192,6 +195,7 @@ public class WKMsg implements Parcelable { dest.writeString(topicID); dest.writeInt(expireTime); dest.writeLong(expireTimestamp); + dest.writeString(robotID); } public String getLocalMapExtraString() { diff --git a/wkim/src/main/java/com/xinbida/wukongim/entity/WKMsgHeader.java b/wkim/src/main/java/com/xinbida/wukongim/entity/WKMsgHeader.java index 2655946..cc534b2 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/entity/WKMsgHeader.java +++ b/wkim/src/main/java/com/xinbida/wukongim/entity/WKMsgHeader.java @@ -4,7 +4,7 @@ import android.os.Parcel; import android.os.Parcelable; public class WKMsgHeader implements Parcelable { - //是否持久化[是否保存在数据库] + //是否持久化[是否不保存在数据库] public boolean noPersist; //对方是否显示红点 public boolean redDot = true; diff --git a/wkim/src/main/java/com/xinbida/wukongim/entity/WKSendOptions.java b/wkim/src/main/java/com/xinbida/wukongim/entity/WKSendOptions.java new file mode 100644 index 0000000..72dd77d --- /dev/null +++ b/wkim/src/main/java/com/xinbida/wukongim/entity/WKSendOptions.java @@ -0,0 +1,11 @@ +package com.xinbida.wukongim.entity; + +public class WKSendOptions { + public int expire = 0; + public String topicID; + public int flame; + public int flameSecond; + public String robotID; + public WKMsgSetting setting = new WKMsgSetting(); + public WKMsgHeader header = new WKMsgHeader(); +} diff --git a/wkim/src/main/java/com/xinbida/wukongim/manager/ChannelManager.java b/wkim/src/main/java/com/xinbida/wukongim/manager/ChannelManager.java index 941557c..1d30cc1 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/manager/ChannelManager.java +++ b/wkim/src/main/java/com/xinbida/wukongim/manager/ChannelManager.java @@ -271,6 +271,10 @@ public class ChannelManager extends BaseManager { return ChannelDBManager.getInstance().queryWithChannelIdsAndChannelType(channelIds, channelType); } + public List getChannels(List channelIds) { + return ChannelDBManager.getInstance().queryWithChannelIds(channelIds); + } + /** * 搜索频道 * diff --git a/wkim/src/main/java/com/xinbida/wukongim/manager/MsgManager.java b/wkim/src/main/java/com/xinbida/wukongim/manager/MsgManager.java index f67f780..8b0f4e8 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/manager/MsgManager.java +++ b/wkim/src/main/java/com/xinbida/wukongim/manager/MsgManager.java @@ -1,6 +1,9 @@ package com.xinbida.wukongim.manager; import android.text.TextUtils; +import android.util.Log; + +import androidx.annotation.NonNull; import com.xinbida.wukongim.WKIM; import com.xinbida.wukongim.WKIMApplication; @@ -17,6 +20,7 @@ import com.xinbida.wukongim.entity.WKMsg; import com.xinbida.wukongim.entity.WKMsgExtra; import com.xinbida.wukongim.entity.WKMsgReaction; import com.xinbida.wukongim.entity.WKMsgSetting; +import com.xinbida.wukongim.entity.WKSendOptions; import com.xinbida.wukongim.entity.WKSyncExtraMsg; import com.xinbida.wukongim.entity.WKSyncMsg; import com.xinbida.wukongim.entity.WKSyncMsgReaction; @@ -39,13 +43,16 @@ import com.xinbida.wukongim.interfaces.IUploadAttachmentListener; import com.xinbida.wukongim.interfaces.IUploadMsgExtraListener; import com.xinbida.wukongim.message.MessageHandler; import com.xinbida.wukongim.message.WKConnection; +import com.xinbida.wukongim.message.WKRead; import com.xinbida.wukongim.message.type.WKMsgContentType; import com.xinbida.wukongim.message.type.WKSendMsgResult; +import com.xinbida.wukongim.msgmodel.WKFormatErrorContent; import com.xinbida.wukongim.msgmodel.WKImageContent; import com.xinbida.wukongim.msgmodel.WKMessageContent; import com.xinbida.wukongim.msgmodel.WKMsgEntity; import com.xinbida.wukongim.msgmodel.WKReply; import com.xinbida.wukongim.msgmodel.WKTextContent; +import com.xinbida.wukongim.msgmodel.WKUnknownContent; import com.xinbida.wukongim.msgmodel.WKVideoContent; import com.xinbida.wukongim.msgmodel.WKVoiceContent; import com.xinbida.wukongim.utils.DateUtils; @@ -157,6 +164,9 @@ public class MsgManager extends BaseManager { } public WKMessageContent getMsgContentModel(String jsonStr) { + if (TextUtils.isEmpty(jsonStr)) { + return new WKFormatErrorContent(); + } JSONObject jsonObject = null; try { jsonObject = new JSONObject(jsonStr); @@ -164,77 +174,78 @@ public class MsgManager extends BaseManager { WKLoggerUtils.getInstance().e(TAG, "getMsgContentModel The parameter is not a JSON"); } if (jsonObject == null) { - return new WKMessageContent(); - } else - return getMsgContentModel(jsonObject); + return new WKFormatErrorContent(); + } + return getMsgContentModel(jsonObject); } public WKMessageContent getMsgContentModel(int contentType, JSONObject jsonObject) { if (jsonObject == null) jsonObject = new JSONObject(); WKMessageContent baseContentMsgModel = getContentMsgModel(contentType, jsonObject); - if (baseContentMsgModel != null) { - //解析@成员列表 - if (jsonObject.has("mention")) { - JSONObject tempJson = jsonObject.optJSONObject("mention"); - if (tempJson != null) { - //是否@所有人 - if (tempJson.has("all")) - baseContentMsgModel.mentionAll = tempJson.optInt("all"); - JSONArray uidList = tempJson.optJSONArray("uids"); + if (baseContentMsgModel == null) { + baseContentMsgModel = new WKUnknownContent(); + } + //解析@成员列表 + if (jsonObject.has("mention")) { + JSONObject tempJson = jsonObject.optJSONObject("mention"); + if (tempJson != null) { + //是否@所有人 + if (tempJson.has("all")) + baseContentMsgModel.mentionAll = tempJson.optInt("all"); + JSONArray uidList = tempJson.optJSONArray("uids"); - if (uidList != null && uidList.length() > 0) { - WKMentionInfo mentionInfo = new WKMentionInfo(); - List mentionInfoUIDs = new ArrayList<>(); - for (int i = 0, size = uidList.length(); i < size; i++) { - String uid = uidList.optString(i); - if (uid.equals(WKIMApplication.getInstance().getUid())) { - mentionInfo.isMentionMe = true; - } - mentionInfoUIDs.add(uid); - } - mentionInfo.uids = mentionInfoUIDs; - if (baseContentMsgModel.mentionAll == 1) { + if (uidList != null && uidList.length() > 0) { + WKMentionInfo mentionInfo = new WKMentionInfo(); + List mentionInfoUIDs = new ArrayList<>(); + for (int i = 0, size = uidList.length(); i < size; i++) { + String uid = uidList.optString(i); + if (uid.equals(WKIMApplication.getInstance().getUid())) { mentionInfo.isMentionMe = true; } - baseContentMsgModel.mentionInfo = mentionInfo; + mentionInfoUIDs.add(uid); } - } - } - - if (jsonObject.has("from_uid")) - baseContentMsgModel.fromUID = jsonObject.optString("from_uid"); - if (jsonObject.has("flame")) - baseContentMsgModel.flame = jsonObject.optInt("flame"); - if (jsonObject.has("flame_second")) - baseContentMsgModel.flameSecond = jsonObject.optInt("flame_second"); - //判断消息中是否包含回复情况 - if (jsonObject.has("reply")) { - baseContentMsgModel.reply = new WKReply(); - JSONObject replyJson = jsonObject.optJSONObject("reply"); - if (replyJson != null) { - baseContentMsgModel.reply = baseContentMsgModel.reply.decodeMsg(replyJson); - } - } - if (jsonObject.has("robot_id")) - baseContentMsgModel.robotID = jsonObject.optString("robot_id"); - if (jsonObject.has("entities")) { - JSONArray jsonArray = jsonObject.optJSONArray("entities"); - if (jsonArray != null && jsonArray.length() > 0) { - List list = new ArrayList<>(); - for (int i = 0; i < jsonArray.length(); i++) { - WKMsgEntity entity = new WKMsgEntity(); - JSONObject jo = jsonArray.optJSONObject(i); - entity.type = jo.optString("type"); - entity.offset = jo.optInt("offset"); - entity.length = jo.optInt("length"); - entity.value = jo.optString("value"); - list.add(entity); + mentionInfo.uids = mentionInfoUIDs; + if (baseContentMsgModel.mentionAll == 1) { + mentionInfo.isMentionMe = true; } - baseContentMsgModel.entities = list; + baseContentMsgModel.mentionInfo = mentionInfo; } - } + } + if (jsonObject.has("from_uid")) + baseContentMsgModel.fromUID = jsonObject.optString("from_uid"); + if (jsonObject.has("flame")) + baseContentMsgModel.flame = jsonObject.optInt("flame"); + if (jsonObject.has("flame_second")) + baseContentMsgModel.flameSecond = jsonObject.optInt("flame_second"); + if (jsonObject.has("robot_id")) + baseContentMsgModel.robotID = jsonObject.optString("robot_id"); + + //判断消息中是否包含回复情况 + if (jsonObject.has("reply")) { + baseContentMsgModel.reply = new WKReply(); + JSONObject replyJson = jsonObject.optJSONObject("reply"); + if (replyJson != null) { + baseContentMsgModel.reply = baseContentMsgModel.reply.decodeMsg(replyJson); + } + } + + if (jsonObject.has("entities")) { + JSONArray jsonArray = jsonObject.optJSONArray("entities"); + if (jsonArray != null && jsonArray.length() > 0) { + List list = new ArrayList<>(); + for (int i = 0; i < jsonArray.length(); i++) { + WKMsgEntity entity = new WKMsgEntity(); + JSONObject jo = jsonArray.optJSONObject(i); + entity.type = jo.optString("type"); + entity.offset = jo.optInt("offset"); + entity.length = jo.optInt("length"); + entity.value = jo.optString("value"); + list.add(entity); + } + baseContentMsgModel.entities = list; + } } return baseContentMsgModel; } @@ -259,6 +270,7 @@ public class MsgManager extends BaseManager { } catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) { WKLoggerUtils.getInstance().e(TAG, "getContentMsgModel error" + e.getLocalizedMessage()); + return new WKUnknownContent(); } } try { @@ -268,8 +280,9 @@ public class MsgManager extends BaseManager { } } catch (IllegalAccessException | InstantiationException e) { WKLoggerUtils.getInstance().e(TAG, "getContentMsgModel decodeMsg error"); + return new WKUnknownContent(); } - return null; + return new WKUnknownContent(); } private long getOrNearbyMsgSeq(long orderSeq) { @@ -934,7 +947,6 @@ public class MsgManager extends BaseManager { } } - public void saveSyncChannelMSGs(List list) { if (WKCommonUtils.isEmpty(list)) return; List msgList = new ArrayList<>(); @@ -1122,29 +1134,11 @@ public class MsgManager extends BaseManager { JSONObject jsonObject = new JSONObject(wkSyncRecent.payload); msg.content = jsonObject.toString(); } - JSONObject jsonObject = null; - if (!TextUtils.isEmpty(msg.content)) { - try { - jsonObject = new JSONObject(msg.content); - if (jsonObject.has("type")) - msg.type = jsonObject.optInt("type"); - jsonObject.put(WKDBColumns.WKMessageColumns.from_uid, msg.fromUID); - if (jsonObject.has("flame")) - msg.flame = jsonObject.optInt("flame"); - if (jsonObject.has("flame_second")) - msg.flameSecond = jsonObject.optInt("flame_second"); - msg.content = jsonObject.toString(); - } catch (JSONException e) { - WKLoggerUtils.getInstance().e(TAG, "WKSyncRecent2WKMsg message content not a JSON"); - } - } // 处理消息回应 if (WKCommonUtils.isNotEmpty(wkSyncRecent.reactions)) { msg.reactionList = getMsgReaction(wkSyncRecent); } - if (msg.type != WKMsgContentType.WK_SIGNAL_DECRYPT_ERROR && msg.type != WKMsgContentType.WK_CONTENT_FORMAT_ERROR) - msg.baseContentMsgModel = WKIM.getInstance().getMsgManager().getMsgContentModel(msg.type, jsonObject); - + msg = MessageHandler.getInstance().parsingMsg(msg); return msg; } @@ -1209,7 +1203,7 @@ public class MsgManager extends BaseManager { @Override public void run() { List list = MsgDbManager.getInstance().queryMsgExtraWithNeedUpload(1); - if (list != null && list.size() > 0) { + if (WKCommonUtils.isNotEmpty(list)) { for (WKMsgExtra extra : list) { if (iUploadMsgExtraListener != null) { iUploadMsgExtraListener.onUpload(extra); @@ -1236,7 +1230,7 @@ public class MsgManager extends BaseManager { } public void pushNewMsg(List wkMsgList) { - if (newMsgListenerMap != null && newMsgListenerMap.size() > 0) { + if (newMsgListenerMap != null && !newMsgListenerMap.isEmpty()) { runOnMainThread(() -> { for (Map.Entry entry : newMsgListenerMap.entrySet()) { entry.getValue().newMsg(wkMsgList); @@ -1257,13 +1251,35 @@ public class MsgManager extends BaseManager { pushNewMsg(msgs); } - + /** + * Deprecated 后续版本将会移除 + * + * @param messageContent 消息体 + * @param channelID 频道ID + * @param channelType 频道类型 + */ + @Deprecated public void sendMessage(WKMessageContent messageContent, String channelID, byte channelType) { - WKConnection.getInstance().sendMessage(messageContent, channelID, channelType); + send(messageContent, new WKChannel(channelID, channelType)); } + /** + * Deprecated 后续版本将会移除 + * + * @param messageContent 消息体 + * @param setting 消息设置 + * @param channelID 频道ID + * @param channelType 频道类型 + */ + @Deprecated public void sendMessage(WKMessageContent messageContent, WKMsgSetting setting, String channelID, byte channelType) { - WKConnection.getInstance().sendMessage(messageContent, setting, channelID, channelType); + WKSendOptions options = new WKSendOptions(); + options.setting = setting; + WKChannel channel = WKIM.getInstance().getChannelManager().getChannel(channelID, channelType); + if (channel == null) { + channel = new WKChannel(channelID, channelType); + } + sendWithOptions(messageContent, channel, options); } /** @@ -1271,10 +1287,47 @@ public class MsgManager extends BaseManager { * * @param msg 消息对象 */ - public void sendMessage(WKMsg msg) { + public void sendMessage(@NonNull WKMsg msg) { WKConnection.getInstance().sendMessage(msg); } + /** + * 发送消息 + * + * @param contentModel 消息体 + * @param channel 频道 + */ + public void send(@NonNull WKMessageContent contentModel, @NonNull WKChannel channel) { + sendWithOptions(contentModel, channel, new WKSendOptions()); + } + + /** + * 发送消息 + * + * @param contentModel 消息体 + * @param channel 频道 + * @param options 高级设置 + */ + public void sendWithOptions(@NonNull WKMessageContent contentModel, @NonNull WKChannel channel, @NonNull WKSendOptions options) { + final WKMsg wkMsg = new WKMsg(); + wkMsg.type = contentModel.type; + wkMsg.channelID = channel.channelID; + wkMsg.channelType = channel.channelType; + wkMsg.baseContentMsgModel = contentModel; + wkMsg.flame = options.flame; + wkMsg.flameSecond = options.flameSecond; + wkMsg.expireTime = options.expire; + if (!TextUtils.isEmpty(options.topicID)) { + wkMsg.topicID = options.topicID; + } + if (!TextUtils.isEmpty(options.robotID)) { + wkMsg.robotID = options.robotID; + } + wkMsg.setting = options.setting; + wkMsg.header = options.header; + sendMessage(wkMsg); + } + public String createClientMsgNO() { return UUID.randomUUID().toString().replaceAll("-", "") + "1"; } diff --git a/wkim/src/main/java/com/xinbida/wukongim/manager/ReminderManager.java b/wkim/src/main/java/com/xinbida/wukongim/manager/ReminderManager.java index 25e197c..ae075ec 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/manager/ReminderManager.java +++ b/wkim/src/main/java/com/xinbida/wukongim/manager/ReminderManager.java @@ -52,9 +52,9 @@ public class ReminderManager extends BaseManager { /** * 获取某个类型的提醒 * - * @param channelID 频道ID - * @param channelType 频道类型 - * @param type 提醒类型 + * @param channelID 频道ID + * @param channelType 频道类型 + * @param type 提醒类型 * @return WKReminder */ public WKReminder getReminder(String channelID, byte channelType, int type) { @@ -81,7 +81,7 @@ public class ReminderManager extends BaseManager { } public List getRemindersWithType(String channelID, byte channelType, int type) { - return ReminderDBManager.getInstance().queryWithChannelAndTypeAndDone(channelID, channelType, type,0); + return ReminderDBManager.getInstance().queryWithChannelAndTypeAndDone(channelID, channelType, type, 0); } public void saveOrUpdateReminders(List reminderList) { @@ -95,4 +95,7 @@ public class ReminderManager extends BaseManager { return ReminderDBManager.getInstance().queryMaxVersion(); } + public void done() { + + } } diff --git a/wkim/src/main/java/com/xinbida/wukongim/message/MessageHandler.java b/wkim/src/main/java/com/xinbida/wukongim/message/MessageHandler.java index a0b58ec..2f8cefe 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/message/MessageHandler.java +++ b/wkim/src/main/java/com/xinbida/wukongim/message/MessageHandler.java @@ -114,7 +114,7 @@ public class MessageHandler { System.arraycopy(available_bytes, 0, temp, cacheData.length, available_bytes.length); cacheData = temp; } catch (Exception e) { - WKLoggerUtils.getInstance().e(TAG,"cutBytes Merge message error" + e.getMessage()); + WKLoggerUtils.getInstance().e(TAG, "cutBytes Merge message error" + e.getMessage()); } } @@ -208,7 +208,7 @@ public class MessageHandler { mIReceivedMsgListener .sendAckMsg(sendAckMsg); - } else if (g_msg.packetType == WKMsgType.RECVEIVED) { + } else if (g_msg.packetType == WKMsgType.RECEIVED) { //收到消息 WKMsg message = WKProto.getInstance().baseMsg2WKMsg(g_msg); message.header.noPersist = no_persist == 1; @@ -328,22 +328,8 @@ public class MessageHandler { if (lastMsg == null) { continue; } - JSONObject jsonObject = null; - if (!TextUtils.isEmpty(list.get(i).wkMsg.content)) { - try { - jsonObject = new JSONObject(list.get(i).wkMsg.content); - } catch (JSONException e) { - WKLoggerUtils.getInstance().e(TAG, "groupMsg content is not a JSON struct"); - jsonObject = new JSONObject(); - } - } - if (lastMsg.baseContentMsgModel == null) { - lastMsg.baseContentMsgModel = WKIM.getInstance().getMsgManager().getMsgContentModel(lastMsg.type, jsonObject); - if (lastMsg.baseContentMsgModel != null) { - lastMsg.flame = lastMsg.baseContentMsgModel.flame; - lastMsg.flameSecond = lastMsg.baseContentMsgModel.flameSecond; - } - } + + lastMsg = parsingMsg(lastMsg); boolean isSave = false; if (lastMsg.baseContentMsgModel != null && lastMsg.baseContentMsgModel.mentionAll == 1 && list.get(i).red_dot == 1) { isSave = true; @@ -390,29 +376,37 @@ public class MessageHandler { } public WKMsg parsingMsg(WKMsg message) { - JSONObject json = null; - if (message.type != WKMsgContentType.WK_SIGNAL_DECRYPT_ERROR) { - try { - if (TextUtils.isEmpty(message.content)) return message; - json = new JSONObject(message.content); - if (json.has(WKDBColumns.WKMessageColumns.type)) { - message.content = json.toString(); - message.type = json.optInt(WKDBColumns.WKMessageColumns.type); - } - if (TextUtils.isEmpty(message.fromUID)) { - if (json.has(WKDBColumns.WKMessageColumns.from_uid)) { - message.fromUID = json.optString(WKDBColumns.WKMessageColumns.from_uid); - } else { - message.fromUID = message.channelID; - } - } - - } catch (JSONException e) { - message.type = WKMsgContentType.WK_CONTENT_FORMAT_ERROR; - WKLoggerUtils.getInstance().e(TAG, "Parsing message error, message is not a JSON structure"); - } + if (message.type == WKMsgContentType.WK_SIGNAL_DECRYPT_ERROR || message.type == WKMsgContentType.WK_CONTENT_FORMAT_ERROR) { + return message; + } + JSONObject json = null; + try { + if (TextUtils.isEmpty(message.content)) return message; + json = new JSONObject(message.content); + if (json.has("type")) { + message.content = json.toString(); + message.type = json.optInt("type"); + } + if (TextUtils.isEmpty(message.fromUID)) { + if (json.has("from_uid")) { + message.fromUID = json.optString("from_uid"); + } else { + message.fromUID = message.channelID; + } + } + if (json.has("flame")) { + message.flame = json.optInt("flame"); + } + if (json.has("flame_second")) { + message.flameSecond = json.optInt("flame_second"); + } + if (json.has("root_id")) { + message.robotID = json.optString("root_id"); + } + } catch (JSONException e) { + message.type = WKMsgContentType.WK_CONTENT_FORMAT_ERROR; + WKLoggerUtils.getInstance().e(TAG, "Parsing message error, message is not a JSON structure"); } - if (json == null) { if (message.type != WKMsgContentType.WK_SIGNAL_DECRYPT_ERROR) @@ -421,15 +415,10 @@ public class MessageHandler { if (message.type == WKMsgContentType.WK_INSIDE_MSG) { CMDManager.getInstance().handleCMD(json, message.channelID, message.channelType); - } - if (message.type != WKMsgContentType.WK_SIGNAL_DECRYPT_ERROR && message.type != WKMsgContentType.WK_CONTENT_FORMAT_ERROR) { - message.baseContentMsgModel = WKIM.getInstance().getMsgManager().getMsgContentModel(message.type, json); - if (message.baseContentMsgModel != null) { - message.flame = message.baseContentMsgModel.flame; - message.flameSecond = message.baseContentMsgModel.flameSecond; - } + return message; } + message.baseContentMsgModel = WKIM.getInstance().getMsgManager().getMsgContentModel(message.type, json); //如果是单聊先将channelId改成发送者ID if (!TextUtils.isEmpty(message.channelID) && !TextUtils.isEmpty(message.fromUID) diff --git a/wkim/src/main/java/com/xinbida/wukongim/message/WKConnection.java b/wkim/src/main/java/com/xinbida/wukongim/message/WKConnection.java index a4ee435..49625b5 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/message/WKConnection.java +++ b/wkim/src/main/java/com/xinbida/wukongim/message/WKConnection.java @@ -25,7 +25,6 @@ import com.xinbida.wukongim.message.type.WKSendMsgResult; import com.xinbida.wukongim.message.type.WKSendingMsg; import com.xinbida.wukongim.msgmodel.WKImageContent; import com.xinbida.wukongim.msgmodel.WKMediaMessageContent; -import com.xinbida.wukongim.msgmodel.WKMessageContent; import com.xinbida.wukongim.msgmodel.WKVideoContent; import com.xinbida.wukongim.protocol.WKBaseMsg; import com.xinbida.wukongim.protocol.WKConnectMsg; @@ -379,33 +378,6 @@ public class WKConnection { } } - public void sendMessage(WKMessageContent baseContentModel, WKMsgSetting wkMsgSetting, String channelID, byte channelType) { - final WKMsg wkMsg = new WKMsg(); - wkMsg.type = baseContentModel.type; - wkMsg.setting = wkMsgSetting; - //设置会话信息 - wkMsg.channelID = channelID; - wkMsg.channelType = channelType; - //检查频道信息 - wkMsg.baseContentMsgModel = baseContentModel; - wkMsg.baseContentMsgModel.fromUID = wkMsg.fromUID; - wkMsg.flame = baseContentModel.flame; - wkMsg.flameSecond = baseContentModel.flameSecond; - wkMsg.topicID = baseContentModel.topicID; - sendMessage(wkMsg); - } - - /** - * 发送消息 - * - * @param baseContentModel 消息model - * @param channelID 频道ID - * @param channelType 频道类型 - */ - public void sendMessage(WKMessageContent baseContentModel, String channelID, byte channelType) { - WKMsgSetting setting = new WKMsgSetting(); - sendMessage(baseContentModel, setting, channelID, channelType); - } public void sendMessage(WKMsg msg) { if (TextUtils.isEmpty(msg.fromUID)) { diff --git a/wkim/src/main/java/com/xinbida/wukongim/message/WKProto.java b/wkim/src/main/java/com/xinbida/wukongim/message/WKProto.java index 5d251a5..c9c4f63 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/message/WKProto.java +++ b/wkim/src/main/java/com/xinbida/wukongim/message/WKProto.java @@ -1,6 +1,7 @@ package com.xinbida.wukongim.message; import android.text.TextUtils; +import android.util.Log; import com.xinbida.wukongim.WKIM; import com.xinbida.wukongim.WKIMApplication; @@ -33,6 +34,7 @@ import org.json.JSONObject; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.math.BigInteger; +import java.util.Arrays; /** * 5/21/21 11:28 AM @@ -57,6 +59,8 @@ class WKProto { if (msg.packetType == WKMsgType.CONNECT) { // 连接 bytes = WKProto.getInstance().enConnectMsg((WKConnectMsg) msg); + String str = Arrays.toString(bytes); + WKLoggerUtils.getInstance().e(str); } else if (msg.packetType == WKMsgType.REVACK) { // 收到消息回执 bytes = WKProto.getInstance().enReceivedAckMsg((WKReceivedAckMsg) msg); @@ -72,7 +76,6 @@ class WKProto { } byte[] enConnectMsg(WKConnectMsg connectMsg) { - WKIMApplication.getInstance().protocolVersion = WKIMApplication.getInstance().defaultProtocolVersion; byte[] remainingBytes = WKTypeUtils.getInstance().getRemainingLengthByte(connectMsg.getRemainingLength()); int totalLen = connectMsg.getTotalLen(); WKWrite wkWrite = new WKWrite(totalLen); @@ -252,7 +255,7 @@ class WKProto { return deSendAckMsg(wkRead); } else if (packetType == WKMsgType.DISCONNECT) { return deDisconnectMsg(wkRead); - } else if (packetType == WKMsgType.RECVEIVED) { + } else if (packetType == WKMsgType.RECEIVED) { return deReceivedMsg(wkRead); } else if (packetType == WKMsgType.PONG) { return new WKPongMsg(); @@ -306,6 +309,9 @@ class WKProto { if (!TextUtils.isEmpty(msg.baseContentMsgModel.robotID)) { jsonObject.put("robot_id", msg.baseContentMsgModel.robotID); } + if (!TextUtils.isEmpty(msg.robotID)) { + jsonObject.put("robot_id", msg.robotID); + } if (WKCommonUtils.isNotEmpty(msg.baseContentMsgModel.entities)) { JSONArray jsonArray = new JSONArray(); for (WKMsgEntity entity : msg.baseContentMsgModel.entities) { @@ -322,10 +328,10 @@ class WKProto { jsonObject.put("flame_second", msg.flameSecond); jsonObject.put("flame", msg.flame); } - if (msg.baseContentMsgModel.flame != 0) { - jsonObject.put("flame_second", msg.baseContentMsgModel.flameSecond); - jsonObject.put("flame", msg.baseContentMsgModel.flame); - } +// if (msg.baseContentMsgModel.flame != 0) { +// jsonObject.put("flame_second", msg.baseContentMsgModel.flameSecond); +// jsonObject.put("flame", msg.baseContentMsgModel.flame); +// } } catch (JSONException e) { WKLoggerUtils.getInstance().e(TAG, "getSendPayload error"); } diff --git a/wkim/src/main/java/com/xinbida/wukongim/message/type/WKMsgType.java b/wkim/src/main/java/com/xinbida/wukongim/message/type/WKMsgType.java index 3eaadb0..1642e00 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/message/type/WKMsgType.java +++ b/wkim/src/main/java/com/xinbida/wukongim/message/type/WKMsgType.java @@ -16,7 +16,7 @@ public class WKMsgType { //收到消息确认的报文(s2c) public static final short SENDACK = 4; //收取消息(s2c) - public static final short RECVEIVED = 5; + public static final short RECEIVED = 5; //收取消息确认(c2s) public static final short REVACK = 6; //ping请求 diff --git a/wkim/src/main/java/com/xinbida/wukongim/msgmodel/WKFormatErrorContent.java b/wkim/src/main/java/com/xinbida/wukongim/msgmodel/WKFormatErrorContent.java new file mode 100644 index 0000000..755a373 --- /dev/null +++ b/wkim/src/main/java/com/xinbida/wukongim/msgmodel/WKFormatErrorContent.java @@ -0,0 +1,14 @@ +package com.xinbida.wukongim.msgmodel; + +import com.xinbida.wukongim.message.type.WKMsgContentType; + +public class WKFormatErrorContent extends WKMessageContent { + public WKFormatErrorContent() { + this.type = WKMsgContentType.WK_CONTENT_FORMAT_ERROR; + } + + @Override + public String getDisplayContent() { + return "[消息格式错误]"; + } +} diff --git a/wkim/src/main/java/com/xinbida/wukongim/msgmodel/WKMessageContent.java b/wkim/src/main/java/com/xinbida/wukongim/msgmodel/WKMessageContent.java index 2580358..1c8b782 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/msgmodel/WKMessageContent.java +++ b/wkim/src/main/java/com/xinbida/wukongim/msgmodel/WKMessageContent.java @@ -16,9 +16,15 @@ import java.util.List; public class WKMessageContent implements Parcelable { //内容 public String content; - //发送者id + /** + * Deprecated 后续版本将删除该字段 + */ + @Deprecated public String fromUID; - //发送者名称 + /** + * Deprecated 后续版本将删除该字段 + */ + @Deprecated public String fromName; //消息内容类型 public int type; @@ -31,11 +37,25 @@ public class WKMessageContent implements Parcelable { //搜索关键字 public String searchableWord; //最近会话提示文字 - public String displayContent; -// public int isDelete; + private String displayContent; + /** + * Deprecated 后续版本将删除该字段 + */ + @Deprecated public String robotID; + /** + * Deprecated 后续版本将删除该字段 + */ + @Deprecated public int flame; + /** + * Deprecated 后续版本将删除该字段 + */ + @Deprecated public int flameSecond; + /** + * Deprecated 后续版本将删除该字段 + */ @Deprecated public String topicID; public List entities; @@ -54,7 +74,6 @@ public class WKMessageContent implements Parcelable { searchableWord = in.readString(); displayContent = in.readString(); reply = in.readParcelable(WKReply.class.getClassLoader()); -// isDelete = in.readInt(); robotID = in.readString(); entities = in.createTypedArrayList(WKMsgEntity.CREATOR); flame = in.readInt(); @@ -73,7 +92,6 @@ public class WKMessageContent implements Parcelable { dest.writeString(searchableWord); dest.writeString(displayContent); dest.writeParcelable(reply, flags); -// dest.writeInt(isDelete); dest.writeString(robotID); dest.writeTypedList(entities); dest.writeInt(flame); diff --git a/wkim/src/main/java/com/xinbida/wukongim/msgmodel/WKUnknownContent.java b/wkim/src/main/java/com/xinbida/wukongim/msgmodel/WKUnknownContent.java new file mode 100644 index 0000000..878f9cb --- /dev/null +++ b/wkim/src/main/java/com/xinbida/wukongim/msgmodel/WKUnknownContent.java @@ -0,0 +1,14 @@ +package com.xinbida.wukongim.msgmodel; + +import com.xinbida.wukongim.message.type.WKMsgContentType; + +public class WKUnknownContent extends WKMessageContent{ + public WKUnknownContent(){ + this.type = WKMsgContentType.WK_CONTENT_FORMAT_ERROR; + } + + @Override + public String getDisplayContent() { + return "[未知消息]"; + } +} diff --git a/wkim/src/main/java/com/xinbida/wukongim/protocol/WKBaseMsg.java b/wkim/src/main/java/com/xinbida/wukongim/protocol/WKBaseMsg.java index 1a16815..b58b934 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/protocol/WKBaseMsg.java +++ b/wkim/src/main/java/com/xinbida/wukongim/protocol/WKBaseMsg.java @@ -1,6 +1,5 @@ package com.xinbida.wukongim.protocol; -import com.xinbida.wukongim.WKIMApplication; import com.xinbida.wukongim.message.type.WKMsgType; /** diff --git a/wkim/src/main/java/com/xinbida/wukongim/protocol/WKReceivedMsg.java b/wkim/src/main/java/com/xinbida/wukongim/protocol/WKReceivedMsg.java index 06d8ded..54b6898 100644 --- a/wkim/src/main/java/com/xinbida/wukongim/protocol/WKReceivedMsg.java +++ b/wkim/src/main/java/com/xinbida/wukongim/protocol/WKReceivedMsg.java @@ -55,7 +55,7 @@ public class WKReceivedMsg extends WKBaseMsg { public int topicIDContentLength = 0; public WKReceivedMsg() { - packetType = WKMsgType.RECVEIVED; + packetType = WKMsgType.RECEIVED; } public int getPayloadLength(int remainingLength) {