Add signaling function
This commit is contained in:
parent
6c0676fbe5
commit
40b65f52a5
1
.idea/misc.xml
generated
1
.idea/misc.xml
generated
@ -3,4 +3,5 @@
|
|||||||
<component name="FrameworkDetectionExcludesConfiguration">
|
<component name="FrameworkDetectionExcludesConfiguration">
|
||||||
<type id="android" />
|
<type id="android" />
|
||||||
</component>
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Android API 25 Platform" project-jdk-type="Android SDK" />
|
||||||
</project>
|
</project>
|
1
.idea/modules.xml
generated
1
.idea/modules.xml
generated
@ -3,6 +3,7 @@
|
|||||||
<component name="ProjectModuleManager">
|
<component name="ProjectModuleManager">
|
||||||
<modules>
|
<modules>
|
||||||
<module fileurl="file://$PROJECT_DIR$/.idea/flutter_openim_sdk.iml" filepath="$PROJECT_DIR$/.idea/flutter_openim_sdk.iml" />
|
<module fileurl="file://$PROJECT_DIR$/.idea/flutter_openim_sdk.iml" filepath="$PROJECT_DIR$/.idea/flutter_openim_sdk.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/android/flutter_openim_sdk_android.iml" filepath="$PROJECT_DIR$/android/flutter_openim_sdk_android.iml" />
|
||||||
</modules>
|
</modules>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
@ -1,6 +1,8 @@
|
|||||||
## 2.0.0+1
|
## 2.0.0+2
|
||||||
|
|
||||||
1.Fix some one crash </br>
|
1.Fix some one crash </br>
|
||||||
|
2.New add signaling function </br>
|
||||||
|
3.Delete getConversationRecvMessageOpt
|
||||||
|
|
||||||
## 2.0.0+1
|
## 2.0.0+1
|
||||||
|
|
||||||
|
@ -130,6 +130,23 @@ OpenIM.iMManager
|
|||||||
onGroupInfoChanged: (groupInfo) {
|
onGroupInfoChanged: (groupInfo) {
|
||||||
// 组资料变更
|
// 组资料变更
|
||||||
},
|
},
|
||||||
|
))
|
||||||
|
..signalingManager.setSignalingListener(OnSignalingListener(
|
||||||
|
onReceiveNewInvitation: (info) {
|
||||||
|
// 被邀请者收到:音视频通话邀请
|
||||||
|
},
|
||||||
|
onInviteeRejected: (info) {
|
||||||
|
// 邀请者收到:被邀请者拒绝音视频通话
|
||||||
|
},
|
||||||
|
onInviteeAccepted: (info) {
|
||||||
|
// 邀请者收到:被邀请者同意音视频通话
|
||||||
|
},
|
||||||
|
onInvitationTimeout: (info) {
|
||||||
|
// 邀请者收到:被邀请者超时未接通
|
||||||
|
},
|
||||||
|
onInvitationCancelled: (info) {
|
||||||
|
// 被邀请者收到:邀请者取消音视频通话
|
||||||
|
},
|
||||||
));
|
));
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -335,6 +352,7 @@ OpenIM.iMManager.conversationManager.setConversationRecvMessageOpt(
|
|||||||
- ##### getConversationRecvMessageOpt(查询免打扰状态)
|
- ##### getConversationRecvMessageOpt(查询免打扰状态)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
/// 此方法已废弃,使用getOneConversation/getMultipleConversation方法替代
|
||||||
OpenIM.iMManager.conversationManager.getConversationRecvMessageOpt(
|
OpenIM.iMManager.conversationManager.getConversationRecvMessageOpt(
|
||||||
conversationIDList: [], // 会话id列表
|
conversationIDList: [], // 会话id列表
|
||||||
).then((list) {
|
).then((list) {
|
||||||
|
@ -41,5 +41,5 @@ android {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'io.openim:client-sdk:2.0.8@aar'
|
implementation 'io.openim:client-sdk:2.0.9@aar'
|
||||||
}
|
}
|
@ -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.GroupManager;
|
||||||
import io.openim.flutter_openim_sdk.manager.IMManager;
|
import io.openim.flutter_openim_sdk.manager.IMManager;
|
||||||
import io.openim.flutter_openim_sdk.manager.MessageManager;
|
import io.openim.flutter_openim_sdk.manager.MessageManager;
|
||||||
|
import io.openim.flutter_openim_sdk.manager.SignalingManager;
|
||||||
import io.openim.flutter_openim_sdk.manager.UserManager;
|
import io.openim.flutter_openim_sdk.manager.UserManager;
|
||||||
|
|
||||||
|
|
||||||
@ -37,6 +38,7 @@ public class FlutterOpenimSdkPlugin implements FlutterPlugin, MethodCallHandler
|
|||||||
private static MessageManager messageManager;
|
private static MessageManager messageManager;
|
||||||
private static ConversationManager conversationManager;
|
private static ConversationManager conversationManager;
|
||||||
private static GroupManager groupManager;
|
private static GroupManager groupManager;
|
||||||
|
private static SignalingManager signalingManager;
|
||||||
|
|
||||||
public FlutterOpenimSdkPlugin() {
|
public FlutterOpenimSdkPlugin() {
|
||||||
}
|
}
|
||||||
@ -48,6 +50,7 @@ public class FlutterOpenimSdkPlugin implements FlutterPlugin, MethodCallHandler
|
|||||||
FlutterOpenimSdkPlugin.messageManager = new MessageManager();
|
FlutterOpenimSdkPlugin.messageManager = new MessageManager();
|
||||||
FlutterOpenimSdkPlugin.conversationManager = new ConversationManager();
|
FlutterOpenimSdkPlugin.conversationManager = new ConversationManager();
|
||||||
FlutterOpenimSdkPlugin.groupManager = new GroupManager();
|
FlutterOpenimSdkPlugin.groupManager = new GroupManager();
|
||||||
|
FlutterOpenimSdkPlugin.signalingManager = new SignalingManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -111,11 +111,11 @@ public class ConversationManager extends BaseManager {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getConversationRecvMessageOpt(MethodCall methodCall, MethodChannel.Result result) {
|
// public void getConversationRecvMessageOpt(MethodCall methodCall, MethodChannel.Result result) {
|
||||||
Open_im_sdk.getConversationRecvMessageOpt(
|
// Open_im_sdk.getConversationRecvMessageOpt(
|
||||||
new OnBaseListener(result),
|
// new OnBaseListener(result),
|
||||||
value(methodCall, "operationID"),
|
// value(methodCall, "operationID"),
|
||||||
jsonValue(methodCall, "conversationIDList")
|
// jsonValue(methodCall, "conversationIDList")
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
@ -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"));
|
||||||
|
}
|
||||||
|
}
|
@ -163,6 +163,23 @@ class _MyAppState extends State<MyApp> {
|
|||||||
onGroupInfoChanged: (groupInfo) {
|
onGroupInfoChanged: (groupInfo) {
|
||||||
// 组资料变更
|
// 组资料变更
|
||||||
},
|
},
|
||||||
|
))
|
||||||
|
..signalingManager.setSignalingListener(OnSignalingListener(
|
||||||
|
onReceiveNewInvitation: (info) {
|
||||||
|
// 被邀请者收到:音视频通话邀请
|
||||||
|
},
|
||||||
|
onInviteeRejected: (info) {
|
||||||
|
// 邀请者收到:被邀请者拒绝音视频通话
|
||||||
|
},
|
||||||
|
onInviteeAccepted: (info) {
|
||||||
|
// 邀请者收到:被邀请者同意音视频通话
|
||||||
|
},
|
||||||
|
onInvitationTimeout: (info) {
|
||||||
|
// 邀请者收到:被邀请者超时未接通
|
||||||
|
},
|
||||||
|
onInvitationCancelled: (info) {
|
||||||
|
// 被邀请者收到:邀请者取消音视频通话
|
||||||
|
},
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,9 +281,9 @@ class _MyAppState extends State<MyApp> {
|
|||||||
conversationIDList: [], // 会话id列表
|
conversationIDList: [], // 会话id列表
|
||||||
status: 1, // 1:不接受消息;2:接受在线消息不接受离线消息;0:正常
|
status: 1, // 1:不接受消息;2:接受在线消息不接受离线消息;0:正常
|
||||||
);
|
);
|
||||||
OpenIM.iMManager.conversationManager.getConversationRecvMessageOpt(
|
// OpenIM.iMManager.conversationManager.getConversationRecvMessageOpt(
|
||||||
conversationIDList: [], // 会话id列表
|
// conversationIDList: [], // 会话id列表
|
||||||
);
|
// );
|
||||||
OpenIM.iMManager.conversationManager.simpleSort([]);
|
OpenIM.iMManager.conversationManager.simpleSort([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,17 +7,12 @@ export 'src/enum/listener_type.dart';
|
|||||||
export 'src/enum/message_status.dart';
|
export 'src/enum/message_status.dart';
|
||||||
export 'src/enum/message_type.dart';
|
export 'src/enum/message_type.dart';
|
||||||
export 'src/listener/advanced_msg_listener.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/connect_listener.dart';
|
||||||
export 'src/listener/conversation_listener.dart';
|
export 'src/listener/conversation_listener.dart';
|
||||||
export 'src/listener/friendship_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/group_listener.dart';
|
||||||
export 'src/listener/msg_send_progress_listener.dart';
|
export 'src/listener/msg_send_progress_listener.dart';
|
||||||
export 'src/listener/msg_send_progress_listener.dart';
|
export 'src/listener/signaling_listener.dart';
|
||||||
export 'src/listener/user_listener.dart';
|
|
||||||
export 'src/listener/user_listener.dart';
|
export 'src/listener/user_listener.dart';
|
||||||
export 'src/manager/im_conversation_manager.dart';
|
export 'src/manager/im_conversation_manager.dart';
|
||||||
export 'src/manager/im_friendship_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/conversation_info.dart';
|
||||||
export 'src/models/group_info.dart';
|
export 'src/models/group_info.dart';
|
||||||
export 'src/models/message.dart';
|
export 'src/models/message.dart';
|
||||||
|
export 'src/models/signaling_info.dart';
|
||||||
export 'src/models/user_info.dart';
|
export 'src/models/user_info.dart';
|
||||||
export 'src/openim.dart';
|
export 'src/openim.dart';
|
||||||
export 'src/utils.dart';
|
export 'src/utils.dart';
|
||||||
|
42
lib/src/listener/signaling_listener.dart
Normal file
42
lib/src/listener/signaling_listener.dart
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -3,14 +3,14 @@ import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
|
|||||||
|
|
||||||
class ConversationManager {
|
class ConversationManager {
|
||||||
MethodChannel _channel;
|
MethodChannel _channel;
|
||||||
late OnConversationListener conversationListener;
|
late OnConversationListener listener;
|
||||||
|
|
||||||
ConversationManager(this._channel);
|
ConversationManager(this._channel);
|
||||||
|
|
||||||
/// Observe conversation changes
|
/// Observe conversation changes
|
||||||
/// 会话监听
|
/// 会话监听
|
||||||
Future setConversationListener(OnConversationListener listener) {
|
Future setConversationListener(OnConversationListener listener) {
|
||||||
this.conversationListener = listener;
|
this.listener = listener;
|
||||||
return _channel.invokeMethod('setConversationListener', _buildParam({}));
|
return _channel.invokeMethod('setConversationListener', _buildParam({}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,18 +191,18 @@ class ConversationManager {
|
|||||||
/// Message Do Not Disturb
|
/// Message Do Not Disturb
|
||||||
/// [{"conversationId":"single_13922222222","result":0}]
|
/// [{"conversationId":"single_13922222222","result":0}]
|
||||||
/// 查询免打扰状态
|
/// 查询免打扰状态
|
||||||
Future<List<dynamic>> getConversationRecvMessageOpt({
|
// Future<List<dynamic>> getConversationRecvMessageOpt({
|
||||||
required List<String> conversationIDList,
|
// required List<String> conversationIDList,
|
||||||
String? operationID,
|
// String? operationID,
|
||||||
}) =>
|
// }) =>
|
||||||
_channel
|
// _channel
|
||||||
.invokeMethod(
|
// .invokeMethod(
|
||||||
'getConversationRecvMessageOpt',
|
// 'getConversationRecvMessageOpt',
|
||||||
_buildParam({
|
// _buildParam({
|
||||||
"conversationIDList": conversationIDList,
|
// "conversationIDList": conversationIDList,
|
||||||
"operationID": Utils.checkOperationID(operationID),
|
// "operationID": Utils.checkOperationID(operationID),
|
||||||
}))
|
// }))
|
||||||
.then((value) => Utils.toListMap(value));
|
// .then((value) => Utils.toListMap(value));
|
||||||
|
|
||||||
/// Custom sort for conversation list
|
/// Custom sort for conversation list
|
||||||
/// 会话列表自定义排序规则。
|
/// 会话列表自定义排序规则。
|
||||||
|
@ -3,14 +3,14 @@ import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
|
|||||||
|
|
||||||
class FriendshipManager {
|
class FriendshipManager {
|
||||||
MethodChannel _channel;
|
MethodChannel _channel;
|
||||||
late OnFriendshipListener friendshipListener;
|
late OnFriendshipListener listener;
|
||||||
|
|
||||||
FriendshipManager(this._channel);
|
FriendshipManager(this._channel);
|
||||||
|
|
||||||
/// Set up a friend relationship listener
|
/// Set up a friend relationship listener
|
||||||
/// 好友关系监听
|
/// 好友关系监听
|
||||||
Future setFriendshipListener(OnFriendshipListener listener) {
|
Future setFriendshipListener(OnFriendshipListener listener) {
|
||||||
this.friendshipListener = listener;
|
this.listener = listener;
|
||||||
return _channel.invokeMethod('setFriendListener', _buildParam({}));
|
return _channel.invokeMethod('setFriendListener', _buildParam({}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,14 +3,14 @@ import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
|
|||||||
|
|
||||||
class GroupManager {
|
class GroupManager {
|
||||||
MethodChannel _channel;
|
MethodChannel _channel;
|
||||||
late OnGroupListener groupListener;
|
late OnGroupListener listener;
|
||||||
|
|
||||||
GroupManager(this._channel);
|
GroupManager(this._channel);
|
||||||
|
|
||||||
/// Set up group relationship monitoring
|
/// Set up group relationship monitoring
|
||||||
/// 组关系监听
|
/// 组关系监听
|
||||||
Future setGroupListener(OnGroupListener listener) {
|
Future setGroupListener(OnGroupListener listener) {
|
||||||
this.groupListener = listener;
|
this.listener = listener;
|
||||||
return _channel.invokeMethod('setGroupListener', _buildParam({}));
|
return _channel.invokeMethod('setGroupListener', _buildParam({}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,8 @@ class IMManager {
|
|||||||
late UserManager userManager;
|
late UserManager userManager;
|
||||||
|
|
||||||
// late OfflinePushManager offlinePushManager;
|
// late OfflinePushManager offlinePushManager;
|
||||||
// late SignalingManager signalingManager;
|
late SignalingManager signalingManager;
|
||||||
|
|
||||||
late OnConnectListener _connectListener;
|
late OnConnectListener _connectListener;
|
||||||
late String uid;
|
late String uid;
|
||||||
late UserInfo uInfo;
|
late UserInfo uInfo;
|
||||||
@ -25,7 +26,7 @@ class IMManager {
|
|||||||
groupManager = GroupManager(_channel);
|
groupManager = GroupManager(_channel);
|
||||||
userManager = UserManager(_channel);
|
userManager = UserManager(_channel);
|
||||||
// offlinePushManager = OfflinePushManager(_channel);
|
// offlinePushManager = OfflinePushManager(_channel);
|
||||||
// signalingManager = SignalingManager(_channel);
|
signalingManager = SignalingManager(_channel);
|
||||||
_addNativeCallback(_channel);
|
_addNativeCallback(_channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +61,7 @@ class IMManager {
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case 'onSelfInfoUpdated':
|
case 'onSelfInfoUpdated':
|
||||||
uInfo = Utils.toObj(data, (map) => UserInfo.fromJson(map));
|
uInfo = Utils.toObj(data, (map) => UserInfo.fromJson(map));
|
||||||
userManager.userListener.selfInfoUpdated(uInfo);
|
userManager.listener.selfInfoUpdated(uInfo);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (call.method == ListenerType.groupListener) {
|
} else if (call.method == ListenerType.groupListener) {
|
||||||
@ -70,49 +71,49 @@ class IMManager {
|
|||||||
case 'onGroupApplicationAccepted':
|
case 'onGroupApplicationAccepted':
|
||||||
final i = Utils.toObj(
|
final i = Utils.toObj(
|
||||||
data, (map) => GroupApplicationInfo.fromJson(map));
|
data, (map) => GroupApplicationInfo.fromJson(map));
|
||||||
groupManager.groupListener.groupApplicationAccepted(i);
|
groupManager.listener.groupApplicationAccepted(i);
|
||||||
break;
|
break;
|
||||||
case 'onGroupApplicationAdded':
|
case 'onGroupApplicationAdded':
|
||||||
final i = Utils.toObj(
|
final i = Utils.toObj(
|
||||||
data, (map) => GroupApplicationInfo.fromJson(map));
|
data, (map) => GroupApplicationInfo.fromJson(map));
|
||||||
groupManager.groupListener.groupApplicationAdded(i);
|
groupManager.listener.groupApplicationAdded(i);
|
||||||
break;
|
break;
|
||||||
case 'onGroupApplicationDeleted':
|
case 'onGroupApplicationDeleted':
|
||||||
final i = Utils.toObj(
|
final i = Utils.toObj(
|
||||||
data, (map) => GroupApplicationInfo.fromJson(map));
|
data, (map) => GroupApplicationInfo.fromJson(map));
|
||||||
groupManager.groupListener.groupApplicationDeleted(i);
|
groupManager.listener.groupApplicationDeleted(i);
|
||||||
break;
|
break;
|
||||||
case 'onGroupApplicationRejected':
|
case 'onGroupApplicationRejected':
|
||||||
final i = Utils.toObj(
|
final i = Utils.toObj(
|
||||||
data, (map) => GroupApplicationInfo.fromJson(map));
|
data, (map) => GroupApplicationInfo.fromJson(map));
|
||||||
groupManager.groupListener.groupApplicationRejected(i);
|
groupManager.listener.groupApplicationRejected(i);
|
||||||
break;
|
break;
|
||||||
case 'onGroupInfoChanged':
|
case 'onGroupInfoChanged':
|
||||||
final i = Utils.toObj(data, (map) => GroupInfo.fromJson(map));
|
final i = Utils.toObj(data, (map) => GroupInfo.fromJson(map));
|
||||||
groupManager.groupListener.groupInfoChanged(i);
|
groupManager.listener.groupInfoChanged(i);
|
||||||
break;
|
break;
|
||||||
case 'onGroupMemberAdded':
|
case 'onGroupMemberAdded':
|
||||||
final i =
|
final i =
|
||||||
Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
|
Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
|
||||||
groupManager.groupListener.groupMemberAdded(i);
|
groupManager.listener.groupMemberAdded(i);
|
||||||
break;
|
break;
|
||||||
case 'onGroupMemberDeleted':
|
case 'onGroupMemberDeleted':
|
||||||
final i =
|
final i =
|
||||||
Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
|
Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
|
||||||
groupManager.groupListener.groupMemberDeleted(i);
|
groupManager.listener.groupMemberDeleted(i);
|
||||||
break;
|
break;
|
||||||
case 'onGroupMemberInfoChanged':
|
case 'onGroupMemberInfoChanged':
|
||||||
final i =
|
final i =
|
||||||
Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
|
Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map));
|
||||||
groupManager.groupListener.groupMemberInfoChanged(i);
|
groupManager.listener.groupMemberInfoChanged(i);
|
||||||
break;
|
break;
|
||||||
case 'onJoinedGroupAdded':
|
case 'onJoinedGroupAdded':
|
||||||
final i = Utils.toObj(data, (map) => GroupInfo.fromJson(map));
|
final i = Utils.toObj(data, (map) => GroupInfo.fromJson(map));
|
||||||
groupManager.groupListener.joinedGroupAdded(i);
|
groupManager.listener.joinedGroupAdded(i);
|
||||||
break;
|
break;
|
||||||
case 'onJoinedGroupDeleted':
|
case 'onJoinedGroupDeleted':
|
||||||
final i = Utils.toObj(data, (map) => GroupInfo.fromJson(map));
|
final i = Utils.toObj(data, (map) => GroupInfo.fromJson(map));
|
||||||
groupManager.groupListener.joinedGroupDeleted(i);
|
groupManager.listener.joinedGroupDeleted(i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (call.method == ListenerType.advancedMsgListener) {
|
} else if (call.method == ListenerType.advancedMsgListener) {
|
||||||
@ -153,28 +154,27 @@ class IMManager {
|
|||||||
dynamic data = call.arguments['data'];
|
dynamic data = call.arguments['data'];
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'onSyncServerStart':
|
case 'onSyncServerStart':
|
||||||
conversationManager.conversationListener.syncServerStart();
|
conversationManager.listener.syncServerStart();
|
||||||
break;
|
break;
|
||||||
case 'onSyncServerFinish':
|
case 'onSyncServerFinish':
|
||||||
conversationManager.conversationListener.syncServerFinish();
|
conversationManager.listener.syncServerFinish();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'onSyncServerFailed':
|
case 'onSyncServerFailed':
|
||||||
conversationManager.conversationListener.syncServerFailed();
|
conversationManager.listener.syncServerFailed();
|
||||||
break;
|
break;
|
||||||
case 'onNewConversation':
|
case 'onNewConversation':
|
||||||
var list =
|
var list =
|
||||||
Utils.toList(data, (map) => ConversationInfo.fromJson(map));
|
Utils.toList(data, (map) => ConversationInfo.fromJson(map));
|
||||||
conversationManager.conversationListener.newConversation(list);
|
conversationManager.listener.newConversation(list);
|
||||||
break;
|
break;
|
||||||
case 'onConversationChanged':
|
case 'onConversationChanged':
|
||||||
var list =
|
var list =
|
||||||
Utils.toList(data, (map) => ConversationInfo.fromJson(map));
|
Utils.toList(data, (map) => ConversationInfo.fromJson(map));
|
||||||
conversationManager.conversationListener
|
conversationManager.listener.conversationChanged(list);
|
||||||
.conversationChanged(list);
|
|
||||||
break;
|
break;
|
||||||
case 'onTotalUnreadMessageCountChanged':
|
case 'onTotalUnreadMessageCountChanged':
|
||||||
conversationManager.conversationListener
|
conversationManager.listener
|
||||||
.totalUnreadMessageCountChanged(data ?? 0);
|
.totalUnreadMessageCountChanged(data ?? 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -185,43 +185,64 @@ class IMManager {
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case 'onBlacklistAdded':
|
case 'onBlacklistAdded':
|
||||||
final u = Utils.toObj(data, (map) => BlacklistInfo.fromJson(map));
|
final u = Utils.toObj(data, (map) => BlacklistInfo.fromJson(map));
|
||||||
friendshipManager.friendshipListener.blacklistAdded(u);
|
friendshipManager.listener.blacklistAdded(u);
|
||||||
break;
|
break;
|
||||||
case 'onBlacklistDeleted':
|
case 'onBlacklistDeleted':
|
||||||
final u = Utils.toObj(data, (map) => BlacklistInfo.fromJson(map));
|
final u = Utils.toObj(data, (map) => BlacklistInfo.fromJson(map));
|
||||||
friendshipManager.friendshipListener.blacklistDeleted(u);
|
friendshipManager.listener.blacklistDeleted(u);
|
||||||
break;
|
break;
|
||||||
case 'onFriendApplicationAccepted':
|
case 'onFriendApplicationAccepted':
|
||||||
final u = Utils.toObj(
|
final u = Utils.toObj(
|
||||||
data, (map) => FriendApplicationInfo.fromJson(map));
|
data, (map) => FriendApplicationInfo.fromJson(map));
|
||||||
friendshipManager.friendshipListener.friendApplicationAccepted(u);
|
friendshipManager.listener.friendApplicationAccepted(u);
|
||||||
break;
|
break;
|
||||||
case 'onFriendApplicationAdded':
|
case 'onFriendApplicationAdded':
|
||||||
final u = Utils.toObj(
|
final u = Utils.toObj(
|
||||||
data, (map) => FriendApplicationInfo.fromJson(map));
|
data, (map) => FriendApplicationInfo.fromJson(map));
|
||||||
friendshipManager.friendshipListener.friendApplicationAdded(u);
|
friendshipManager.listener.friendApplicationAdded(u);
|
||||||
break;
|
break;
|
||||||
case 'onFriendApplicationDeleted':
|
case 'onFriendApplicationDeleted':
|
||||||
final u = Utils.toObj(
|
final u = Utils.toObj(
|
||||||
data, (map) => FriendApplicationInfo.fromJson(map));
|
data, (map) => FriendApplicationInfo.fromJson(map));
|
||||||
friendshipManager.friendshipListener.friendApplicationDeleted(u);
|
friendshipManager.listener.friendApplicationDeleted(u);
|
||||||
break;
|
break;
|
||||||
case 'onFriendApplicationListRejected':
|
case 'onFriendApplicationListRejected':
|
||||||
final u = Utils.toObj(
|
final u = Utils.toObj(
|
||||||
data, (map) => FriendApplicationInfo.fromJson(map));
|
data, (map) => FriendApplicationInfo.fromJson(map));
|
||||||
friendshipManager.friendshipListener.friendApplicationRejected(u);
|
friendshipManager.listener.friendApplicationRejected(u);
|
||||||
break;
|
break;
|
||||||
case 'onFriendInfoChanged':
|
case 'onFriendInfoChanged':
|
||||||
final u = Utils.toObj(data, (map) => FriendInfo.fromJson(map));
|
final u = Utils.toObj(data, (map) => FriendInfo.fromJson(map));
|
||||||
friendshipManager.friendshipListener.friendInfoChanged(u);
|
friendshipManager.listener.friendInfoChanged(u);
|
||||||
break;
|
break;
|
||||||
case 'onFriendAdded':
|
case 'onFriendAdded':
|
||||||
final u = Utils.toObj(data, (map) => FriendInfo.fromJson(map));
|
final u = Utils.toObj(data, (map) => FriendInfo.fromJson(map));
|
||||||
friendshipManager.friendshipListener.friendAdded(u);
|
friendshipManager.listener.friendAdded(u);
|
||||||
break;
|
break;
|
||||||
case 'onFriendDeleted':
|
case 'onFriendDeleted':
|
||||||
final u = Utils.toObj(data, (map) => FriendInfo.fromJson(map));
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,90 @@
|
|||||||
// import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
//
|
|
||||||
// class SignalingManager {
|
import '../../flutter_openim_sdk.dart';
|
||||||
// MethodChannel _channel;
|
|
||||||
//
|
class SignalingManager {
|
||||||
// SignalingManager(this._channel);
|
MethodChannel _channel;
|
||||||
// }
|
late OnSignalingListener listener;
|
||||||
|
|
||||||
|
SignalingManager(this._channel);
|
||||||
|
|
||||||
|
/// 信令监听
|
||||||
|
Future setSignalingListener(OnSignalingListener listener) {
|
||||||
|
this.listener = listener;
|
||||||
|
return _channel.invokeMethod('setSignalingListener', _buildParam({}));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 邀请个人加入音视频
|
||||||
|
Future<SignalingCertificate> 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<SignalingCertificate> 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<SignalingCertificate> 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<dynamic> signalingReject({
|
||||||
|
required SignalingInfo info,
|
||||||
|
String? operationID,
|
||||||
|
}) =>
|
||||||
|
_channel.invokeMethod(
|
||||||
|
'signalingReject',
|
||||||
|
_buildParam({
|
||||||
|
'signalingInfo': info.toJson(),
|
||||||
|
'operationID': Utils.checkOperationID(operationID),
|
||||||
|
}));
|
||||||
|
|
||||||
|
/// 邀请者取消音视频通话
|
||||||
|
Future<dynamic> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -3,14 +3,14 @@ import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
|
|||||||
|
|
||||||
class UserManager {
|
class UserManager {
|
||||||
MethodChannel _channel;
|
MethodChannel _channel;
|
||||||
late OnUserListener userListener;
|
late OnUserListener listener;
|
||||||
|
|
||||||
UserManager(this._channel);
|
UserManager(this._channel);
|
||||||
|
|
||||||
/// Observe user info changes
|
/// Observe user info changes
|
||||||
/// 用户资料改变监听
|
/// 用户资料改变监听
|
||||||
Future setUserListener(OnUserListener listener) {
|
Future setUserListener(OnUserListener listener) {
|
||||||
this.userListener = listener;
|
this.listener = listener;
|
||||||
return _channel.invokeMethod('setUserListener', _buildParam({}));
|
return _channel.invokeMethod('setUserListener', _buildParam({}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
98
lib/src/models/signaling_info.dart
Normal file
98
lib/src/models/signaling_info.dart
Normal file
@ -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<String, dynamic> json) {
|
||||||
|
opUserID = json['opUserID'];
|
||||||
|
invitation = json['invitation'] == null
|
||||||
|
? null
|
||||||
|
: InvitationInfo.fromJson(json['invitation']);
|
||||||
|
offlinePushInfo = json['offlinePushInfo'] == null
|
||||||
|
? null
|
||||||
|
: OfflinePushInfo.fromJson(json['offlinePushInfo']);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final data = Map<String, dynamic>();
|
||||||
|
data['opUserID'] = this.opUserID;
|
||||||
|
data['invitation'] = this.invitation?.toJson();
|
||||||
|
data['offlinePushInfo'] = this.offlinePushInfo?.toJson();
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class InvitationInfo {
|
||||||
|
String? inviterUserID; //邀请者UserID
|
||||||
|
List<String>? 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<String, dynamic> json) {
|
||||||
|
inviterUserID = json['inviterUserID'];
|
||||||
|
inviteeUserIDList = json['inviteeUserIDList'].cast<String>();
|
||||||
|
groupID = json['groupID'];
|
||||||
|
roomID = json['roomID'];
|
||||||
|
timeout = json['timeout'];
|
||||||
|
mediaType = json['mediaType'];
|
||||||
|
sessionType = json['sessionType'];
|
||||||
|
platformID = json['platformID'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final data = Map<String, dynamic>();
|
||||||
|
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<String, dynamic> json) {
|
||||||
|
token = json['token'];
|
||||||
|
roomID = json['roomID'];
|
||||||
|
liveURL = json['liveURL'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final data = Map<String, dynamic>();
|
||||||
|
data['token'] = this.token;
|
||||||
|
data['roomID'] = this.roomID;
|
||||||
|
data['liveURL'] = this.liveURL;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user