Add signaling function

main
hrxiang 3 years ago
parent 6c0676fbe5
commit 40b65f52a5
  1. 1
      .idea/misc.xml
  2. 1
      .idea/modules.xml
  3. 4
      CHANGELOG.md
  4. 18
      README.zh-cn.md
  5. 2
      android/build.gradle
  6. 3
      android/src/main/java/io/openim/flutter_openim_sdk/FlutterOpenimSdkPlugin.java
  7. 30
      android/src/main/java/io/openim/flutter_openim_sdk/listener/OnSignalingListener.java
  8. 14
      android/src/main/java/io/openim/flutter_openim_sdk/manager/ConversationManager.java
  9. 49
      android/src/main/java/io/openim/flutter_openim_sdk/manager/SignalingManager.java
  10. 23
      example/lib/main.dart
  11. 8
      lib/flutter_openim_sdk.dart
  12. 42
      lib/src/listener/signaling_listener.dart
  13. 28
      lib/src/manager/im_conversation_manager.dart
  14. 4
      lib/src/manager/im_friendship_manager.dart
  15. 4
      lib/src/manager/im_group_manager.dart
  16. 79
      lib/src/manager/im_manager.dart
  17. 97
      lib/src/manager/im_signaling_manager.dart
  18. 4
      lib/src/manager/im_user_manager.dart
  19. 98
      lib/src/models/signaling_info.dart

@ -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>

@ -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, // 12线线0 status: 1, // 12线线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/user_listener.dart'; export 'src/listener/signaling_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';

@ -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({}));
} }

@ -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; //12
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…
Cancel
Save