diff --git a/android/build.gradle b/android/build.gradle index 72b38d5..022c5a8 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -41,5 +41,5 @@ android { } } dependencies { - implementation 'io.openim:client-sdk:2.0.9@aar' + implementation 'io.openim:client-sdk:2.0.13@aar' } \ No newline at end of file diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnAdvancedMsgListener.java b/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnAdvancedMsgListener.java index f0b2b84..fb7907d 100644 --- a/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnAdvancedMsgListener.java +++ b/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnAdvancedMsgListener.java @@ -17,10 +17,18 @@ public class OnAdvancedMsgListener implements open_im_sdk_callback.OnAdvancedMsg public void onRecvC2CReadReceipt(String s) { final Map values = new ArrayMap<>(); values.put("id", id); - values.put("haveReadMessage", s); + values.put("c2cMessageReadReceipt", s); CommonUtil.emitEvent("advancedMsgListener", "onRecvC2CReadReceipt", values); } + @Override + public void onRecvGroupReadReceipt(String s) { + final Map values = new ArrayMap<>(); + values.put("id", id); + values.put("groupMessageReadReceipt", s); + CommonUtil.emitEvent("advancedMsgListener", "onRecvGroupReadReceipt", values); + } + @Override public void onRecvMessageRevoked(String s) { final Map values = new ArrayMap<>(); diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnSignalingListener.java b/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnSignalingListener.java index 94ae88e..9c4ea03 100644 --- a/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnSignalingListener.java +++ b/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnSignalingListener.java @@ -18,11 +18,21 @@ public class OnSignalingListener implements open_im_sdk_callback.OnSignalingList CommonUtil.emitEvent("signalingListener", "onInviteeAccepted", s); } + @Override + public void onInviteeAcceptedByOtherDevice(String s) { + CommonUtil.emitEvent("signalingListener", "onInviteeAcceptedByOtherDevice", s); + } + @Override public void onInviteeRejected(String s) { CommonUtil.emitEvent("signalingListener", "onInviteeRejected", s); } + @Override + public void onInviteeRejectedByOtherDevice(String s) { + CommonUtil.emitEvent("signalingListener", "onInviteeRejectedByOtherDevice", s); + } + @Override public void onReceiveNewInvitation(String s) { CommonUtil.emitEvent("signalingListener", "onReceiveNewInvitation", s); diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/manager/ConversationManager.java b/android/src/main/java/io/openim/flutter_openim_sdk/manager/ConversationManager.java index 601c8be..7f70c9e 100644 --- a/android/src/main/java/io/openim/flutter_openim_sdk/manager/ConversationManager.java +++ b/android/src/main/java/io/openim/flutter_openim_sdk/manager/ConversationManager.java @@ -111,11 +111,11 @@ public class ConversationManager extends BaseManager { ); } -// public void getConversationRecvMessageOpt(MethodCall methodCall, MethodChannel.Result result) { -// Open_im_sdk.getConversationRecvMessageOpt( -// new OnBaseListener(result), -// value(methodCall, "operationID"), -// jsonValue(methodCall, "conversationIDList") -// ); -// } + public void getConversationRecvMessageOpt(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.getConversationRecvMessageOpt( + new OnBaseListener(result), + value(methodCall, "operationID"), + jsonValue(methodCall, "conversationIDList") + ); + } } diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java b/android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java index 791cf85..2259b53 100644 --- a/android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java +++ b/android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java @@ -133,6 +133,16 @@ public class MessageManager extends BaseManager { ); } + public void insertGroupMessageToLocalStorage(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.insertGroupMessageToLocalStorage( + new OnBaseListener(result), + value(methodCall, "operationID"), + jsonValue(methodCall, "message"), + value(methodCall, "groupID"), + value(methodCall, "senderID") + ); + } + // public void findMessages(MethodCall methodCall, MethodChannel.Result result) { // Open_im_sdk.findMessages(new OnBaseListener(result), jsonValue(methodCall, "messageIDList")); // } diff --git a/example/lib/main.dart b/example/lib/main.dart index 6e897dc..3075d01 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -83,9 +83,12 @@ class _MyAppState extends State { onRecvMessageRevoked: (messageID) { // 消息成功撤回,从界面移除消息 }, - onRecvC2CReadReceipt: (list) { + onRecvC2CMessageReadReceipt: (list) { // 消息被阅读回执,将消息标记为已读 }, + onRecvGroupMessageReadReceipt: (list){ + // 消息被阅读回执,将消息标记为已读 + } )) ..messageManager.setMsgSendProgressListener(OnMsgSendProgressListener( onProgress: (messageID, progress) { diff --git a/example/pubspec.lock b/example/pubspec.lock index 2f89402..0443ebd 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -68,7 +68,7 @@ packages: path: ".." relative: true source: path - version: "1.1.1" + version: "2.0.0+2" flutter_test: dependency: "direct dev" description: flutter diff --git a/ios/Classes/Module/MessageManager.swift b/ios/Classes/Module/MessageManager.swift index 81bcce8..0d7b000 100644 --- a/ios/Classes/Module/MessageManager.swift +++ b/ios/Classes/Module/MessageManager.swift @@ -14,6 +14,7 @@ public class MessageManager: BaseServiceManager { self["deleteMessageFromLocalStorage"] = deleteMessageFromLocalStorage self["deleteMessages"] = deleteMessages self["insertSingleMessageToLocalStorage"] = insertSingleMessageToLocalStorage + self["insertGroupMessageToLocalStorage"] = insertGroupMessageToLocalStorage // self["findMessages"] = findMessages self["markC2CMessageAsRead"] = markC2CMessageAsRead self["typingStatusUpdate"] = typingStatusUpdate @@ -73,6 +74,11 @@ public class MessageManager: BaseServiceManager { methodCall[string: "receiverID"], methodCall[string: "senderID"]) } + func insertGroupMessageToLocalStorage(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ + Open_im_sdkInsertGroupMessageToLocalStorage(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "message"], + methodCall[string: "groupID"], methodCall[string: "senderID"]) + } + // func findMessages(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ // Open_im_sdkFindMessages(BaseCallback(result: result), methodCall[jsonString: "messageIDList"]) // } @@ -217,10 +223,17 @@ public class MessageManager: BaseServiceManager { public func onRecvC2CReadReceipt(_ msgReceiptList: String?) { var values: [String: Any] = [:] values["id"] = id - values["haveReadMessage"] = msgReceiptList + values["c2cMessageReadReceipt"] = msgReceiptList CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvC2CReadReceipt", errCode: nil, errMsg: nil, data: values) } + public func onRecvGroupReadReceipt(_ groupMsgReceiptList: String?) { + var values: [String: Any] = [:] + values["id"] = id + values["groupMessageReadReceipt"] = groupMsgReceiptList + CommonUtil.emitEvent(channel: channel, method: "advancedMsgListener", type: "onRecvGroupReadReceipt", errCode: nil, errMsg: nil, data: values) + } + public func onRecvMessageRevoked(_ msgId: String?) { var values: [String: Any] = [:] values["id"] = id diff --git a/ios/Classes/Module/SignalingManager.swift b/ios/Classes/Module/SignalingManager.swift new file mode 100644 index 0000000..3dd0f77 --- /dev/null +++ b/ios/Classes/Module/SignalingManager.swift @@ -0,0 +1,78 @@ +import Foundation +import OpenIMCore + +public class SignalingManager: BaseServiceManager { + + public override func registerHandlers() { + super.registerHandlers() + self["setSignalingListener"] = setSignalingListener + self["signalingInvite"] = signalingInvite + self["signalingInviteInGroup"] = signalingInviteInGroup + self["signalingAccept"] = signalingAccept + self["signalingReject"] = signalingReject + self["signalingCancel"] = signalingCancel + } + + func setSignalingListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ + Open_im_sdkSetSignalingListener(SignalingListener(channel: channel)) + callBack(result) + } + + func signalingInvite(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ + Open_im_sdkSignalingInvite(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "signalingInfo"]) + } + + func signalingInviteInGroup(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ + Open_im_sdkSignalingInviteInGroup(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "signalingInfo"]) + } + + func signalingAccept(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ + Open_im_sdkSignalingAccept(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "signalingInfo"]) + } + + func signalingReject(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ + Open_im_sdkSignalingReject(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "signalingInfo"]) + } + + func signalingCancel(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ + Open_im_sdkSignalingCancel(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "signalingInfo"]) + } + +} +public class SignalingListener: NSObject, Open_im_sdk_callbackOnSignalingListenerProtocol { + + private let channel:FlutterMethodChannel + + init(channel:FlutterMethodChannel) { + self.channel = channel + } + + public func onInvitationCancelled(_ s: String?) { + CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onInvitationCancelled", errCode: nil, errMsg: nil, data: s) + } + + public func onInvitationTimeout(_ s: String?) { + CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onInvitationTimeout", errCode: nil, errMsg: nil, data: s) + } + + public func onInviteeAccepted(_ s: String?) { + CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onInviteeAccepted", errCode: nil, errMsg: nil, data: s) + } + + public func onInviteeAccepted(byOtherDevice s: String?) { + CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onInviteeAcceptedByOtherDevice", errCode: nil, errMsg: nil, data: s) + } + + public func onInviteeRejected(_ s: String?) { + CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onInviteeRejected", errCode: nil, errMsg: nil, data: s) + } + + public func onInviteeRejected(byOtherDevice s: String?) { + CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onInviteeRejectedByOtherDevice", errCode: nil, errMsg: nil, data: s) + } + + public func onReceiveNewInvitation(_ s: String?) { + CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onReceiveNewInvitation", errCode: nil, errMsg: nil, data: s) + } + +} diff --git a/ios/Classes/SwiftFlutterOpenimSdkPlugin.swift b/ios/Classes/SwiftFlutterOpenimSdkPlugin.swift index 00cc6e0..5324a94 100644 --- a/ios/Classes/SwiftFlutterOpenimSdkPlugin.swift +++ b/ios/Classes/SwiftFlutterOpenimSdkPlugin.swift @@ -8,6 +8,7 @@ public class SwiftFlutterOpenimSdkPlugin: NSObject, FlutterPlugin { let messageManager: MessageManager let groupManager: GroupManager let userManger: UserManager + let signalingManager: SignalingManager init(channel: FlutterMethodChannel) { self.imManager = IMMananger(channel: channel) @@ -16,6 +17,7 @@ public class SwiftFlutterOpenimSdkPlugin: NSObject, FlutterPlugin { self.messageManager = MessageManager(channel: channel) self.groupManager = GroupManager(channel: channel) self.userManger = UserManager(channel: channel) + self.signalingManager = SignalingManager(channel: channel) } public static func register(with registrar: FlutterPluginRegistrar) { @@ -39,6 +41,8 @@ public class SwiftFlutterOpenimSdkPlugin: NSObject, FlutterPlugin { groupManager.handleMethod(call: call, result: result) case "userManager": userManger.handleMethod(call: call, result: result) + case "signalingManager": + signalingManager.handleMethod(call: call, result: result) default: print("Handle ManagerName Error: \(managerName) not found") } diff --git a/ios/Framework/OpenIMCore.framework/Headers/Open_im_sdk.objc.h b/ios/Framework/OpenIMCore.framework/Headers/Open_im_sdk.objc.h index e3796eb..bd04403 100644 --- a/ios/Framework/OpenIMCore.framework/Headers/Open_im_sdk.objc.h +++ b/ios/Framework/OpenIMCore.framework/Headers/Open_im_sdk.objc.h @@ -86,6 +86,8 @@ FOUNDATION_EXPORT void Open_im_sdkDeleteConversation(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable friendUserID); +FOUNDATION_EXPORT void Open_im_sdkDeleteMessage(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable message); + FOUNDATION_EXPORT void Open_im_sdkDeleteMessageFromLocalStorage(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable message); FOUNDATION_EXPORT void Open_im_sdkGetAllConversationList(id _Nullable callback, NSString* _Nullable operationID); @@ -161,6 +163,11 @@ FOUNDATION_EXPORT void Open_im_sdkLogout(id _Nullable FOUNDATION_EXPORT void Open_im_sdkMarkC2CMessageAsRead(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userID, NSString* _Nullable msgIDList); +FOUNDATION_EXPORT void Open_im_sdkMarkGroupMessageAsRead(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID, NSString* _Nullable msgIDList); + +/** + * deprecated + */ FOUNDATION_EXPORT void Open_im_sdkMarkGroupMessageHasRead(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID); FOUNDATION_EXPORT void Open_im_sdkPinConversation(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable conversationID, BOOL isPinned); @@ -202,10 +209,31 @@ FOUNDATION_EXPORT void Open_im_sdkSetGroupInfo(id _Nul */ FOUNDATION_EXPORT void Open_im_sdkSetGroupListener(id _Nullable callback); +FOUNDATION_EXPORT void Open_im_sdkSetOneConversationPrivateChat(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable conversationID, BOOL isPrivate); + +FOUNDATION_EXPORT void Open_im_sdkSetOneConversationRecvMessageOpt(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable conversationID, long opt); + FOUNDATION_EXPORT void Open_im_sdkSetSelfInfo(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable userInfo); +/** + * ////////////////////////signaling////////////////////////////////////////// + */ +FOUNDATION_EXPORT void Open_im_sdkSetSignalingListener(id _Nullable callback); + FOUNDATION_EXPORT void Open_im_sdkSetUserListener(id _Nullable listener); +FOUNDATION_EXPORT void Open_im_sdkSignalingAccept(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable signalAcceptReq); + +FOUNDATION_EXPORT void Open_im_sdkSignalingCancel(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable signalCancelReq); + +FOUNDATION_EXPORT void Open_im_sdkSignalingHungUp(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable signalHungUpReq); + +FOUNDATION_EXPORT void Open_im_sdkSignalingInvite(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable signalInviteReq); + +FOUNDATION_EXPORT void Open_im_sdkSignalingInviteInGroup(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable signalInviteInGroupReq); + +FOUNDATION_EXPORT void Open_im_sdkSignalingReject(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable signalRejectReq); + FOUNDATION_EXPORT void Open_im_sdkTransferGroupOwner(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable groupID, NSString* _Nullable newOwnerUserID); FOUNDATION_EXPORT void Open_im_sdkTypingStatusUpdate(id _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable recvID, NSString* _Nullable msgTip); diff --git a/ios/Framework/OpenIMCore.framework/Headers/Open_im_sdk_callback.objc.h b/ios/Framework/OpenIMCore.framework/Headers/Open_im_sdk_callback.objc.h index fbd0f89..715b2ab 100644 --- a/ios/Framework/OpenIMCore.framework/Headers/Open_im_sdk_callback.objc.h +++ b/ios/Framework/OpenIMCore.framework/Headers/Open_im_sdk_callback.objc.h @@ -23,6 +23,8 @@ @class Open_im_sdk_callbackOnFriendshipListener; @protocol Open_im_sdk_callbackOnGroupListener; @class Open_im_sdk_callbackOnGroupListener; +@protocol Open_im_sdk_callbackOnSignalingListener; +@class Open_im_sdk_callbackOnSignalingListener; @protocol Open_im_sdk_callbackOnUserListener; @class Open_im_sdk_callbackOnUserListener; @protocol Open_im_sdk_callbackSendMsgCallBack; @@ -35,6 +37,7 @@ @protocol Open_im_sdk_callbackOnAdvancedMsgListener - (void)onRecvC2CReadReceipt:(NSString* _Nullable)msgReceiptList; +- (void)onRecvGroupReadReceipt:(NSString* _Nullable)groupMsgReceiptList; - (void)onRecvMessageRevoked:(NSString* _Nullable)msgId; - (void)onRecvNewMessage:(NSString* _Nullable)message; @end @@ -81,6 +84,16 @@ - (void)onJoinedGroupDeleted:(NSString* _Nullable)groupInfo; @end +@protocol Open_im_sdk_callbackOnSignalingListener +- (void)onInvitationCancelled:(NSString* _Nullable)invitationCancelledCallback; +- (void)onInvitationTimeout:(NSString* _Nullable)invitationTimeoutCallback; +- (void)onInviteeAccepted:(NSString* _Nullable)inviteeAcceptedCallback; +- (void)onInviteeAcceptedByOtherDevice:(NSString* _Nullable)inviteeAcceptedCallback; +- (void)onInviteeRejected:(NSString* _Nullable)inviteeRejectedCallback; +- (void)onInviteeRejectedByOtherDevice:(NSString* _Nullable)inviteeRejectedCallback; +- (void)onReceiveNewInvitation:(NSString* _Nullable)receiveNewInvitationCallback; +@end + @protocol Open_im_sdk_callbackOnUserListener - (void)onSelfInfoUpdated:(NSString* _Nullable)userInfo; @end @@ -103,6 +116,8 @@ @class Open_im_sdk_callbackOnGroupListener; +@class Open_im_sdk_callbackOnSignalingListener; + @class Open_im_sdk_callbackOnUserListener; @class Open_im_sdk_callbackSendMsgCallBack; @@ -122,6 +137,7 @@ - (nonnull instancetype)initWithRef:(_Nonnull id)ref; - (void)onRecvC2CReadReceipt:(NSString* _Nullable)msgReceiptList; +- (void)onRecvGroupReadReceipt:(NSString* _Nullable)groupMsgReceiptList; - (void)onRecvMessageRevoked:(NSString* _Nullable)msgId; - (void)onRecvNewMessage:(NSString* _Nullable)message; @end @@ -184,6 +200,20 @@ - (void)onJoinedGroupDeleted:(NSString* _Nullable)groupInfo; @end +@interface Open_im_sdk_callbackOnSignalingListener : NSObject { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (void)onInvitationCancelled:(NSString* _Nullable)invitationCancelledCallback; +- (void)onInvitationTimeout:(NSString* _Nullable)invitationTimeoutCallback; +- (void)onInviteeAccepted:(NSString* _Nullable)inviteeAcceptedCallback; +- (void)onInviteeAcceptedByOtherDevice:(NSString* _Nullable)inviteeAcceptedCallback; +- (void)onInviteeRejected:(NSString* _Nullable)inviteeRejectedCallback; +- (void)onInviteeRejectedByOtherDevice:(NSString* _Nullable)inviteeRejectedCallback; +- (void)onReceiveNewInvitation:(NSString* _Nullable)receiveNewInvitationCallback; +@end + @interface Open_im_sdk_callbackOnUserListener : NSObject { } @property(strong, readonly) _Nonnull id _ref; diff --git a/ios/Framework/OpenIMCore.framework/OpenIMCore b/ios/Framework/OpenIMCore.framework/OpenIMCore index 713a7ca..c093b81 100644 Binary files a/ios/Framework/OpenIMCore.framework/OpenIMCore and b/ios/Framework/OpenIMCore.framework/OpenIMCore differ diff --git a/lib/src/listener/advanced_msg_listener.dart b/lib/src/listener/advanced_msg_listener.dart index b075e42..f0d7daa 100644 --- a/lib/src/listener/advanced_msg_listener.dart +++ b/lib/src/listener/advanced_msg_listener.dart @@ -2,7 +2,9 @@ import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; class OnAdvancedMsgListener { /// Message read receipt - Function(List list)? onRecvC2CReadReceipt; + Function(List list)? onRecvC2CMessageReadReceipt; + + Function(List list)? onRecvGroupMessageReadReceipt; /// A friend revoked a message Function(String msgId)? onRecvMessageRevoked; @@ -14,20 +16,25 @@ class OnAdvancedMsgListener { String id; OnAdvancedMsgListener({ - this.onRecvC2CReadReceipt, + this.onRecvC2CMessageReadReceipt, + this.onRecvGroupMessageReadReceipt, this.onRecvMessageRevoked, this.onRecvNewMessage, }) : id = "id_${DateTime.now().microsecondsSinceEpoch}"; - void recvC2CReadReceipt(List list) { - if (null != onRecvC2CReadReceipt) onRecvC2CReadReceipt!(list); + void recvC2CMessageReadReceipt(List list) { + onRecvC2CMessageReadReceipt?.call(list); + } + + void recvGroupMessageReadReceipt(List list) { + onRecvGroupMessageReadReceipt?.call(list); } void recvMessageRevoked(String msgId) { - if (null != onRecvMessageRevoked) onRecvMessageRevoked!(msgId); + onRecvMessageRevoked?.call(msgId); } void recvNewMessage(Message msg) { - if (null != onRecvNewMessage) onRecvNewMessage!(msg); + onRecvNewMessage?.call(msg); } } diff --git a/lib/src/listener/signaling_listener.dart b/lib/src/listener/signaling_listener.dart index e9e8942..e1d95ae 100644 --- a/lib/src/listener/signaling_listener.dart +++ b/lib/src/listener/signaling_listener.dart @@ -6,6 +6,8 @@ class OnSignalingListener { final Function(SignalingInfo info)? onInviteeAccepted; final Function(SignalingInfo info)? onInviteeRejected; final Function(SignalingInfo info)? onReceiveNewInvitation; + final Function(SignalingInfo info)? onInviteeRejectedByOtherDevice; + final Function(SignalingInfo info)? onInviteeAcceptedByOtherDevice; OnSignalingListener({ this.onInvitationCancelled, @@ -13,6 +15,8 @@ class OnSignalingListener { this.onInviteeAccepted, this.onInviteeRejected, this.onReceiveNewInvitation, + this.onInviteeAcceptedByOtherDevice, + this.onInviteeRejectedByOtherDevice, }); /// 被邀请者收到:邀请者取消音视频通话 @@ -39,4 +43,14 @@ class OnSignalingListener { void receiveNewInvitation(SignalingInfo info) { onReceiveNewInvitation?.call(info); } + + /// 被邀请者(其他端)收到:比如被邀请者在手机拒接,在pc上会收到此回调 + void inviteeAcceptedByOtherDevice(SignalingInfo info) { + onInviteeAcceptedByOtherDevice?.call(info); + } + + /// 被邀请者(其他端)收到:比如被邀请者在手机拒接,在pc上会收到此回调 + void inviteeRejectedByOtherDevice(SignalingInfo info) { + onInviteeRejectedByOtherDevice?.call(info); + } } diff --git a/lib/src/manager/im_conversation_manager.dart b/lib/src/manager/im_conversation_manager.dart index 9eb0c34..f0533e8 100644 --- a/lib/src/manager/im_conversation_manager.dart +++ b/lib/src/manager/im_conversation_manager.dart @@ -191,18 +191,18 @@ class ConversationManager { /// Message Do Not Disturb /// [{"conversationId":"single_13922222222","result":0}] /// 查询免打扰状态 - // Future> getConversationRecvMessageOpt({ - // required List conversationIDList, - // String? operationID, - // }) => - // _channel - // .invokeMethod( - // 'getConversationRecvMessageOpt', - // _buildParam({ - // "conversationIDList": conversationIDList, - // "operationID": Utils.checkOperationID(operationID), - // })) - // .then((value) => Utils.toListMap(value)); + Future> getConversationRecvMessageOpt({ + required List conversationIDList, + String? operationID, + }) => + _channel + .invokeMethod( + 'getConversationRecvMessageOpt', + _buildParam({ + "conversationIDList": conversationIDList, + "operationID": Utils.checkOperationID(operationID), + })) + .then((value) => Utils.toListMap(value)); /// Custom sort for conversation list /// 会话列表自定义排序规则。 diff --git a/lib/src/manager/im_manager.dart b/lib/src/manager/im_manager.dart index 4d89ac0..abde0d3 100644 --- a/lib/src/manager/im_manager.dart +++ b/lib/src/manager/im_manager.dart @@ -123,17 +123,23 @@ class IMManager { case 'onRecvNewMessage': var value = call.arguments['data']['newMessage']; final msg = Utils.toObj(value, (map) => Message.fromJson(map)); - messageManager.advancedMsgListener.recvNewMessage(msg); + messageManager.msgListener.recvNewMessage(msg); break; case 'onRecvMessageRevoked': - var value = call.arguments['data']['revokedMessage']; - messageManager.advancedMsgListener.recvMessageRevoked(value); + var msgID = call.arguments['data']['revokedMessage']; + messageManager.msgListener.recvMessageRevoked(msgID); break; case 'onRecvC2CReadReceipt': - var value = call.arguments['data']['haveReadMessage']; + var value = call.arguments['data']['c2cMessageReadReceipt']; var list = Utils.toList(value, (map) => ReadReceiptInfo.fromJson(map)); - messageManager.advancedMsgListener.recvC2CReadReceipt(list); + messageManager.msgListener.recvC2CMessageReadReceipt(list); + break; + case 'onRecvGroupReadReceipt': + var value = call.arguments['data']['groupMessageReadReceipt']; + var list = + Utils.toList(value, (map) => ReadReceiptInfo.fromJson(map)); + messageManager.msgListener.recvGroupMessageReadReceipt(list); break; } } else if (call.method == ListenerType.msgSendProgressListener) { @@ -244,6 +250,12 @@ class IMManager { case 'onReceiveNewInvitation': signalingManager.listener.receiveNewInvitation(u); break; + case 'onInviteeAcceptedByOtherDevice': + signalingManager.listener.inviteeAcceptedByOtherDevice(u); + break; + case 'onInviteeRejectedByOtherDevice': + signalingManager.listener.inviteeRejectedByOtherDevice(u); + break; } } } catch (err) { diff --git a/lib/src/manager/im_message_manager.dart b/lib/src/manager/im_message_manager.dart index be9dfa7..26ed5e8 100644 --- a/lib/src/manager/im_message_manager.dart +++ b/lib/src/manager/im_message_manager.dart @@ -6,14 +6,14 @@ class MessageManager { // List advancedMsgListeners = List.empty(growable: true); OnMsgSendProgressListener? msgSendProgressListener; - late OnAdvancedMsgListener advancedMsgListener; + late OnAdvancedMsgListener msgListener; MessageManager(this._channel); /// Set a message listener /// 消息监听 Future setAdvancedMsgListener(OnAdvancedMsgListener listener) { - this.advancedMsgListener = listener; + this.msgListener = listener; // advancedMsgListeners.add(listener); return _channel.invokeMethod( 'setAdvancedMsgListener', @@ -123,6 +123,22 @@ class MessageManager { "operationID": Utils.checkOperationID(operationID), })); + /// + Future insertGroupMessageToLocalStorage({ + String? groupID, + String? senderID, + Message? message, + String? operationID, + }) => + _channel.invokeMethod( + 'insertGroupMessageToLocalStorage', + _buildParam({ + "message": message?.toJson(), + "groupID": groupID, + "senderID": senderID, + "operationID": Utils.checkOperationID(operationID), + })); + /// Query the message according to the message id // Future findMessages({required List messageIDList}) => // _channel.invokeMethod( diff --git a/lib/src/models/message.dart b/lib/src/models/message.dart index 312994c..4d5b382 100644 --- a/lib/src/models/message.dart +++ b/lib/src/models/message.dart @@ -573,7 +573,8 @@ class FaceElem { } class ReadReceiptInfo { - String? uid; + String? userID; + String? groupID; List? msgIDList; int? readTime; int? msgFrom; @@ -581,7 +582,8 @@ class ReadReceiptInfo { int? sessionType; ReadReceiptInfo( - {this.uid, + {this.userID, + this.groupID, this.msgIDList, this.readTime, this.msgFrom, @@ -589,7 +591,7 @@ class ReadReceiptInfo { this.sessionType}); ReadReceiptInfo.fromJson(Map json) { - uid = json['uid']; + userID = json['uid'] ?? json['userID']; if (json['msgIDList'] is List) { msgIDList = (json['msgIDList'] as List).map((e) => '$e').toList(); } @@ -601,7 +603,7 @@ class ReadReceiptInfo { Map toJson() { final data = Map(); - data['uid'] = this.uid; + data['userID'] = this.userID; data['msgIDList'] = this.msgIDList; data['readTime'] = this.readTime; data['msgFrom'] = this.msgFrom;