diff --git a/CHANGELOG.md b/CHANGELOG.md index 9da4047..c825cd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,4 +37,8 @@ ### 1.1.8 * Update message reactions ### 1.1.9 - * Modify message reply to ack issue and Add protocol device flag field \ No newline at end of file + * Modify message reply to ack issue and Add protocol device flag field + ### 1.2.0 + * Modify query channel message error issue + ### 1.2.1 + * Update channel info refresh listener and optimize data insertion issues \ No newline at end of file diff --git a/README.md b/README.md index 6eb2add..ed3dd63 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ #### 安装 ``` dependencies: - wukongimfluttersdk: ^1.1.9 + wukongimfluttersdk: ^1.2.1 ``` #### 引入 ```dart diff --git a/example/assets/ic_default_avatar.png b/example/assets/ic_default_avatar.png new file mode 100644 index 0000000..2366b70 Binary files /dev/null and b/example/assets/ic_default_avatar.png differ diff --git a/example/lib/chat.dart b/example/lib/chat.dart index 92e63d9..cb7813d 100644 --- a/example/lib/chat.dart +++ b/example/lib/chat.dart @@ -59,7 +59,7 @@ class ChatListDataState extends State { void initState() { super.initState(); initListener(); - getMsgList(50000, 0, true); + getMsgList(0, 0, true); } initListener() { diff --git a/example/lib/home.dart b/example/lib/home.dart index 1fae5c9..db1b66a 100644 --- a/example/lib/home.dart +++ b/example/lib/home.dart @@ -49,11 +49,13 @@ class ListViewShowDataState extends State { if (status == WKConnectStatus.connecting) { _connectionStatusStr = '连接中...'; } else if (status == WKConnectStatus.success) { - _connectionStatusStr = '最近会话'; + _connectionStatusStr = '最近会话【连接成功】'; } else if (status == WKConnectStatus.noNetwork) { _connectionStatusStr = '网络异常'; } else if (status == WKConnectStatus.syncMsg) { _connectionStatusStr = '同步消息中...'; + } else if (status == WKConnectStatus.kicked) { + _connectionStatusStr = '未连接,在其他设备登录'; } setState(() {}); }); @@ -163,6 +165,10 @@ class ListViewShowDataState extends State { height: 200, width: 200, fit: BoxFit.cover, + errorBuilder: (BuildContext context, Object exception, + StackTrace? stackTrace) { + return Image.asset('assets/ic_default_avatar.png'); + }, ), ), Expanded( diff --git a/example/lib/http.dart b/example/lib/http.dart index 05e5d2d..08e3ebc 100644 --- a/example/lib/http.dart +++ b/example/lib/http.dart @@ -40,7 +40,7 @@ class HttpUtils { lastSsgSeqs, // 客户端所有频道会话的最后一条消息序列号拼接出来的同步串 格式: channelID:channelType:last_msg_seq|channelID:channelType:last_msg_seq (此字段非必填,如果不填就获取全量数据,填写了获取增量数据,看你自己的需求。) "msg_count": 10 // 每个会话获取最大的消息数量,一般为app点进去第一屏的数据 }); - print(response.data); + // print(response.data); WKSyncConversation conversation = WKSyncConversation(); conversation.conversations = []; if (response.statusCode == HttpStatus.ok) { diff --git a/example/lib/im.dart b/example/lib/im.dart index 9bfcef5..b06ddec 100644 --- a/example/lib/im.dart +++ b/example/lib/im.dart @@ -30,12 +30,18 @@ class IMUtils { "https://lmg.jj20.com/up/allimg/tx30/10121138219844229.jpg", "https://lmg.jj20.com/up/allimg/tx30/10121138219844229.jpg", "https://lmg.jj20.com/up/allimg/tx28/430423183653303.jpg", - "https://lmg.jj20.com/up/allimg/tx23/520420024834916.jpg" + "https://lmg.jj20.com/up/allimg/tx23/520420024834916.jpg", + "https://himg.bdimg.com/sys/portraitn/item/public.1.a535a65d.tJe8MgWmP8zJ456B73Kzfg", + "https://images.liqucn.com/img/h23/h07/img_localize_cb7b78b88d5b33e2ce8921221bf3deae_400x400.png", + "https://img1.baidu.com/it/u=3916753633,2634890492&fm=253&fmt=auto&app=138&f=JPEG?w=400&h=400", + "https://img0.baidu.com/it/u=4210586523,443489101&fm=253&fmt=auto&app=138&f=JPEG?w=304&h=304", + "https://img2.baidu.com/it/u=2559320899,1546883787&fm=253&fmt=auto&app=138&f=JPEG?w=441&h=499", + "https://img0.baidu.com/it/u=2952429745,3806929819&fm=253&fmt=auto&app=138&f=JPEG?w=380&h=380", + "https://img2.baidu.com/it/u=3783923022,668713258&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500", ]; WKIM.shared.messageManager.addOnSyncChannelMsgListener((channelID, channelType, startMessageSeq, endMessageSeq, limit, pullMode, back) { - print('回掉接口'); // 同步某个频道的消息 HttpUtils.syncChannelMsg(channelID, channelType, startMessageSeq, endMessageSeq, limit, pullMode, (p0) => back(p0)); @@ -43,6 +49,7 @@ class IMUtils { // 获取channel资料 WKIM.shared.channelManager .addOnGetChannelListener((channelId, channelType, back) { + print('获取channel资料'); if (channelType == WKChannelType.personal) { // 获取个人资料 // 这里直接返回了。实际情况可通过API请求后返回 @@ -58,9 +65,9 @@ class IMUtils { var index = channel.channelID.hashCode % imgs.length; channel.avatar = imgs[index]; back(channel); - back(channel); } }); + // 监听同步最近会话 WKIM.shared.conversationManager .addOnSyncConversationListener((lastSsgSeqs, msgCount, version, back) { HttpUtils.syncConversation(lastSsgSeqs, msgCount, version, back); diff --git a/lib/db/channel.dart b/lib/db/channel.dart index c561f30..6773a9e 100644 --- a/lib/db/channel.dart +++ b/lib/db/channel.dart @@ -1,6 +1,7 @@ import 'dart:collection'; import 'dart:convert'; +import 'package:sqflite/sqflite.dart'; import 'package:wukongimfluttersdk/db/const.dart'; import 'package:wukongimfluttersdk/entity/channel.dart'; @@ -12,11 +13,11 @@ class ChannelDB { static ChannelDB get shared => _instance; Future query(String channelID, int channelType) async { - String sql = - "select * from ${WKDBConst.tableChannel} where channel_id='$channelID' and channel_type=$channelType"; WKChannel? channel; - List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> list = await WKDBHelper.shared.getDB().query( + WKDBConst.tableChannel, + where: "channel_id=? and channel_type=?", + whereArgs: [channelID, channelType]); if (list.isNotEmpty) { channel = WKDBConst.serializeChannel(list[0]); } @@ -44,8 +45,8 @@ class ChannelDB { if (updateList.isNotEmpty) { for (Map value in updateList) { txn.update(WKDBConst.tableChannel, value, - where: - "channel_id='${value['channel_id']}' and channel_type=${value['channel_type']}"); + where: "channel_id=? and channel_type=?", + whereArgs: [value['channel_id'], value['channel_type']]); } } }); @@ -62,26 +63,27 @@ class ChannelDB { } insert(WKChannel channel) { - WKDBHelper.shared.getDB().insert(WKDBConst.tableChannel, getMap(channel)); + WKDBHelper.shared.getDB().insert(WKDBConst.tableChannel, getMap(channel), + conflictAlgorithm: ConflictAlgorithm.replace); } update(WKChannel channel) { WKDBHelper.shared.getDB().update(WKDBConst.tableChannel, getMap(channel), - where: - "channel_id='${channel.channelID}' and channel_type=${channel.channelType}"); + where: "channel_id=? and channel_type=?", + whereArgs: [channel.channelID, channel.channelType]); } Future isExist(String channelID, int channelType) async { bool isExit = false; - String sql = - "select * from ${WKDBConst.tableChannel} where channel_id='$channelID' and channel_type=$channelType"; - List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> list = await WKDBHelper.shared.getDB().query( + WKDBConst.tableChannel, + where: "channel_id=? and channel_type=?", + whereArgs: [channelID, channelType]); if (list.isNotEmpty) { dynamic data = list[0]; if (data != null) { String channelID = WKDBConst.readString(data, 'channel_id'); - if (channelID != '' && channelID.isNotEmpty) { + if (channelID != '') { isExit = true; } } @@ -104,11 +106,11 @@ class ChannelDB { sb.write("'"); } String channelIds = sb.toString(); - String sql = - "select * from ${WKDBConst.tableChannel} where channel_id in ($channelIds) and channel_type=$channelType"; List list = []; - List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> results = await WKDBHelper.shared.getDB().query( + WKDBConst.tableChannel, + where: "channel_id in (?) and channel_type=?", + whereArgs: [channelIds, channelType]); if (results.isNotEmpty) { for (Map data in results) { list.add(WKDBConst.serializeChannel(data)); diff --git a/lib/db/channel_member.dart b/lib/db/channel_member.dart index 599d2c7..e9e1f0e 100644 --- a/lib/db/channel_member.dart +++ b/lib/db/channel_member.dart @@ -1,3 +1,5 @@ +import 'package:sqflite/sqflite.dart'; + import '../entity/channel_member.dart'; import 'const.dart'; import 'wk_db_helper.dart'; @@ -21,11 +23,11 @@ class ChannelMemberDB { sb.write(uidList[i]); sb.write("'"); } - String sql = - "select * from ${WKDBConst.tableChannelMember} where channel_id='$channelID' and channel_type=$channelType and member_uid in (${sb.toString()})"; List list = []; - List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> results = await WKDBHelper.shared.getDB().query( + WKDBConst.tableChannelMember, + where: "channel_id=? and channel_type=? and member_uid in (?)", + whereArgs: [channelID, channelType, sb.toString()]); if (results.isNotEmpty) { for (Map data in results) { list.add(WKDBConst.serializeChannelMember(data)); @@ -36,11 +38,11 @@ class ChannelMemberDB { Future getMaxVersion(String channelID, int channelType) async { String sql = - "select max(version) version from ${WKDBConst.tableChannelMember} where channel_id ='$channelID' and channel_type=$channelType limit 0, 1"; + "select max(version) version from ${WKDBConst.tableChannelMember} where channel_id =? and channel_type=? limit 0, 1"; int version = 0; List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]); if (results.isNotEmpty) { dynamic data = results[0]; version = WKDBConst.readInt(data, 'version'); @@ -51,10 +53,11 @@ class ChannelMemberDB { Future queryWithUID( String channelId, int channelType, String memberUID) async { String sql = - "select ${WKDBConst.tableChannelMember}.*,$channelCols from ${WKDBConst.tableChannelMember} left join ${WKDBConst.tableChannel} on ${WKDBConst.tableChannelMember}.member_uid = ${WKDBConst.tableChannel}.channel_id AND ${WKDBConst.tableChannel}.channel_type=1 where (${WKDBConst.tableChannelMember}.channel_id='$channelId' and ${WKDBConst.tableChannelMember}.channel_type=$channelType and ${WKDBConst.tableChannelMember}.member_uid='$memberUID')"; + "select ${WKDBConst.tableChannelMember}.*,$channelCols from ${WKDBConst.tableChannelMember} left join ${WKDBConst.tableChannel} on ${WKDBConst.tableChannelMember}.member_uid = ${WKDBConst.tableChannel}.channel_id AND ${WKDBConst.tableChannel}.channel_type=1 where (${WKDBConst.tableChannelMember}.channel_id=? and ${WKDBConst.tableChannelMember}.channel_type=? and ${WKDBConst.tableChannelMember}.member_uid=?)"; WKChannelMember? channelMember; - List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> list = await WKDBHelper.shared + .getDB() + .rawQuery(sql, [channelId, channelType, memberUID]); if (list.isNotEmpty) { channelMember = WKDBConst.serializeChannelMember(list[0]); } @@ -64,10 +67,10 @@ class ChannelMemberDB { Future?> queryWithChannel( String channelId, int channelType) async { String sql = - "select ${WKDBConst.tableChannelMember}.*,$channelCols from ${WKDBConst.tableChannelMember} LEFT JOIN ${WKDBConst.tableChannel} on ${WKDBConst.tableChannelMember}.member_uid=${WKDBConst.tableChannel}.channel_id and ${WKDBConst.tableChannel}.channel_type=1 where ${WKDBConst.tableChannelMember}.channel_id='$channelId' and ${WKDBConst.tableChannelMember}.channel_type=$channelType and ${WKDBConst.tableChannelMember}.is_deleted=0 and ${WKDBConst.tableChannelMember}.status=1 order by ${WKDBConst.tableChannelMember}.role=1 desc,${WKDBConst.tableChannelMember}.role=2 desc,${WKDBConst.tableChannelMember}.created_at asc"; + "select ${WKDBConst.tableChannelMember}.*,$channelCols from ${WKDBConst.tableChannelMember} LEFT JOIN ${WKDBConst.tableChannel} on ${WKDBConst.tableChannelMember}.member_uid=${WKDBConst.tableChannel}.channel_id and ${WKDBConst.tableChannel}.channel_type=1 where ${WKDBConst.tableChannelMember}.channel_id=? and ${WKDBConst.tableChannelMember}.channel_type=? and ${WKDBConst.tableChannelMember}.is_deleted=0 and ${WKDBConst.tableChannelMember}.status=1 order by ${WKDBConst.tableChannelMember}.role=1 desc,${WKDBConst.tableChannelMember}.role=2 desc,${WKDBConst.tableChannelMember}.created_at asc"; List list = []; List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + await WKDBHelper.shared.getDB().rawQuery(sql, [channelId, channelType]); if (results.isNotEmpty) { for (Map data in results) { list.add(WKDBConst.serializeChannelMember(data)); @@ -88,11 +91,11 @@ class ChannelMemberDB { sb.write("'"); } - String sql = - "select * from ${WKDBConst.tableChannelMember} where channel_id ='$channelID' and channel_type=$channelType and member_uid in (${sb.toString()})"; List list = []; - List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> results = await WKDBHelper.shared.getDB().query( + WKDBConst.tableChannelMember, + where: "channel_id=? and channel_type=? and member_uid in (?) ", + whereArgs: [channelID, channelType, sb.toString()]); if (results.isNotEmpty) { for (Map data in results) { list.add(WKDBConst.serializeChannelMember(data)); @@ -122,15 +125,20 @@ class ChannelMemberDB { WKDBHelper.shared.getDB().transaction((txn) async { if (insertCVList.isNotEmpty) { for (Map value in insertCVList) { - txn.insert(WKDBConst.tableChannelMember, value); + txn.insert(WKDBConst.tableChannelMember, value, + conflictAlgorithm: ConflictAlgorithm.replace); } } if (updateCVList.isNotEmpty) { for (Map value in updateCVList) { txn.update(WKDBConst.tableChannelMember, value, - where: - "channel_id='${value['channel_id']}' and channel_type=${value['channel_type']} and member_uid='${value['member_uid']}'"); + where: "channel_id=? and channel_type=? and member_uid=?", + whereArgs: [ + value['channel_id'], + value['channel_type'], + value['member_uid'] + ]); } } }); diff --git a/lib/db/conversation.dart b/lib/db/conversation.dart index 6cd06fc..d431468 100644 --- a/lib/db/conversation.dart +++ b/lib/db/conversation.dart @@ -1,7 +1,9 @@ import 'dart:collection'; import 'dart:convert'; +import 'package:sqflite/sqflite.dart'; import 'package:wukongimfluttersdk/db/const.dart'; +import 'package:wukongimfluttersdk/entity/channel.dart'; import '../entity/conversation.dart'; import 'wk_db_helper.dart'; @@ -24,7 +26,10 @@ class ConversationDB { if (results.isNotEmpty) { for (Map data in results) { WKConversationMsg msg = WKDBConst.serializeCoversation(data); - list.add(getUIMsg(msg)); + WKChannel wkChannel = WKDBConst.serializeChannel(data); + WKUIConversationMsg uiMsg = getUIMsg(msg); + uiMsg.setWkChannel(wkChannel); + list.add(uiMsg); } } return list; @@ -35,7 +40,8 @@ class ConversationDB { data['is_deleted'] = 1; int row = await WKDBHelper.shared.getDB().update( WKDBConst.tableConversation, data, - where: "channel_id='$channelID' and channel_type=$channelType"); + where: "channel_id=? and channel_type=?", + whereArgs: [channelID, channelType]); return row > 0; } @@ -46,9 +52,9 @@ class ConversationDB { conversationMsg.channelID, conversationMsg.channelType); if (lastMsg == null || lastMsg.channelID.isEmpty) { - row = await WKDBHelper.shared - .getDB() - .insert(WKDBConst.tableConversation, getMap(conversationMsg, false)); + row = await WKDBHelper.shared.getDB().insert( + WKDBConst.tableConversation, getMap(conversationMsg, false), + conflictAlgorithm: ConflictAlgorithm.replace); } else { conversationMsg.unreadCount = lastMsg.unreadCount + conversationMsg.unreadCount; @@ -66,11 +72,11 @@ class ConversationDB { Future queryMsgByMsgChannelId( String channelId, int channelType) async { WKConversationMsg? msg; - String sql = - "select * from ${WKDBConst.tableConversation} where channel_id='$channelId' and channel_type=$channelType"; - List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> list = await WKDBHelper.shared.getDB().query( + WKDBConst.tableConversation, + where: "channel_id=? and channel_type=?", + whereArgs: [channelId, channelType]); if (list.isNotEmpty) { msg = WKDBConst.serializeCoversation(list[0]); } @@ -116,11 +122,11 @@ class ConversationDB { sb.write(channelIds[i]); sb.write("'"); } - String sql = - "select * from '${WKDBConst.tableConversation}' where channel_id in(${sb.toString()})"; List list = []; - List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> results = await WKDBHelper.shared.getDB().query( + WKDBConst.tableConversation, + where: "channel_id in (?)", + whereArgs: [sb.toString()]); if (results.isNotEmpty) { for (Map data in results) { list.add(WKDBConst.serializeCoversation(data)); @@ -160,14 +166,15 @@ class ConversationDB { WKDBHelper.shared.getDB().transaction((txn) async { if (insertList.isNotEmpty) { for (int i = 0; i < insertList.length; i++) { - txn.insert(WKDBConst.tableConversation, insertList[i]); + txn.insert(WKDBConst.tableConversation, insertList[i], + conflictAlgorithm: ConflictAlgorithm.replace); } } if (updateList.isNotEmpty) { for (Map value in updateList) { txn.update(WKDBConst.tableConversation, value, - where: - "channel_id='${value['channel_id']}' and channel_type=${value['channel_type']}"); + where: "channel_id=? and channel_type=?", + whereArgs: [value['channel_id'], value['channel_type']]); } } }); @@ -196,7 +203,8 @@ class ConversationDB { dynamic map, String channelID, int channelType) async { return await WKDBHelper.shared.getDB().update( WKDBConst.tableConversation, map, - where: "channel_id='$channelID' and channel_type=$channelType"); + where: "channel_id=? and channel_type=?", + whereArgs: [channelID, channelType]); } WKUIConversationMsg getUIMsg(WKConversationMsg conversationMsg) { diff --git a/lib/db/message.dart b/lib/db/message.dart index 2a58ac2..5c53349 100644 --- a/lib/db/message.dart +++ b/lib/db/message.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:sqflite/sqflite.dart'; import 'package:wukongimfluttersdk/db/channel.dart'; import 'package:wukongimfluttersdk/db/const.dart'; import 'package:wukongimfluttersdk/db/reaction.dart'; @@ -23,10 +24,10 @@ class MessageDB { Future isExist(String clientMsgNo) async { bool isExist = false; - String sql = - "select * from ${WKDBConst.tableMessage} where client_msg_no='$clientMsgNo'"; - List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> list = await WKDBHelper.shared.getDB().query( + WKDBConst.tableMessage, + where: "client_msg_no=?", + whereArgs: [clientMsgNo]); if (list.isNotEmpty) { isExist = true; } @@ -45,36 +46,35 @@ class MessageDB { msg.clientMsgNO = WKIM.shared.messageManager.generateClientMsgNo(); } } - return await WKDBHelper.shared - .getDB() - .insert(WKDBConst.tableMessage, getMap(msg)); + return await WKDBHelper.shared.getDB().insert( + WKDBConst.tableMessage, getMap(msg), + conflictAlgorithm: ConflictAlgorithm.replace); } Future updateMsg(WKMsg msg) async { return await WKDBHelper.shared.getDB().update( WKDBConst.tableMessage, getMap(msg), - where: "client_seq=${msg.clientSeq}"); + where: "client_seq=?", whereArgs: [msg.clientSeq]); } Future updateMsgWithField(dynamic map, int clientSeq) async { - return await WKDBHelper.shared - .getDB() - .update(WKDBConst.tableMessage, map, where: "client_seq=$clientSeq"); + return await WKDBHelper.shared.getDB().update(WKDBConst.tableMessage, map, + where: "client_seq=?", whereArgs: [clientSeq]); } Future updateMsgWithFieldAndClientMsgNo( dynamic map, String clientMsgNO) async { return await WKDBHelper.shared.getDB().update(WKDBConst.tableMessage, map, - where: "client_msg_no='$clientMsgNO'"); + where: "client_msg_no=?", whereArgs: [clientMsgNO]); } Future queryWithClientMsgNo(String clientMsgNo) async { WKMsg? wkMsg; String sql = - "select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.client_msg_no='$clientMsgNo'"; + "select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.client_msg_no=?"; List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + await WKDBHelper.shared.getDB().rawQuery(sql, [clientMsgNo]); if (list.isNotEmpty) { wkMsg = WKDBConst.serializeWKMsg(list[0]); } @@ -88,10 +88,10 @@ class MessageDB { Future queryWithClientSeq(int clientSeq) async { WKMsg? wkMsg; String sql = - "select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.client_seq=$clientSeq"; + "select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.client_seq=?"; List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + await WKDBHelper.shared.getDB().rawQuery(sql, [clientSeq]); if (list.isNotEmpty) { wkMsg = WKDBConst.serializeWKMsg(list[0]); } @@ -114,10 +114,10 @@ class MessageDB { } String sql = - "select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.message_id in (${sb.toString()})"; + "select $messageCols,$extraCols from ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} ON ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.message_id in (?)"; List list = []; List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + await WKDBHelper.shared.getDB().rawQuery(sql, [sb.toString()]); if (results.isNotEmpty) { for (Map data in results) { list.add(WKDBConst.serializeWKMsg(data)); @@ -129,9 +129,9 @@ class MessageDB { Future queryMaxOrderSeq(String channelID, int channelType) async { int maxOrderSeq = 0; String sql = - "select max(order_seq) order_seq from ${WKDBConst.tableMessage} where channel_id ='$channelID' and channel_type=$channelType and type<>99 and type<>0 and is_deleted=0"; + "select max(order_seq) order_seq from ${WKDBConst.tableMessage} where channel_id =? and channel_type=? and type<>99 and type<>0 and is_deleted=0"; List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]); if (list.isNotEmpty) { dynamic data = list[0]; maxOrderSeq = WKDBConst.readInt(data, 'order_seq'); @@ -141,10 +141,10 @@ class MessageDB { Future getMaxMessageSeq(String channelID, int channelType) async { String sql = - "SELECT max(message_seq) message_seq FROM ${WKDBConst.tableMessage} WHERE channel_id='$channelID' AND channel_type=$channelType"; + "SELECT max(message_seq) message_seq FROM ${WKDBConst.tableMessage} WHERE channel_id=? AND channel_type=?"; int messageSeq = 0; List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]); if (list.isNotEmpty) { dynamic data = list[0]; messageSeq = WKDBConst.readInt(data, 'message_seq'); @@ -156,9 +156,10 @@ class MessageDB { String channelID, int channelType, int maxOrderSeq, int limit) async { int minOrderSeq = 0; String sql = - "select order_seq from ${WKDBConst.tableMessage} where channel_id='$channelID' and channel_type='$channelType' and type<>99 and order_seq <= $maxOrderSeq order by order_seq desc limit $limit"; - List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + "select order_seq from ${WKDBConst.tableMessage} where channel_id=? and channel_type=? and type<>99 and order_seq <=? order by order_seq desc limit ?"; + List> list = await WKDBHelper.shared + .getDB() + .rawQuery(sql, [channelID, channelType, maxOrderSeq, limit]); if (list.isNotEmpty) { dynamic data = list[0]; minOrderSeq = WKDBConst.readInt(data, 'order_seq'); @@ -170,34 +171,41 @@ class MessageDB { int oldestOrderSeq, bool contain, int pullMode, int limit) async { List msgList = []; String sql; - + var args = []; if (oldestOrderSeq <= 0) { sql = - "SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id='$channelId' and ${WKDBConst.tableMessage}.channel_type=$channelType and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99) where is_deleted=0 and is_mutual_deleted=0 order by order_seq desc limit 0,$limit"; + "SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id=? and ${WKDBConst.tableMessage}.channel_type=? and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99) where is_deleted=0 and is_mutual_deleted=0 order by order_seq desc limit 0,?"; + args.add(channelId); + args.add(channelType); + args.add(limit); } else { if (pullMode == 0) { if (contain) { sql = - "SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id='$channelId' and ${WKDBConst.tableMessage}.channel_type=$channelType and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq<=$oldestOrderSeq) where is_deleted=0 and is_mutual_deleted=0 order by order_seq desc limit 0,$limit"; + "SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id=? and ${WKDBConst.tableMessage}.channel_type=? and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq<=?) where is_deleted=0 and is_mutual_deleted=0 order by order_seq desc limit 0,?"; } else { sql = - "SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id='$channelId' and ${WKDBConst.tableMessage}.channel_type=$channelType and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq<$oldestOrderSeq) where is_deleted=0 and is_mutual_deleted=0 order by order_seq desc limit 0,$limit"; + "SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id=? and ${WKDBConst.tableMessage}.channel_type=? and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq>=$oldestOrderSeq) where is_deleted=0 and is_mutual_deleted=0 order by order_seq asc limit 0,$limit"; + "SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id=? and ${WKDBConst.tableMessage}.channel_type=? and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq>=?) where is_deleted=0 and is_mutual_deleted=0 order by order_seq asc limit 0,?"; } else { sql = - "SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id='$channelId' and ${WKDBConst.tableMessage}.channel_type=$channelType and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq>$oldestOrderSeq) where is_deleted=0 and is_mutual_deleted=0 order by order_seq asc limit 0,$limit"; + "SELECT * FROM (SELECT $messageCols,$extraCols FROM ${WKDBConst.tableMessage} LEFT JOIN ${WKDBConst.tableMessageExtra} on ${WKDBConst.tableMessage}.message_id=${WKDBConst.tableMessageExtra}.message_id WHERE ${WKDBConst.tableMessage}.channel_id=? and ${WKDBConst.tableMessage}.channel_type=? and ${WKDBConst.tableMessage}.type<>0 and ${WKDBConst.tableMessage}.type<>99 AND ${WKDBConst.tableMessage}.order_seq>?) where is_deleted=0 and is_mutual_deleted=0 order by order_seq asc limit 0,?"; } } + args.add(channelId); + args.add(channelType); + args.add(oldestOrderSeq); + args.add(limit); } List messageIds = []; List replyMsgIds = []; List fromUIDs = []; List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + await WKDBHelper.shared.getDB().rawQuery(sql, args); if (results.isNotEmpty) { WKChannel? wkChannel = @@ -468,10 +476,11 @@ class MessageDB { Future getDeletedCount(int minMessageSeq, int maxMessageSeq, String channelID, int channelType) async { String sql = - "select count(*) num from ${WKDBConst.tableMessage} where channel_id='$channelID' and channel_type=$channelType and message_seq>$minMessageSeq and message_seq<$maxMessageSeq and is_deleted=1"; + "select count(*) num from ${WKDBConst.tableMessage} where channel_id=? and channel_type=? and message_seq>? and message_seq> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> list = await WKDBHelper.shared + .getDB() + .rawQuery(sql, [channelID, channelType, minMessageSeq, maxMessageSeq]); if (list.isNotEmpty) { dynamic data = list[0]; num = WKDBConst.readInt(data, 'num'); @@ -485,14 +494,15 @@ class MessageDB { int messageSeq = 0; if (pullMode == 1) { sql = - "select message_seq from ${WKDBConst.tableMessage} where channel_id='$channelID' and channel_type=$channelType and order_seq>$oldestOrderSeq and message_seq<>0 order by message_seq desc limit 1"; + "select message_seq from ${WKDBConst.tableMessage} where channel_id=? and channel_type=? and order_seq>? and message_seq<>0 order by message_seq desc limit 1"; } else { sql = - "select message_seq from ${WKDBConst.tableMessage} where channel_id=$channelID and channel_type=$channelType and order_seq<$oldestOrderSeq and message_seq<>0 order by message_seq asc limit 1"; + "select message_seq from ${WKDBConst.tableMessage} where channel_id=? and channel_type=? and order_seq0 order by message_seq asc limit 1"; } - List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> list = await WKDBHelper.shared + .getDB() + .rawQuery(sql, [channelID, channelType, oldestOrderSeq]); if (list.isNotEmpty) { dynamic data = list[0]; messageSeq = WKDBConst.readInt(data, 'message_seq'); @@ -563,7 +573,8 @@ class MessageDB { if (cvList.isNotEmpty) { WKDBHelper.shared.getDB().transaction((txn) async { for (int i = 0; i < cvList.length; i++) { - txn.insert(WKDBConst.tableMessage, cvList[i]); + txn.insert(WKDBConst.tableMessage, cvList[i], + conflictAlgorithm: ConflictAlgorithm.replace); } }); } @@ -572,8 +583,7 @@ class MessageDB { Future> queryWithClientMsgNos(List clientMsgNos) async { List msgs = []; StringBuffer sb = StringBuffer(); - sb.write( - "select * from ${WKDBConst.tableMessage} where client_msg_no in ("); + for (int i = 0, size = clientMsgNos.length; i < size; i++) { if (i != 0) { sb.write(","); @@ -582,10 +592,11 @@ class MessageDB { sb.write(clientMsgNos[i]); sb.write("'"); } - sb.write(")"); - List> results = - await WKDBHelper.shared.getDB().rawQuery(sb.toString()); + List> results = await WKDBHelper.shared.getDB().query( + WKDBConst.tableMessage, + where: "client_msg_no in (?)", + whereArgs: [sb.toString()]); if (results.isNotEmpty) { for (Map data in results) { msgs.add(WKDBConst.serializeWKMsg(data)); @@ -621,12 +632,14 @@ class MessageDB { WKDBHelper.shared.getDB().transaction((txn) async { if (insertCVList.isNotEmpty) { for (int i = 0; i < insertCVList.length; i++) { - txn.insert(WKDBConst.tableMessageExtra, insertCVList[0]); + txn.insert(WKDBConst.tableMessageExtra, insertCVList[0], + conflictAlgorithm: ConflictAlgorithm.replace); } if (updateCVList.isNotEmpty) { for (int i = 0; i < updateCVList.length; i++) { txn.update(WKDBConst.tableMessageExtra, updateCVList[0], - where: "message_id='${updateCVList[i]['message_id']}'"); + where: "message_id=?", + whereArgs: [updateCVList[i]['message_id']]); } } } @@ -639,9 +652,9 @@ class MessageDB { String channelID, int channelType) async { int extraVersion = 0; String sql = - "select max(extra_version) extra_version from ${WKDBConst.tableMessageExtra} where channel_id ='$channelID' and channel_type=$channelType"; + "select max(extra_version) extra_version from ${WKDBConst.tableMessageExtra} where channel_id =? and channel_type=?"; List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]); if (list.isNotEmpty) { dynamic data = list[0]; extraVersion = WKDBConst.readInt(data, 'extra_version'); @@ -651,10 +664,10 @@ class MessageDB { Future> queryMsgExtraWithNeedUpload(int needUpload) async { String sql = - "select * from ${WKDBConst.tableMessageExtra} where needUpload=$needUpload"; + "select * from ${WKDBConst.tableMessageExtra} where need_upload=?"; List list = []; List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + await WKDBHelper.shared.getDB().rawQuery(sql, [needUpload]); if (results.isNotEmpty) { for (Map data in results) { list.add(WKDBConst.serializeMsgExtra(data)); @@ -666,10 +679,10 @@ class MessageDB { Future queryMsgExtraWithMsgID(String messageID) async { WKMsgExtra? msgExtra; - String sql = - "select * from ${WKDBConst.tableMessageExtra} where message_id='$messageID'"; - List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> list = await WKDBHelper.shared.getDB().query( + WKDBConst.tableMessageExtra, + where: "message_id=?", + whereArgs: [messageID]); if (list.isNotEmpty) { msgExtra = WKDBConst.serializeMsgExtra(list[0]); } @@ -678,8 +691,6 @@ class MessageDB { Future> queryMsgExtrasWithMsgIds(List msgIds) async { StringBuffer sb = StringBuffer(); - sb.write( - "select * from ${WKDBConst.tableMessageExtra} where message_id in ("); for (int i = 0, size = msgIds.length; i < size; i++) { if (i != 0) { sb.write(","); @@ -688,10 +699,11 @@ class MessageDB { sb.write(msgIds[i]); sb.write("'"); } - sb.write(")"); List list = []; - List> results = - await WKDBHelper.shared.getDB().rawQuery(sb.toString()); + List> results = await WKDBHelper.shared.getDB().query( + WKDBConst.tableMessageExtra, + where: "message_id in (?)", + whereArgs: [sb.toString()]); if (results.isNotEmpty) { for (Map data in results) { list.add(WKDBConst.serializeMsgExtra(data)); @@ -713,9 +725,9 @@ class MessageDB { String channelID, int channelType) async { WKMsg? wkMsg; String sql = - "select * from ${WKDBConst.tableMessage} where channel_id='$channelID' and channel_type=$channelType and is_deleted=0 and type<>0 and type<>99 order by order_seq desc limit 1"; + "select * from ${WKDBConst.tableMessage} where channel_id=? and channel_type=? and is_deleted=0 and type<>0 and type<>99 order by order_seq desc limit 1"; List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]); if (list.isNotEmpty) { dynamic data = list[0]; if (data != null) { diff --git a/lib/db/reaction.dart b/lib/db/reaction.dart index d949e81..954a67f 100644 --- a/lib/db/reaction.dart +++ b/lib/db/reaction.dart @@ -1,3 +1,4 @@ +import 'package:sqflite/sqflite.dart'; import 'package:wukongimfluttersdk/entity/msg.dart'; import 'const.dart'; @@ -10,11 +11,11 @@ class ReactionDB { Future queryMaxSeqWithChannel(String channelID, int channelType) async { String sql = - "select max(seq) seq from ${WKDBConst.tableMessageReaction} where channel_id='$channelID' and channel_type=$channelType limit 0, 1"; + "select max(seq) seq from ${WKDBConst.tableMessageReaction} where channel_id=? and channel_type=? limit 0, 1"; int version = 0; List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + await WKDBHelper.shared.getDB().rawQuery(sql, [channelID, channelType]); if (list.isNotEmpty) { dynamic data = list[0]; if (data != null) { @@ -25,12 +26,12 @@ class ReactionDB { } Future> queryWithMessageId(String messageId) async { - String sql = - "select * from ${WKDBConst.tableMessageReaction} where message_id='$messageId' and is_deleted=0 ORDER BY created_at desc"; List list = []; - - List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> results = await WKDBHelper.shared.getDB().query( + WKDBConst.tableMessageReaction, + where: "message_id=? and is_deleted=0", + whereArgs: [messageId], + orderBy: "created_at desc"); if (results.isNotEmpty) { for (Map data in results) { list.add(WKDBConst.serializeMsgReation(data)); @@ -51,11 +52,12 @@ class ReactionDB { sb.write("'"); } - String sql = - "select * from ${WKDBConst.tableMessageReaction} where message_id in (${sb.toString()}) and is_deleted=0 ORDER BY created_at desc"; List list = []; - List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> results = await WKDBHelper.shared.getDB().query( + WKDBConst.tableMessageReaction, + where: "message_id in (?) and is_deleted=0", + whereArgs: [sb.toString()], + orderBy: "created_at desc"); if (results.isNotEmpty) { for (Map data in results) { list.add(WKDBConst.serializeMsgReation(data)); @@ -86,22 +88,22 @@ class ReactionDB { map['seq'] = reaction.seq; map['emoji'] = reaction.emoji; WKDBHelper.shared.getDB().update(WKDBConst.tableMessageReaction, map, - where: "message_id='${reaction.messageID}' and uid='${reaction.uid}'"); + where: "message_id=? and uid=?", + whereArgs: [reaction.messageID, reaction.uid]); } insertReaction(WKMsgReaction reaction) { - WKDBHelper.shared - .getDB() - .insert(WKDBConst.tableMessageReaction, getReactionMap(reaction)); + WKDBHelper.shared.getDB().insert( + WKDBConst.tableMessageReaction, getReactionMap(reaction), + conflictAlgorithm: ConflictAlgorithm.replace); } Future isExistReaction(String uid, String messageID) async { bool isExist = false; - String sql = - "select * from ${WKDBConst.tableMessageReaction} where message_id='$messageID' and uid='$uid' "; - - List> list = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> list = await WKDBHelper.shared.getDB().query( + WKDBConst.tableMessageReaction, + where: "message_id=? and uid=?", + whereArgs: [messageID, uid]); if (list.isNotEmpty) { isExist = true; } diff --git a/lib/db/reminder.dart b/lib/db/reminder.dart index 2047f09..432af13 100644 --- a/lib/db/reminder.dart +++ b/lib/db/reminder.dart @@ -1,6 +1,7 @@ import 'dart:collection'; import 'dart:convert'; +import 'package:sqflite/sqflite.dart'; import 'package:wukongimfluttersdk/db/const.dart'; import 'package:wukongimfluttersdk/db/conversation.dart'; import 'package:wukongimfluttersdk/db/wk_db_helper.dart'; @@ -32,12 +33,12 @@ class ReminderDB { Future> queryWithChannel( String channelID, int channelType, int done) async { - String sql = - "select * from ${WKDBConst.tableReminders} where channel_id='$channelID' and channel_type=$channelType and done=$done order by message_seq desc"; List list = []; - - List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> results = await WKDBHelper.shared.getDB().query( + WKDBConst.tableReminders, + where: "channel_id=? and channel_type=? and done=?", + whereArgs: [channelID, channelType, done], + orderBy: "message_seq desc"); if (results.isNotEmpty) { for (Map data in results) { list.add(WKDBConst.serializeReminder(data)); @@ -84,7 +85,8 @@ class ReminderDB { WKDBHelper.shared.getDB().transaction((txn) async { if (addList.isNotEmpty) { for (Map value in addList) { - txn.insert(WKDBConst.tableReminders, value); + txn.insert(WKDBConst.tableReminders, value, + conflictAlgorithm: ConflictAlgorithm.replace); } } if (updateList.isNotEmpty) { @@ -119,16 +121,17 @@ class ReminderDB { StringBuffer sb = StringBuffer(); for (int i = 0, size = channelIds.length; i < size; i++) { if (i != 0) { - sb.write("'"); + sb.write(","); } + sb.write("'"); sb.write(channelIds[i]); sb.write("'"); } - String sql = - "select * from ${WKDBConst.tableReminders} where channel_id in (${sb.toString()})"; List list = []; - List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> results = await WKDBHelper.shared.getDB().query( + WKDBConst.tableReminders, + where: "channel_id in (?)", + whereArgs: [sb.toString()]); if (results.isNotEmpty) { for (Map data in results) { list.add(WKDBConst.serializeReminder(data)); @@ -145,11 +148,11 @@ class ReminderDB { } sb.write(ids[i]); } - String sql = - "select * from ${WKDBConst.tableReminders} where reminder_id in (${sb.toString()})"; List list = []; - List> results = - await WKDBHelper.shared.getDB().rawQuery(sql); + List> results = await WKDBHelper.shared.getDB().query( + WKDBConst.tableReminders, + where: "reminder_id in (?)", + whereArgs: [sb.toString()]); if (results.isNotEmpty) { for (Map data in results) { list.add(WKDBConst.serializeReminder(data)); diff --git a/lib/manager/channel_manager.dart b/lib/manager/channel_manager.dart index 920d46a..9d81e9d 100644 --- a/lib/manager/channel_manager.dart +++ b/lib/manager/channel_manager.dart @@ -16,9 +16,8 @@ class WKChannelManager { fetchChannelInfo(String channelID, int channelType) { if (_getChannelInfoBack != null) { - _getChannelInfoBack!(channelID, channelType, (liMChannel) { - addOrUpdateChannel(liMChannel); - ChannelDB.shared.saveOrUpdate(liMChannel); + _getChannelInfoBack!(channelID, channelType, (wkChannel) { + addOrUpdateChannel(wkChannel); }); } } diff --git a/lib/manager/connect_manager.dart b/lib/manager/connect_manager.dart index b051470..65ae2d4 100644 --- a/lib/manager/connect_manager.dart +++ b/lib/manager/connect_manager.dart @@ -250,6 +250,7 @@ class WKConnectionManager { _decodePacket(Uint8List data) { var packet = WKIM.shared.options.proto.decode(data); Logs.debug('解码出包->$packet'); + Logs.debug('解码出包类型->${packet.header.packetType}'); if (packet.header.packetType == PacketType.connack) { var connackPacket = packet as ConnackPacket; if (connackPacket.reasonCode == 1) { @@ -293,6 +294,7 @@ class WKConnectionManager { } _closeAll() { + _isLogout = true; WKIM.shared.options.uid = ''; WKIM.shared.options.token = ''; WKIM.shared.messageManager.updateSendingMsgFail(); diff --git a/lib/proto/packet.dart b/lib/proto/packet.dart index a5de955..a89d745 100644 --- a/lib/proto/packet.dart +++ b/lib/proto/packet.dart @@ -131,6 +131,9 @@ class RecvPacket extends Packet { class DisconnectPacket extends Packet { int reasonCode = 0; String reason = ""; + DisconnectPacket() { + header.packetType = PacketType.disconnect; + } } class PingPacket extends Packet { diff --git a/lib/proto/proto.dart b/lib/proto/proto.dart index 7670c32..8c82120 100644 --- a/lib/proto/proto.dart +++ b/lib/proto/proto.dart @@ -171,7 +171,6 @@ Uint8List encodeSend(SendPacket packet) { Uint8List encodeRecvAck(RecvAckPacket packet) { WriteData write = WriteData(); - print("发送ack ${packet.messageID}"); write.writeUint64(packet.messageID); write.writeUint32(packet.messageSeq); return write.toUint8List(); diff --git a/pubspec.yaml b/pubspec.yaml index 8e64d7a..152c13c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ description: wukong IM flutter sdk # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.1.9 +version: 1.2.1 homepage: https://github.com/WuKongIM/WuKongIMFlutterSDK environment: