From a19656e45e5daadcea3e16c45f723789b8097449 Mon Sep 17 00:00:00 2001 From: SL Date: Sat, 19 Aug 2023 21:10:18 +0800 Subject: [PATCH] update sync channel msgs --- CHANGELOG.md | 4 +++- README.md | 2 +- example/lib/chat.dart | 2 ++ example/lib/http.dart | 3 +-- example/pubspec.lock | 2 +- lib/db/const.dart | 2 +- lib/db/message.dart | 12 ++++++------ lib/manager/connect_manager.dart | 27 ++++++++++++++------------- lib/manager/message_manager.dart | 20 ++++++++++++++------ lib/proto/proto.dart | 1 - pubspec.yaml | 2 +- 11 files changed, 44 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33f25a6..39623a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,4 +3,6 @@ ### 1.0.1 * update connection ### 1.0.2 - * Reconnect when handling connection errors \ No newline at end of file + * Reconnect when handling connection errors +### 1.0.3 + * update sync channel msgs \ No newline at end of file diff --git a/README.md b/README.md index de9eea9..d93ef43 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ #### 安装 ``` dependencies: - wukongimfluttersdk: ^1.0.2 + wukongimfluttersdk: ^1.0.3 ``` #### 引入 ```dart diff --git a/example/lib/chat.dart b/example/lib/chat.dart index d5f8119..c17974a 100644 --- a/example/lib/chat.dart +++ b/example/lib/chat.dart @@ -102,6 +102,8 @@ class ChatListDataState extends State { Future.delayed(const Duration(milliseconds: 300), () { _scrollController.jumpTo(_scrollController.position.maxScrollExtent); }); + }, () { + print('消息同步中'); }); } diff --git a/example/lib/http.dart b/example/lib/http.dart index b7f27c0..b89c3d4 100644 --- a/example/lib/http.dart +++ b/example/lib/http.dart @@ -79,7 +79,7 @@ class HttpUtils { int pullMode, Function(WKSyncChannelMsg) back) async { final dio = Dio(); - print('请求参数${UserInfo.uid},$channelID'); + print('请求参数${startMsgSeq},$endMsgSeq'); final response = await dio.post('$apiURL/channel/messagesync', data: { "login_uid": UserInfo.uid, // 当前登录用户uid "channel_id": channelID, // 频道ID @@ -118,7 +118,6 @@ class HttpUtils { msg.channelID = json['channel_id']; // msg.payload = json['payload']; String payload = json['payload']; - // print('消息发送着:${msg.from_uid},${msg.channel_id}'); try { msg.payload = jsonDecode(utf8.decode(base64Decode(payload))); // print('查询的消息${msg.payload}'); diff --git a/example/pubspec.lock b/example/pubspec.lock index cf56fd9..5499623 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -499,7 +499,7 @@ packages: path: ".." relative: true source: path - version: "1.0.2" + version: "1.0.3" x25519: dependency: transitive description: diff --git a/lib/db/const.dart b/lib/db/const.dart index d9f15de..5df30ea 100644 --- a/lib/db/const.dart +++ b/lib/db/const.dart @@ -28,7 +28,7 @@ class WKDBConst { msg.messageSeq = readInt(data, 'message_seq'); msg.clientSeq = readInt(data, 'client_seq'); msg.timestamp = readInt(data, 'timestamp'); - msg.fromUID = readString(data, ' from_uid'); + msg.fromUID = readString(data, 'from_uid'); msg.channelID = readString(data, 'channel_id'); msg.channelType = readInt(data, 'channel_type'); msg.contentType = readInt(data, 'type'); diff --git a/lib/db/message.dart b/lib/db/message.dart index 5701a5c..f757af6 100644 --- a/lib/db/message.dart +++ b/lib/db/message.dart @@ -260,11 +260,11 @@ class MessaggeDB { bool contain, int pullMode, int limit, - final Function(List) iGetOrSyncHistoryMsgBack) async { + final Function(List) iGetOrSyncHistoryMsgBack, + final Function() syncBack) async { //获取原始数据 List list = await getMessages( channelId, channelType, oldestOrderSeq, contain, pullMode, limit); - //业务判断数据 List tempList = []; for (int i = 0, size = list.length; i < size; i++) { @@ -383,9 +383,9 @@ class MessaggeDB { if (isSyncMsg && (startMsgSeq != endMsgSeq || (startMsgSeq == 0 && endMsgSeq == 0)) && requestCount < 5) { - // if (requestCount == 0) { - // iGetOrSyncHistoryMsgBack.onSyncing(); - // } + if (requestCount == 0) { + syncBack(); + } //同步消息 requestCount++; WKIM.shared.messageManager.setSyncChannelMsgListener( @@ -395,7 +395,7 @@ class MessaggeDB { syncChannelMsg.messages != null && syncChannelMsg.messages!.isNotEmpty) { getOrSyncHistoryMessages(channelId, channelType, oldestOrderSeq, - contain, pullMode, limit, iGetOrSyncHistoryMsgBack); + contain, pullMode, limit, iGetOrSyncHistoryMsgBack, syncBack); } else { requestCount = 0; iGetOrSyncHistoryMsgBack(list); diff --git a/lib/manager/connect_manager.dart b/lib/manager/connect_manager.dart index 40c3515..f5e3423 100644 --- a/lib/manager/connect_manager.dart +++ b/lib/manager/connect_manager.dart @@ -44,6 +44,7 @@ class _WKSocket { class WKConnectionManager { bool isReconnection = false; + final int reconnMilliseconds = 1500; Timer? heartTimer; Timer? checkNetworkTimer; final heartIntervalSecond = const Duration(seconds: 60); @@ -99,7 +100,7 @@ class WKConnectionManager { } _socketConnect(String addr) { - Logs.info("addr--->$addr"); + Logs.info("连接地址--->$addr"); var addrs = addr.split(":"); var host = addrs[0]; var port = addrs[1]; @@ -110,10 +111,8 @@ class WKConnectionManager { _socket = _WKSocket.newSocket(socket); _connectSuccess(); }).catchError((err) { - Logs.info("失败"); _connectFail(err); }).onError((err, stackTrace) { - Logs.info("错误"); _connectFail(err); }); } catch (e) { @@ -121,7 +120,7 @@ class WKConnectionManager { } } -// socket 连接成功 + // socket 连接成功 _connectSuccess() { // 监听消息 _socket?.listen((Uint8List data) { @@ -129,7 +128,8 @@ class WKConnectionManager { // _decodePacket(data); }, () { isReconnection = true; - Future.delayed(const Duration(milliseconds: 1500), () { + Logs.error('发送消息失败'); + Future.delayed(Duration(milliseconds: reconnMilliseconds), () { connect(); }); }); @@ -138,7 +138,10 @@ class WKConnectionManager { } _connectFail(error) { - Logs.error(error); + Logs.error('连接失败:${error.toString()}'); + Future.delayed(Duration(milliseconds: reconnMilliseconds), () { + connect(); + }); } testCutData(Uint8List data) { @@ -272,7 +275,6 @@ class WKConnectionManager { } _sendConnectPacket() { - Logs.info("发送连接包"); var connectPacket = ConnectPacket( uid: WKIM.shared.options.uid!, token: WKIM.shared.options.token!, @@ -393,24 +395,23 @@ class WKConnectionManager { msg.messageContent = WKIM.shared.messageManager .getMessageModel(msg.contentType, contentJson); WKIM.shared.messageManager.parsingMsg(msg); - WKIM.shared.messageManager.saveMsg(msg); if (msg.isDeleted == 0 && !msg.header.noPersist && msg.contentType != WkMessageContentType.insideMsg) { - List list = []; - list.add(msg); - WKIM.shared.messageManager.pushNewMsg(list); - + int row = await WKIM.shared.messageManager.saveMsg(msg); + msg.clientSeq = row; WKUIConversationMsg? uiMsg = await WKIM.shared.conversationManager.saveWithLiMMsg(msg); if (uiMsg != null) { - Logs.info('刷新最近会话'); WKIM.shared.conversationManager.setRefreshMsg(uiMsg, true); } } else { Logs.debug( '消息不能存库:is_deleted=${msg.isDeleted},no_persist=${msg.header.noPersist},content_type:${msg.contentType}'); } + List list = []; + list.add(msg); + WKIM.shared.messageManager.pushNewMsg(list); } int _isDeletedMsg(dynamic jsonObject) { diff --git a/lib/manager/message_manager.dart b/lib/manager/message_manager.dart index f50235c..4f93155 100644 --- a/lib/manager/message_manager.dart +++ b/lib/manager/message_manager.dart @@ -80,8 +80,8 @@ class WKMessageManager { return MessaggeDB.shared.queryWithClientMsgNo(clientMsgNo); } - saveMsg(WKMsg msg) { - MessaggeDB.shared.insert(msg); + Future saveMsg(WKMsg msg) async { + return await MessaggeDB.shared.insert(msg); } String generateClientMsgNo() { @@ -181,7 +181,8 @@ class WKMessageManager { int pullMode, int limit, int aroundMsgOrderSeq, - final Function(List) iGetOrSyncHistoryMsgBack) async { + final Function(List) iGetOrSyncHistoryMsgBack, + final Function() syncBack) async { if (aroundMsgOrderSeq != 0) { int maxMsgSeq = await getMaxMessageSeq(channelId, channelType); int aroundMsgSeq = getOrNearbyMsgSeq(aroundMsgOrderSeq); @@ -222,8 +223,15 @@ class WKMessageManager { contain = true; } } - MessaggeDB.shared.getOrSyncHistoryMessages(channelId, channelType, - oldestOrderSeq, contain, pullMode, limit, iGetOrSyncHistoryMsgBack); + MessaggeDB.shared.getOrSyncHistoryMessages( + channelId, + channelType, + oldestOrderSeq, + contain, + pullMode, + limit, + iGetOrSyncHistoryMsgBack, + syncBack); } int getOrNearbyMsgSeq(int orderSeq) { @@ -319,7 +327,7 @@ class WKMessageManager { dynamic json = wkMsg.messageContent!.encodeJson(); json['type'] = wkMsg.contentType; wkMsg.content = jsonEncode(json); - int row = await MessaggeDB.shared.insert(wkMsg); + int row = await saveMsg(wkMsg); wkMsg.clientSeq = row; WKIM.shared.messageManager.setOnMsgInserted(wkMsg); if (wkMsg.messageContent is WKMediaMessageContent) { diff --git a/lib/proto/proto.dart b/lib/proto/proto.dart index df80bb6..1bfc548 100644 --- a/lib/proto/proto.dart +++ b/lib/proto/proto.dart @@ -80,7 +80,6 @@ class Proto { } Uint8List encodeConnect(ConnectPacket packet) { - Logs.info("连接包信息${packet.toString()}"); WriteData write = WriteData(); write.writeUint8(packet.version); write.writeUint8(packet.deviceFlag); diff --git a/pubspec.yaml b/pubspec.yaml index e7f33fc..8c519a9 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.0.2 +version: 1.0.3 homepage: https://github.com/WuKongIM/WuKongIMFlutterSDK environment: