diff --git a/.idea/misc.xml b/.idea/misc.xml
index f8c5fc9..56abf55 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,4 +3,5 @@
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 97fa7f5..7fcc83e 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -3,6 +3,7 @@
+
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0804dde..b8d45b7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,8 @@
-## 2.0.0+1
+## 2.0.0+2
1.Fix some one crash
+2.New add signaling function
+3.Delete getConversationRecvMessageOpt
## 2.0.0+1
diff --git a/README.zh-cn.md b/README.zh-cn.md
index 8b40768..be8f7fa 100644
--- a/README.zh-cn.md
+++ b/README.zh-cn.md
@@ -130,6 +130,23 @@ OpenIM.iMManager
onGroupInfoChanged: (groupInfo) {
// 组资料变更
},
+ ))
+ ..signalingManager.setSignalingListener(OnSignalingListener(
+ onReceiveNewInvitation: (info) {
+ // 被邀请者收到:音视频通话邀请
+ },
+ onInviteeRejected: (info) {
+ // 邀请者收到:被邀请者拒绝音视频通话
+ },
+ onInviteeAccepted: (info) {
+ // 邀请者收到:被邀请者同意音视频通话
+ },
+ onInvitationTimeout: (info) {
+ // 邀请者收到:被邀请者超时未接通
+ },
+ onInvitationCancelled: (info) {
+ // 被邀请者收到:邀请者取消音视频通话
+ },
));
```
@@ -335,6 +352,7 @@ OpenIM.iMManager.conversationManager.setConversationRecvMessageOpt(
- ##### getConversationRecvMessageOpt(查询免打扰状态)
```
+/// 此方法已废弃,使用getOneConversation/getMultipleConversation方法替代
OpenIM.iMManager.conversationManager.getConversationRecvMessageOpt(
conversationIDList: [], // 会话id列表
).then((list) {
diff --git a/android/build.gradle b/android/build.gradle
index fadc659..72b38d5 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -41,5 +41,5 @@ android {
}
}
dependencies {
- implementation 'io.openim:client-sdk:2.0.8@aar'
+ implementation 'io.openim:client-sdk:2.0.9@aar'
}
\ No newline at end of file
diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/FlutterOpenimSdkPlugin.java b/android/src/main/java/io/openim/flutter_openim_sdk/FlutterOpenimSdkPlugin.java
index c7f7766..8f3a500 100644
--- a/android/src/main/java/io/openim/flutter_openim_sdk/FlutterOpenimSdkPlugin.java
+++ b/android/src/main/java/io/openim/flutter_openim_sdk/FlutterOpenimSdkPlugin.java
@@ -18,6 +18,7 @@ import io.openim.flutter_openim_sdk.manager.FriendshipManager;
import io.openim.flutter_openim_sdk.manager.GroupManager;
import io.openim.flutter_openim_sdk.manager.IMManager;
import io.openim.flutter_openim_sdk.manager.MessageManager;
+import io.openim.flutter_openim_sdk.manager.SignalingManager;
import io.openim.flutter_openim_sdk.manager.UserManager;
@@ -37,6 +38,7 @@ public class FlutterOpenimSdkPlugin implements FlutterPlugin, MethodCallHandler
private static MessageManager messageManager;
private static ConversationManager conversationManager;
private static GroupManager groupManager;
+ private static SignalingManager signalingManager;
public FlutterOpenimSdkPlugin() {
}
@@ -48,6 +50,7 @@ public class FlutterOpenimSdkPlugin implements FlutterPlugin, MethodCallHandler
FlutterOpenimSdkPlugin.messageManager = new MessageManager();
FlutterOpenimSdkPlugin.conversationManager = new ConversationManager();
FlutterOpenimSdkPlugin.groupManager = new GroupManager();
+ FlutterOpenimSdkPlugin.signalingManager = new SignalingManager();
}
@Override
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
new file mode 100644
index 0000000..94ae88e
--- /dev/null
+++ b/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnSignalingListener.java
@@ -0,0 +1,30 @@
+package io.openim.flutter_openim_sdk.listener;
+
+import io.openim.flutter_openim_sdk.util.CommonUtil;
+
+public class OnSignalingListener implements open_im_sdk_callback.OnSignalingListener {
+ @Override
+ public void onInvitationCancelled(String s) {
+ CommonUtil.emitEvent("signalingListener", "onInvitationCancelled", s);
+ }
+
+ @Override
+ public void onInvitationTimeout(String s) {
+ CommonUtil.emitEvent("signalingListener", "onInvitationTimeout", s);
+ }
+
+ @Override
+ public void onInviteeAccepted(String s) {
+ CommonUtil.emitEvent("signalingListener", "onInviteeAccepted", s);
+ }
+
+ @Override
+ public void onInviteeRejected(String s) {
+ CommonUtil.emitEvent("signalingListener", "onInviteeRejected", 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 7f70c9e..601c8be 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/SignalingManager.java b/android/src/main/java/io/openim/flutter_openim_sdk/manager/SignalingManager.java
new file mode 100644
index 0000000..40516bf
--- /dev/null
+++ b/android/src/main/java/io/openim/flutter_openim_sdk/manager/SignalingManager.java
@@ -0,0 +1,49 @@
+package io.openim.flutter_openim_sdk.manager;
+
+import io.flutter.plugin.common.MethodCall;
+import io.flutter.plugin.common.MethodChannel;
+import io.openim.flutter_openim_sdk.listener.OnBaseListener;
+import io.openim.flutter_openim_sdk.listener.OnSignalingListener;
+import open_im_sdk.Open_im_sdk;
+
+public class SignalingManager extends BaseManager {
+
+ public void setSignalingListener(MethodCall methodCall, MethodChannel.Result result) {
+ Open_im_sdk.setSignalingListener(new OnSignalingListener());
+ }
+
+ public void signalingInvite(MethodCall methodCall, MethodChannel.Result result) {
+ Open_im_sdk.signalingInvite(
+ new OnBaseListener(result),
+ value(methodCall, "operationID"),
+ jsonValue(methodCall, "signalingInfo"));
+ }
+
+ public void signalingInviteInGroup(MethodCall methodCall, MethodChannel.Result result) {
+ Open_im_sdk.signalingInviteInGroup(
+ new OnBaseListener(result),
+ value(methodCall, "operationID"),
+ jsonValue(methodCall, "signalingInfo"));
+ }
+
+ public void signalingAccept(MethodCall methodCall, MethodChannel.Result result) {
+ Open_im_sdk.signalingAccept(
+ new OnBaseListener(result),
+ value(methodCall, "operationID"),
+ jsonValue(methodCall, "signalingInfo"));
+ }
+
+ public void signalingReject(MethodCall methodCall, MethodChannel.Result result) {
+ Open_im_sdk.signalingReject(
+ new OnBaseListener(result),
+ value(methodCall, "operationID"),
+ jsonValue(methodCall, "signalingInfo"));
+ }
+
+ public void signalingCancel(MethodCall methodCall, MethodChannel.Result result) {
+ Open_im_sdk.signalingCancel(
+ new OnBaseListener(result),
+ value(methodCall, "operationID"),
+ jsonValue(methodCall, "signalingInfo"));
+ }
+}
diff --git a/example/lib/main.dart b/example/lib/main.dart
index c94fc29..6e897dc 100644
--- a/example/lib/main.dart
+++ b/example/lib/main.dart
@@ -163,6 +163,23 @@ class _MyAppState extends State {
onGroupInfoChanged: (groupInfo) {
// 组资料变更
},
+ ))
+ ..signalingManager.setSignalingListener(OnSignalingListener(
+ onReceiveNewInvitation: (info) {
+ // 被邀请者收到:音视频通话邀请
+ },
+ onInviteeRejected: (info) {
+ // 邀请者收到:被邀请者拒绝音视频通话
+ },
+ onInviteeAccepted: (info) {
+ // 邀请者收到:被邀请者同意音视频通话
+ },
+ onInvitationTimeout: (info) {
+ // 邀请者收到:被邀请者超时未接通
+ },
+ onInvitationCancelled: (info) {
+ // 被邀请者收到:邀请者取消音视频通话
+ },
));
}
@@ -264,9 +281,9 @@ class _MyAppState extends State {
conversationIDList: [], // 会话id列表
status: 1, // 1:不接受消息;2:接受在线消息不接受离线消息;0:正常
);
- OpenIM.iMManager.conversationManager.getConversationRecvMessageOpt(
- conversationIDList: [], // 会话id列表
- );
+ // OpenIM.iMManager.conversationManager.getConversationRecvMessageOpt(
+ // conversationIDList: [], // 会话id列表
+ // );
OpenIM.iMManager.conversationManager.simpleSort([]);
}
diff --git a/lib/flutter_openim_sdk.dart b/lib/flutter_openim_sdk.dart
index e8bd60a..3584577 100644
--- a/lib/flutter_openim_sdk.dart
+++ b/lib/flutter_openim_sdk.dart
@@ -7,17 +7,12 @@ export 'src/enum/listener_type.dart';
export 'src/enum/message_status.dart';
export 'src/enum/message_type.dart';
export 'src/listener/advanced_msg_listener.dart';
-export 'src/listener/advanced_msg_listener.dart';
-export 'src/listener/connect_listener.dart';
export 'src/listener/connect_listener.dart';
export 'src/listener/conversation_listener.dart';
export 'src/listener/friendship_listener.dart';
-export 'src/listener/friendship_listener.dart';
export 'src/listener/group_listener.dart';
-export 'src/listener/group_listener.dart';
-export 'src/listener/msg_send_progress_listener.dart';
export 'src/listener/msg_send_progress_listener.dart';
-export 'src/listener/user_listener.dart';
+export 'src/listener/signaling_listener.dart';
export 'src/listener/user_listener.dart';
export 'src/manager/im_conversation_manager.dart';
export 'src/manager/im_friendship_manager.dart';
@@ -30,6 +25,7 @@ export 'src/manager/im_user_manager.dart';
export 'src/models/conversation_info.dart';
export 'src/models/group_info.dart';
export 'src/models/message.dart';
+export 'src/models/signaling_info.dart';
export 'src/models/user_info.dart';
export 'src/openim.dart';
export 'src/utils.dart';
diff --git a/lib/src/listener/signaling_listener.dart b/lib/src/listener/signaling_listener.dart
new file mode 100644
index 0000000..e9e8942
--- /dev/null
+++ b/lib/src/listener/signaling_listener.dart
@@ -0,0 +1,42 @@
+import 'package:flutter_openim_sdk/src/models/signaling_info.dart';
+
+class OnSignalingListener {
+ final Function(SignalingInfo info)? onInvitationCancelled;
+ final Function(SignalingInfo info)? onInvitationTimeout;
+ final Function(SignalingInfo info)? onInviteeAccepted;
+ final Function(SignalingInfo info)? onInviteeRejected;
+ final Function(SignalingInfo info)? onReceiveNewInvitation;
+
+ OnSignalingListener({
+ this.onInvitationCancelled,
+ this.onInvitationTimeout,
+ this.onInviteeAccepted,
+ this.onInviteeRejected,
+ this.onReceiveNewInvitation,
+ });
+
+ /// 被邀请者收到:邀请者取消音视频通话
+ void invitationCancelled(SignalingInfo info) {
+ onInvitationCancelled?.call(info);
+ }
+
+ /// 邀请者收到:被邀请者超时未接通
+ void invitationTimeout(SignalingInfo info) {
+ onInvitationTimeout?.call(info);
+ }
+
+ /// 邀请者收到:被邀请者同意音视频通话
+ void inviteeAccepted(SignalingInfo info) {
+ onInviteeAccepted?.call(info);
+ }
+
+ /// 邀请者收到:被邀请者拒绝音视频通话
+ void inviteeRejected(SignalingInfo info) {
+ onInviteeRejected?.call(info);
+ }
+
+ /// 被邀请者收到:音视频通话邀请
+ void receiveNewInvitation(SignalingInfo info) {
+ onReceiveNewInvitation?.call(info);
+ }
+}
diff --git a/lib/src/manager/im_conversation_manager.dart b/lib/src/manager/im_conversation_manager.dart
index fa37b98..9eb0c34 100644
--- a/lib/src/manager/im_conversation_manager.dart
+++ b/lib/src/manager/im_conversation_manager.dart
@@ -3,14 +3,14 @@ import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
class ConversationManager {
MethodChannel _channel;
- late OnConversationListener conversationListener;
+ late OnConversationListener listener;
ConversationManager(this._channel);
/// Observe conversation changes
/// 会话监听
Future setConversationListener(OnConversationListener listener) {
- this.conversationListener = listener;
+ this.listener = listener;
return _channel.invokeMethod('setConversationListener', _buildParam({}));
}
@@ -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_friendship_manager.dart b/lib/src/manager/im_friendship_manager.dart
index 7b3defd..34f08ce 100644
--- a/lib/src/manager/im_friendship_manager.dart
+++ b/lib/src/manager/im_friendship_manager.dart
@@ -3,14 +3,14 @@ import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
class FriendshipManager {
MethodChannel _channel;
- late OnFriendshipListener friendshipListener;
+ late OnFriendshipListener listener;
FriendshipManager(this._channel);
/// Set up a friend relationship listener
/// 好友关系监听
Future setFriendshipListener(OnFriendshipListener listener) {
- this.friendshipListener = listener;
+ this.listener = listener;
return _channel.invokeMethod('setFriendListener', _buildParam({}));
}
diff --git a/lib/src/manager/im_group_manager.dart b/lib/src/manager/im_group_manager.dart
index c11676f..4c12a47 100644
--- a/lib/src/manager/im_group_manager.dart
+++ b/lib/src/manager/im_group_manager.dart
@@ -3,14 +3,14 @@ import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
class GroupManager {
MethodChannel _channel;
- late OnGroupListener groupListener;
+ late OnGroupListener listener;
GroupManager(this._channel);
/// Set up group relationship monitoring
/// 组关系监听
Future setGroupListener(OnGroupListener listener) {
- this.groupListener = listener;
+ this.listener = listener;
return _channel.invokeMethod('setGroupListener', _buildParam({}));
}
diff --git a/lib/src/manager/im_manager.dart b/lib/src/manager/im_manager.dart
index cb504c2..4d89ac0 100644
--- a/lib/src/manager/im_manager.dart
+++ b/lib/src/manager/im_manager.dart
@@ -12,7 +12,8 @@ class IMManager {
late UserManager userManager;
// late OfflinePushManager offlinePushManager;
- // late SignalingManager signalingManager;
+ late SignalingManager signalingManager;
+
late OnConnectListener _connectListener;
late String uid;
late UserInfo uInfo;
@@ -25,7 +26,7 @@ class IMManager {
groupManager = GroupManager(_channel);
userManager = UserManager(_channel);
// offlinePushManager = OfflinePushManager(_channel);
- // signalingManager = SignalingManager(_channel);
+ signalingManager = SignalingManager(_channel);
_addNativeCallback(_channel);
}
@@ -60,7 +61,7 @@ class IMManager {
switch (type) {
case 'onSelfInfoUpdated':
uInfo = Utils.toObj(data, (map) => UserInfo.fromJson(map));
- userManager.userListener.selfInfoUpdated(uInfo);
+ userManager.listener.selfInfoUpdated(uInfo);
break;
}
} else if (call.method == ListenerType.groupListener) {
@@ -70,49 +71,49 @@ class IMManager {
case 'onGroupApplicationAccepted':
final i = Utils.toObj(
data, (map) => GroupApplicationInfo.fromJson(map));
- groupManager.groupListener.groupApplicationAccepted(i);
+ groupManager.listener.groupApplicationAccepted(i);
break;
case 'onGroupApplicationAdded':
final i = Utils.toObj(
data, (map) => GroupApplicationInfo.fromJson(map));
- groupManager.groupListener.groupApplicationAdded(i);
+ groupManager.listener.groupApplicationAdded(i);
break;
case 'onGroupApplicationDeleted':
final i = Utils.toObj(
data, (map) => GroupApplicationInfo.fromJson(map));
- groupManager.groupListener.groupApplicationDeleted(i);
+ groupManager.listener.groupApplicationDeleted(i);
break;
case 'onGroupApplicationRejected':
final i = Utils.toObj(
data, (map) => GroupApplicationInfo.fromJson(map));
- groupManager.groupListener.groupApplicationRejected(i);
+ groupManager.listener.groupApplicationRejected(i);
break;
case 'onGroupInfoChanged':
final i = Utils.toObj(data, (map) => GroupInfo.fromJson(map));
- groupManager.groupListener.groupInfoChanged(i);
+ groupManager.listener.groupInfoChanged(i);
break;
case 'onGroupMemberAdded':
final i =
Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
- groupManager.groupListener.groupMemberAdded(i);
+ groupManager.listener.groupMemberAdded(i);
break;
case 'onGroupMemberDeleted':
final i =
Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
- groupManager.groupListener.groupMemberDeleted(i);
+ groupManager.listener.groupMemberDeleted(i);
break;
case 'onGroupMemberInfoChanged':
final i =
Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
- groupManager.groupListener.groupMemberInfoChanged(i);
+ groupManager.listener.groupMemberInfoChanged(i);
break;
case 'onJoinedGroupAdded':
final i = Utils.toObj(data, (map) => GroupInfo.fromJson(map));
- groupManager.groupListener.joinedGroupAdded(i);
+ groupManager.listener.joinedGroupAdded(i);
break;
case 'onJoinedGroupDeleted':
final i = Utils.toObj(data, (map) => GroupInfo.fromJson(map));
- groupManager.groupListener.joinedGroupDeleted(i);
+ groupManager.listener.joinedGroupDeleted(i);
break;
}
} else if (call.method == ListenerType.advancedMsgListener) {
@@ -153,28 +154,27 @@ class IMManager {
dynamic data = call.arguments['data'];
switch (type) {
case 'onSyncServerStart':
- conversationManager.conversationListener.syncServerStart();
+ conversationManager.listener.syncServerStart();
break;
case 'onSyncServerFinish':
- conversationManager.conversationListener.syncServerFinish();
+ conversationManager.listener.syncServerFinish();
break;
case 'onSyncServerFailed':
- conversationManager.conversationListener.syncServerFailed();
+ conversationManager.listener.syncServerFailed();
break;
case 'onNewConversation':
var list =
Utils.toList(data, (map) => ConversationInfo.fromJson(map));
- conversationManager.conversationListener.newConversation(list);
+ conversationManager.listener.newConversation(list);
break;
case 'onConversationChanged':
var list =
Utils.toList(data, (map) => ConversationInfo.fromJson(map));
- conversationManager.conversationListener
- .conversationChanged(list);
+ conversationManager.listener.conversationChanged(list);
break;
case 'onTotalUnreadMessageCountChanged':
- conversationManager.conversationListener
+ conversationManager.listener
.totalUnreadMessageCountChanged(data ?? 0);
break;
}
@@ -185,43 +185,64 @@ class IMManager {
switch (type) {
case 'onBlacklistAdded':
final u = Utils.toObj(data, (map) => BlacklistInfo.fromJson(map));
- friendshipManager.friendshipListener.blacklistAdded(u);
+ friendshipManager.listener.blacklistAdded(u);
break;
case 'onBlacklistDeleted':
final u = Utils.toObj(data, (map) => BlacklistInfo.fromJson(map));
- friendshipManager.friendshipListener.blacklistDeleted(u);
+ friendshipManager.listener.blacklistDeleted(u);
break;
case 'onFriendApplicationAccepted':
final u = Utils.toObj(
data, (map) => FriendApplicationInfo.fromJson(map));
- friendshipManager.friendshipListener.friendApplicationAccepted(u);
+ friendshipManager.listener.friendApplicationAccepted(u);
break;
case 'onFriendApplicationAdded':
final u = Utils.toObj(
data, (map) => FriendApplicationInfo.fromJson(map));
- friendshipManager.friendshipListener.friendApplicationAdded(u);
+ friendshipManager.listener.friendApplicationAdded(u);
break;
case 'onFriendApplicationDeleted':
final u = Utils.toObj(
data, (map) => FriendApplicationInfo.fromJson(map));
- friendshipManager.friendshipListener.friendApplicationDeleted(u);
+ friendshipManager.listener.friendApplicationDeleted(u);
break;
case 'onFriendApplicationListRejected':
final u = Utils.toObj(
data, (map) => FriendApplicationInfo.fromJson(map));
- friendshipManager.friendshipListener.friendApplicationRejected(u);
+ friendshipManager.listener.friendApplicationRejected(u);
break;
case 'onFriendInfoChanged':
final u = Utils.toObj(data, (map) => FriendInfo.fromJson(map));
- friendshipManager.friendshipListener.friendInfoChanged(u);
+ friendshipManager.listener.friendInfoChanged(u);
break;
case 'onFriendAdded':
final u = Utils.toObj(data, (map) => FriendInfo.fromJson(map));
- friendshipManager.friendshipListener.friendAdded(u);
+ friendshipManager.listener.friendAdded(u);
break;
case 'onFriendDeleted':
final u = Utils.toObj(data, (map) => FriendInfo.fromJson(map));
- friendshipManager.friendshipListener.friendDeleted(u);
+ friendshipManager.listener.friendDeleted(u);
+ break;
+ }
+ } else if (call.method == ListenerType.signalingListener) {
+ String type = call.arguments['type'];
+ dynamic data = call.arguments['data'];
+ final u = Utils.toObj(data, (map) => SignalingInfo.fromJson(map));
+ switch (type) {
+ case 'onInvitationCancelled':
+ signalingManager.listener.invitationCancelled(u);
+ break;
+ case 'onInvitationTimeout':
+ signalingManager.listener.invitationTimeout(u);
+ break;
+ case 'onInviteeAccepted':
+ signalingManager.listener.inviteeAccepted(u);
+ break;
+ case 'onInviteeRejected':
+ signalingManager.listener.inviteeRejected(u);
+ break;
+ case 'onReceiveNewInvitation':
+ signalingManager.listener.receiveNewInvitation(u);
break;
}
}
diff --git a/lib/src/manager/im_signaling_manager.dart b/lib/src/manager/im_signaling_manager.dart
index 6c34270..1349243 100644
--- a/lib/src/manager/im_signaling_manager.dart
+++ b/lib/src/manager/im_signaling_manager.dart
@@ -1,7 +1,90 @@
-// import 'package:flutter/services.dart';
-//
-// class SignalingManager {
-// MethodChannel _channel;
-//
-// SignalingManager(this._channel);
-// }
+import 'package:flutter/services.dart';
+
+import '../../flutter_openim_sdk.dart';
+
+class SignalingManager {
+ MethodChannel _channel;
+ late OnSignalingListener listener;
+
+ SignalingManager(this._channel);
+
+ /// 信令监听
+ Future setSignalingListener(OnSignalingListener listener) {
+ this.listener = listener;
+ return _channel.invokeMethod('setSignalingListener', _buildParam({}));
+ }
+
+ /// 邀请个人加入音视频
+ Future signalingInvite({
+ required SignalingInfo info,
+ String? operationID,
+ }) =>
+ _channel
+ .invokeMethod(
+ 'signalingInvite',
+ _buildParam({
+ 'signalingInfo': info.toJson(),
+ 'operationID': Utils.checkOperationID(operationID),
+ }))
+ .then((value) =>
+ Utils.toObj(value, (map) => SignalingCertificate.fromJson(map)));
+
+ /// 邀请群里某些人加入音视频
+ Future signalingInviteInGroup({
+ required SignalingInfo info,
+ String? operationID,
+ }) =>
+ _channel
+ .invokeMethod(
+ 'signalingInviteInGroup',
+ _buildParam({
+ 'signalingInfo': info.toJson(),
+ 'operationID': Utils.checkOperationID(operationID),
+ }))
+ .then((value) =>
+ Utils.toObj(value, (map) => SignalingCertificate.fromJson(map)));
+
+ /// 同意某人音视频邀请
+ Future signalingAccept({
+ required SignalingInfo info,
+ String? operationID,
+ }) =>
+ _channel
+ .invokeMethod(
+ 'signalingAccept',
+ _buildParam({
+ 'signalingInfo': info.toJson(),
+ 'operationID': Utils.checkOperationID(operationID),
+ }))
+ .then((value) =>
+ Utils.toObj(value, (map) => SignalingCertificate.fromJson(map)));
+
+ /// 拒绝某人音视频邀请
+ Future signalingReject({
+ required SignalingInfo info,
+ String? operationID,
+ }) =>
+ _channel.invokeMethod(
+ 'signalingReject',
+ _buildParam({
+ 'signalingInfo': info.toJson(),
+ 'operationID': Utils.checkOperationID(operationID),
+ }));
+
+ /// 邀请者取消音视频通话
+ Future signalingCancel({
+ required SignalingInfo info,
+ String? operationID,
+ }) =>
+ _channel.invokeMethod(
+ 'signalingCancel',
+ _buildParam({
+ 'signalingInfo': info.toJson(),
+ 'operationID': Utils.checkOperationID(operationID),
+ }));
+
+ static Map _buildParam(Map param) {
+ param["ManagerName"] = "signalingManager";
+ return param;
+ }
+}
diff --git a/lib/src/manager/im_user_manager.dart b/lib/src/manager/im_user_manager.dart
index 0cc4955..4381170 100644
--- a/lib/src/manager/im_user_manager.dart
+++ b/lib/src/manager/im_user_manager.dart
@@ -3,14 +3,14 @@ import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
class UserManager {
MethodChannel _channel;
- late OnUserListener userListener;
+ late OnUserListener listener;
UserManager(this._channel);
/// Observe user info changes
/// 用户资料改变监听
Future setUserListener(OnUserListener listener) {
- this.userListener = listener;
+ this.listener = listener;
return _channel.invokeMethod('setUserListener', _buildParam({}));
}
diff --git a/lib/src/models/signaling_info.dart b/lib/src/models/signaling_info.dart
new file mode 100644
index 0000000..7361da0
--- /dev/null
+++ b/lib/src/models/signaling_info.dart
@@ -0,0 +1,98 @@
+import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
+
+class SignalingInfo {
+ String? opUserID;
+ InvitationInfo? invitation;
+ OfflinePushInfo? offlinePushInfo;
+
+ SignalingInfo({
+ this.opUserID,
+ this.invitation,
+ this.offlinePushInfo,
+ });
+
+ SignalingInfo.fromJson(Map json) {
+ opUserID = json['opUserID'];
+ invitation = json['invitation'] == null
+ ? null
+ : InvitationInfo.fromJson(json['invitation']);
+ offlinePushInfo = json['offlinePushInfo'] == null
+ ? null
+ : OfflinePushInfo.fromJson(json['offlinePushInfo']);
+ }
+
+ Map toJson() {
+ final data = Map();
+ data['opUserID'] = this.opUserID;
+ data['invitation'] = this.invitation?.toJson();
+ data['offlinePushInfo'] = this.offlinePushInfo?.toJson();
+ return data;
+ }
+}
+
+class InvitationInfo {
+ String? inviterUserID; //邀请者UserID
+ List? inviteeUserIDList; //被邀请者UserID列表,如果是单聊只有一个元素
+ String? groupID; //如果是单聊,为""
+ String? roomID; //房间ID,必须唯一,可以不设置。
+ int? timeout; //邀请超时时间(秒)
+ String? mediaType; //video 或者audio
+ int? sessionType; //1为单聊,2为群聊
+ int? platformID; //和之前定义一致
+
+ InvitationInfo(
+ {this.inviterUserID,
+ this.inviteeUserIDList,
+ this.groupID,
+ this.roomID,
+ this.timeout,
+ this.mediaType,
+ this.sessionType,
+ this.platformID});
+
+ InvitationInfo.fromJson(Map json) {
+ inviterUserID = json['inviterUserID'];
+ inviteeUserIDList = json['inviteeUserIDList'].cast();
+ groupID = json['groupID'];
+ roomID = json['roomID'];
+ timeout = json['timeout'];
+ mediaType = json['mediaType'];
+ sessionType = json['sessionType'];
+ platformID = json['platformID'];
+ }
+
+ Map toJson() {
+ final data = Map();
+ data['inviterUserID'] = this.inviterUserID;
+ data['inviteeUserIDList'] = this.inviteeUserIDList;
+ data['groupID'] = this.groupID;
+ data['roomID'] = this.roomID;
+ data['timeout'] = this.timeout;
+ data['mediaType'] = this.mediaType;
+ data['sessionType'] = this.sessionType;
+ data['platformID'] = this.platformID;
+ return data;
+ }
+}
+
+class SignalingCertificate {
+ String? token;
+ String? roomID;
+ String? liveURL;
+
+ SignalingCertificate({this.token, this.roomID, this.liveURL});
+
+ SignalingCertificate.fromJson(Map json) {
+ token = json['token'];
+ roomID = json['roomID'];
+ liveURL = json['liveURL'];
+ }
+
+ Map toJson() {
+ final data = Map();
+ data['token'] = this.token;
+ data['roomID'] = this.roomID;
+ data['liveURL'] = this.liveURL;
+ return data;
+ }
+}