main
cpdl 2 months ago
parent 43515d8058
commit 67bf71c998
  1. 6
      .gitignore
  2. 93
      .idea/flutter_openim_sdk.iml
  3. BIN
      example/OpenIM_v3_3e8b8fb2ecd8414db50838d9f7bcb19d.db
  4. 3
      example/integration_test/plugin_integration_test.dart
  5. 8
      example/lib/main.dart
  6. 76
      example/pubspec.lock
  7. 2
      example/test/widget_test.dart
  8. 4
      lib/src/manager/im_channel_manager.dart
  9. 1
      lib/src/manager/im_conversation_manager.dart
  10. 1
      lib/src/manager/im_friendship_manager.dart
  11. 1
      lib/src/manager/im_group_manager.dart
  12. 2
      lib/src/manager/im_manager.dart
  13. 23
      lib/src/models/notification_info.dart
  14. 6
      windows/flutter_openim_sdk_plugin.cpp
  15. 34
      windows/src/NimCore.cpp
  16. 25
      windows/src/common/FLTService.cpp
  17. 89
      windows/src/common/ThreadUtil.cpp
  18. 20
      windows/src/common/ThreadUtil.h
  19. 201
      windows/src/common/services/ChannelManager.cpp
  20. 56
      windows/src/common/services/ChannelManager.h
  21. 21
      windows/src/common/services/ConstDefine.h
  22. 341
      windows/src/common/services/ConversationManager.cpp
  23. 82
      windows/src/common/services/ConversationManager.h
  24. 383
      windows/src/common/services/FriendManager.cpp
  25. 74
      windows/src/common/services/FriendManager.h
  26. 508
      windows/src/common/services/GroupManager.cpp
  27. 107
      windows/src/common/services/GroupManager.h
  28. 228
      windows/src/common/services/IMManager.cpp
  29. 7
      windows/src/common/services/IMManager.h
  30. 629
      windows/src/common/services/Listen.cpp
  31. 199
      windows/src/common/services/Listen.h
  32. 894
      windows/src/common/services/MessageManager.cpp
  33. 159
      windows/src/common/services/MessageManager.h
  34. 150
      windows/src/common/services/UserManager.cpp
  35. 49
      windows/src/common/services/UserManager.h

6
.gitignore vendored

@ -2,3 +2,9 @@
#/.packages #/.packages
#/.dart_tool #/.dart_tool
#/example/ios/Podfile.lock #/example/ios/Podfile.lock
build/
.dart_tool/
.vscode/
.metadata
.idea/encodings.xml
.idea/other.xml

@ -123,6 +123,99 @@
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/.dart_tool" /> <excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/.pub" /> <excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/build" /> <excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/example/windows/flutter/ephemeral/.plugin_symlinks/flutter_openim_sdk/build" />
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />

@ -6,12 +6,9 @@
// For more information about Flutter integration tests, please see // For more information about Flutter integration tests, please see
// https://flutter.dev/to/integration-testing // https://flutter.dev/to/integration-testing
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart'; import 'package:integration_test/integration_test.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
void main() { void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized(); IntegrationTestWidgetsFlutterBinding.ensureInitialized();

@ -3,7 +3,7 @@ import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
void main() { void main() {
try { try {
runApp(MyApp()); runApp(const MyApp());
} catch (e, stackTrace) { } catch (e, stackTrace) {
print('Error during app startup: $e'); print('Error during app startup: $e');
print('Stack trace: $stackTrace'); print('Stack trace: $stackTrace');
@ -11,6 +11,8 @@ void main() {
} }
class MyApp extends StatefulWidget { class MyApp extends StatefulWidget {
const MyApp({super.key});
@override @override
_MyAppState createState() => _MyAppState(); _MyAppState createState() => _MyAppState();
} }
@ -21,7 +23,7 @@ class _MyAppState extends State<MyApp> {
super.initState(); super.initState();
OpenIM.iMManager OpenIM.iMManager
.initSDK( .initSDK(
platformID: 1, platformID: 2,
apiAddr: 'http://192.168.77.135:10002', apiAddr: 'http://192.168.77.135:10002',
wsAddr: 'ws://192.168.77.135:10001', wsAddr: 'ws://192.168.77.135:10001',
dataDir: './', dataDir: './',
@ -50,7 +52,7 @@ class _MyAppState extends State<MyApp> {
), ),
body: Column( body: Column(
children: [ children: [
TextButton(onPressed: () {}, child: Text('login')), TextButton(onPressed: () {}, child: const Text('login')),
], ],
), ),
), ),

@ -5,42 +5,42 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: async name: async
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.12.0" version: "2.11.0"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
name: boolean_selector name: boolean_selector
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.2" version: "2.1.1"
characters: characters:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" version: "1.3.0"
clock: clock:
dependency: transitive dependency: transitive
description: description:
name: clock name: clock
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.2" version: "1.1.1"
collection: collection:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.19.1" version: "1.18.0"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
@ -53,10 +53,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: fake_async name: fake_async
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.2" version: "1.3.1"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -86,18 +86,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker name: leak_tracker
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.0.8" version: "10.0.5"
leak_tracker_flutter_testing: leak_tracker_flutter_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_flutter_testing name: leak_tracker_flutter_testing
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.9" version: "3.0.5"
leak_tracker_testing: leak_tracker_testing:
dependency: transitive dependency: transitive
description: description:
@ -118,10 +118,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.17" version: "0.12.16+1"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
@ -134,71 +134,71 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.16.0" version: "1.15.0"
path: path:
dependency: transitive dependency: transitive
description: description:
name: path name: path
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.1" version: "1.9.0"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.99"
source_span: source_span:
dependency: transitive dependency: transitive
description: description:
name: source_span name: source_span
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.10.1" version: "1.10.0"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.12.1" version: "1.11.1"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
name: stream_channel name: stream_channel
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.1.2"
string_scanner: string_scanner:
dependency: transitive dependency: transitive
description: description:
name: string_scanner name: string_scanner
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.1" version: "1.2.0"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
name: term_glyph name: term_glyph
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.2" version: "1.2.1"
test_api: test_api:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.4" version: "0.7.2"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
@ -211,10 +211,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "14.3.1" version: "14.2.5"
sdks: sdks:
dart: ">=3.7.0-0 <4.0.0" dart: ">=3.4.4 <4.0.0"
flutter: ">=3.18.0-18.0.pre.54" flutter: ">=3.18.0-18.0.pre.54"

@ -13,7 +13,7 @@ import 'package:flutter_openim_sdk_example/main.dart';
void main() { void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async { testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame. // Build our app and trigger a frame.
await tester.pumpWidget(MyApp()); await tester.pumpWidget(const MyApp());
// Verify that our counter starts at 0. // Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget); expect(find.text('0'), findsOneWidget);

@ -2,10 +2,6 @@ import 'dart:developer';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
import 'package:flutter_openim_sdk/src/models/set_channel_member_info.dart';
import '../listener/channel_listener.dart';
import '../models/channel_info.dart';
class ChannelManager { class ChannelManager {
MethodChannel _channel; MethodChannel _channel;

@ -4,7 +4,6 @@ import 'dart:developer';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
import '../models/update_req.dart';
class ConversationManager { class ConversationManager {
MethodChannel _channel; MethodChannel _channel;

@ -3,7 +3,6 @@ import 'dart:async';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
import '../models/update_req.dart';
class FriendshipManager { class FriendshipManager {
MethodChannel _channel; MethodChannel _channel;

@ -2,7 +2,6 @@ import 'dart:developer';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
import 'package:flutter_openim_sdk/src/models/set_group_member_info.dart';
class GroupManager { class GroupManager {
MethodChannel _channel; MethodChannel _channel;

@ -6,8 +6,6 @@ import 'package:flutter/services.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
import 'package:flutter_openim_sdk/src/logger.dart'; import 'package:flutter_openim_sdk/src/logger.dart';
import '../models/channel_info.dart';
import 'im_channel_manager.dart';
class IMManager { class IMManager {
MethodChannel _channel; MethodChannel _channel;

@ -1,5 +1,4 @@
import '../../flutter_openim_sdk.dart'; import '../../flutter_openim_sdk.dart';
import 'channel_info.dart';
/// OA notification /// OA notification
class OANotification { class OANotification {
@ -456,8 +455,6 @@ class GroupMemberInfoChangedNotification {
} }
} }
///todo ///todo
/// ///
class ChannelNotification { class ChannelNotification {
@ -481,7 +478,8 @@ class ChannelNotification {
}); });
ChannelNotification.fromJson(Map<String, dynamic> json) { ChannelNotification.fromJson(Map<String, dynamic> json) {
Channel = json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; Channel =
json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null;
opUser = json['opUser'] != null opUser = json['opUser'] != null
? ChannelMembersInfo.fromJson(json['opUser']) ? ChannelMembersInfo.fromJson(json['opUser'])
: null; : null;
@ -514,7 +512,6 @@ class ChannelNotification {
} }
} }
/// ///
class KickedChannelMemeberNotification { class KickedChannelMemeberNotification {
/// ///
@ -530,7 +527,8 @@ class KickedChannelMemeberNotification {
{this.Channel, this.opUser, this.kickedUserList}); {this.Channel, this.opUser, this.kickedUserList});
KickedChannelMemeberNotification.fromJson(Map<String, dynamic> json) { KickedChannelMemeberNotification.fromJson(Map<String, dynamic> json) {
Channel = json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; Channel =
json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null;
opUser = json['opUser'] != null opUser = json['opUser'] != null
? ChannelMembersInfo.fromJson(json['opUser']) ? ChannelMembersInfo.fromJson(json['opUser'])
: null; : null;
@ -569,7 +567,8 @@ class QuitChannelNotification {
QuitChannelNotification({this.Channel, this.quitUser}); QuitChannelNotification({this.Channel, this.quitUser});
QuitChannelNotification.fromJson(Map<String, dynamic> json) { QuitChannelNotification.fromJson(Map<String, dynamic> json) {
Channel = json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; Channel =
json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null;
quitUser = json['quitUser'] != null quitUser = json['quitUser'] != null
? ChannelMembersInfo.fromJson(json['quitUser']) ? ChannelMembersInfo.fromJson(json['quitUser'])
: null; : null;
@ -598,7 +597,8 @@ class EnterChannelNotification {
EnterChannelNotification({this.Channel, this.entrantUser}); EnterChannelNotification({this.Channel, this.entrantUser});
EnterChannelNotification.fromJson(Map<String, dynamic> json) { EnterChannelNotification.fromJson(Map<String, dynamic> json) {
Channel = json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; Channel =
json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null;
entrantUser = json['entrantUser'] != null entrantUser = json['entrantUser'] != null
? ChannelMembersInfo.fromJson(json['entrantUser']) ? ChannelMembersInfo.fromJson(json['entrantUser'])
: null; : null;
@ -616,7 +616,6 @@ class EnterChannelNotification {
} }
} }
/// ///
class MuteChannelMemberNotification { class MuteChannelMemberNotification {
/// ///
@ -639,7 +638,8 @@ class MuteChannelMemberNotification {
}); });
MuteChannelMemberNotification.fromJson(Map<String, dynamic> json) { MuteChannelMemberNotification.fromJson(Map<String, dynamic> json) {
Channel = json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; Channel =
json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null;
opUser = json['opUser'] != null opUser = json['opUser'] != null
? ChannelMembersInfo.fromJson(json['opUser']) ? ChannelMembersInfo.fromJson(json['opUser'])
: null; : null;
@ -683,7 +683,8 @@ class ChannelMemberInfoChangedNotification {
}); });
ChannelMemberInfoChangedNotification.fromJson(Map<String, dynamic> json) { ChannelMemberInfoChangedNotification.fromJson(Map<String, dynamic> json) {
Channel = json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; Channel =
json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null;
opUser = json['opUser'] != null opUser = json['opUser'] != null
? ChannelMembersInfo.fromJson(json['opUser']) ? ChannelMembersInfo.fromJson(json['opUser'])
: null; : null;

@ -14,6 +14,7 @@
#include <sstream> #include <sstream>
#include "src/MethodCallHandlerImpl.h" #include "src/MethodCallHandlerImpl.h"
#include "src/common/stable.h" #include "src/common/stable.h"
#include "src/common/ThreadUtil.h"
class FlutterOpenimSdkPlugin : public flutter::Plugin { class FlutterOpenimSdkPlugin : public flutter::Plugin {
@ -68,6 +69,11 @@ void FlutterOpenimSdkPlugin::RegisterWithRegistrar(
NimCore::getInstance()->setLogDir(filePath); NimCore::getInstance()->setLogDir(filePath);
// Initialize ThreadUtil to capture the platform thread ID
// This is called on the platform thread already, so it will initialize correctly
ThreadUtil::InitializePlatformThreadId();
YXLOG_API(Info) << "ThreadUtil initialized on platform thread" << YXLOGEnd;
auto plugin = std::make_unique<FlutterOpenimSdkPlugin>(); auto plugin = std::make_unique<FlutterOpenimSdkPlugin>();
auto channel = plugin->m_channel->startListening(registrar); auto channel = plugin->m_channel->startListening(registrar);
channel->SetMethodCallHandler( channel->SetMethodCallHandler(

@ -10,8 +10,15 @@
#include <flutter/standard_method_codec.h> #include <flutter/standard_method_codec.h>
#include "FLTConvert.h" #include "FLTConvert.h"
#include "common/ThreadUtil.h"
#include "common/services/IMManager.h" #include "common/services/IMManager.h"
#include "common/services/UserManager.h"
#include "common/services/FriendManager.h"
#include "common/services/MessageManager.h"
#include "common/services/GroupManager.h"
#include "common/services/ChannelManager.h"
#include "common/services/ConversationManager.h"
#include "common/stable.h"
const std::string kFLTNimCoreService = "serviceName"; const std::string kFLTNimCoreService = "serviceName";
@ -22,7 +29,12 @@ NimCore::~NimCore() {}
void NimCore::regService() { void NimCore::regService() {
addService(new IMManagerService()); addService(new IMManagerService());
addService(new UserManagerService());
addService(new FriendshipManagerService());
addService(new MessageManagerService());
addService(new GroupManagerService());
addService(new ChannelManagerService());
addService(new ConversationManagerService());
} }
void NimCore::cleanService() { void NimCore::cleanService() {
@ -85,8 +97,9 @@ void NimCore::onMethodCall(
void NimCore::invokeMethod(const std::string& method, void NimCore::invokeMethod(const std::string& method,
const flutter::EncodableMap& arguments) { const flutter::EncodableMap& arguments) {
if (m_channel) { if (m_channel) {
m_channel->InvokeMethod( // Use ThreadUtil to ensure we're on the platform thread
method, std::make_unique<flutter::EncodableValue>(arguments)); ThreadUtil::InvokeMethodOnPlatformThread(
m_channel, method, std::make_unique<flutter::EncodableValue>(arguments));
} }
} }
@ -115,9 +128,16 @@ void NimCore::invokeMethod(const std::string& eventName,
const InvokeMehtodCallback& callback) { const InvokeMehtodCallback& callback) {
invokeCallback = callback; invokeCallback = callback;
if (m_channel) { if (m_channel) {
m_channel->InvokeMethod( // Create shared pointers for the data to ensure copy constructibility
eventName, std::make_unique<flutter::EncodableValue>(arguments), auto eventNameCopy = std::make_shared<std::string>(eventName);
std::make_unique<InterResult<flutter::EncodableValue>>()); auto argsCopy = std::make_shared<flutter::EncodableMap>(arguments);
// Use ThreadUtil to ensure we're on the platform thread
ThreadUtil::RunOnPlatformThread([this, eventNameCopy, argsCopy]() {
m_channel->InvokeMethod(
*eventNameCopy, std::make_unique<flutter::EncodableValue>(*argsCopy),
std::make_unique<InterResult<flutter::EncodableValue>>());
});
} }
} }

@ -5,6 +5,7 @@
#include "FLTService.h" #include "FLTService.h"
#include "../FLTConvert.h" #include "../FLTConvert.h"
#include "ThreadUtil.h"
std::string FLTService::getServiceName() const { return m_serviceName; } std::string FLTService::getServiceName() const { return m_serviceName; }
@ -22,8 +23,16 @@ void notifyEvent(const std::string& eventName,
for (auto& it : logList) { for (auto& it : logList) {
YXLOG_API(Info) << it << YXLOGEnd; YXLOG_API(Info) << it << YXLOGEnd;
} }
NimCore::getInstance()->invokeMethod(eventName, arguments);
YXLOG_API(Info) << "notifyEvent invoke completation." << YXLOGEnd; // Create shared pointers for the data to ensure copy constructibility
auto eventNameCopy = std::make_shared<std::string>(eventName);
auto argsCopy = std::make_shared<flutter::EncodableMap>(arguments);
// Ensure we're on the platform thread
ThreadUtil::RunOnPlatformThread([eventNameCopy, argsCopy]() {
NimCore::getInstance()->invokeMethod(*eventNameCopy, *argsCopy);
YXLOG_API(Info) << "notifyEvent invoke completation." << YXLOGEnd;
});
} }
//void FLTService::notifyEvent(const std::string& eventName, //void FLTService::notifyEvent(const std::string& eventName,
@ -60,6 +69,14 @@ void FLTService::notifyEventEx(const std::string& serviceName,
for (auto& it : logList) { for (auto& it : logList) {
YXLOG_API(Info) << it << YXLOGEnd; YXLOG_API(Info) << it << YXLOGEnd;
} }
NimCore::getInstance()->invokeMethod(eventName, arguments);
YXLOG_API(Info) << "notifyEventEx invoke completation." << YXLOGEnd; // Create shared pointers for the data to ensure copy constructibility
auto eventNameCopy = std::make_shared<std::string>(eventName);
auto argsCopy = std::make_shared<flutter::EncodableMap>(arguments);
// Ensure we're on the platform thread
ThreadUtil::RunOnPlatformThread([eventNameCopy, argsCopy]() {
NimCore::getInstance()->invokeMethod(*eventNameCopy, *argsCopy);
YXLOG_API(Info) << "notifyEventEx invoke completation." << YXLOGEnd;
});
} }

@ -0,0 +1,89 @@
#include "ThreadUtil.h"
#include <windows.h>
#include <process.h>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <memory>
namespace ThreadUtil {
// Global variables for thread management
static DWORD g_platformThreadId = 0;
static std::queue<std::function<void()>> g_taskQueue;
static std::mutex g_queueMutex;
static std::condition_variable g_queueCondition;
static bool g_initialized = false;
static HANDLE g_workerThread = NULL;
// Function to initialize the platform thread ID
void InitializePlatformThreadId() {
g_platformThreadId = GetCurrentThreadId();
g_initialized = true;
}
// Worker thread function
unsigned __stdcall WorkerThreadProc(void* param) {
while (true) {
std::function<void()> task;
{
std::unique_lock<std::mutex> lock(g_queueMutex);
g_queueCondition.wait(lock, [] { return !g_taskQueue.empty(); });
task = g_taskQueue.front();
g_taskQueue.pop();
}
// Execute the task
task();
}
return 0;
}
// Function to ensure code runs on the platform thread
void RunOnPlatformThread(std::function<void()> callback) {
// Initialize on first call
if (!g_initialized) {
InitializePlatformThreadId();
// Create worker thread
g_workerThread = (HANDLE)_beginthreadex(NULL, 0, WorkerThreadProc, NULL, 0, NULL);
}
// If we're already on the platform thread, execute directly
if (GetCurrentThreadId() == g_platformThreadId) {
callback();
return;
}
// Create a shared_ptr to the callback to ensure it's copy constructible
auto callbackPtr = std::make_shared<std::function<void()>>(std::move(callback));
// Otherwise, queue the task for execution on the platform thread
{
std::lock_guard<std::mutex> lock(g_queueMutex);
g_taskQueue.push([callbackPtr]() { (*callbackPtr)(); });
}
g_queueCondition.notify_one();
}
// Helper function to invoke method on platform thread
void InvokeMethodOnPlatformThread(
flutter::MethodChannel<flutter::EncodableValue>* channel,
const std::string& method,
std::unique_ptr<flutter::EncodableValue> arguments) {
if (!channel) return;
// Create shared pointers for the data to ensure copy constructibility
auto methodCopy = std::make_shared<std::string>(method);
auto argsCopy = std::shared_ptr<flutter::EncodableValue>(arguments.release());
RunOnPlatformThread([channel, methodCopy, argsCopy]() {
channel->InvokeMethod(
*methodCopy,
std::make_unique<flutter::EncodableValue>(*argsCopy)
);
});
}
}

@ -0,0 +1,20 @@
#pragma once
#include <functional>
#include <windows.h>
#include <flutter/method_channel.h>
#include <flutter/encodable_value.h>
namespace ThreadUtil {
// Function to initialize the platform thread ID
void InitializePlatformThreadId();
// Function to ensure code runs on the platform thread
void RunOnPlatformThread(std::function<void()> callback);
// Helper function to invoke method on platform thread
void InvokeMethodOnPlatformThread(
flutter::MethodChannel<flutter::EncodableValue>* channel,
const std::string& method,
std::unique_ptr<flutter::EncodableValue> arguments);
}

@ -0,0 +1,201 @@
#include "ChannelManager.h"
#include <libopenimsdk.h>
#include "../NimResult.h"
#include "../ZegoDataUtils.h"
#include "ConstDefine.h"
#include "Listen.h"
ChannelManagerService::ChannelManagerService() {
m_serviceName = "channelManager";
}
void ChannelManagerService::onMethodCalled(
const std::string& method,
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (method == "setChannelListener") {
setChannelListener(arguments, result);
} else if (method == "getChannelMembersInfo") {
getChannelMembersInfo(arguments, result);
} else if (method == "getChannelMemberList") {
getChannelMemberList(arguments, result);
} else if (method == "getChannelsInfo") {
getChannelsInfo(arguments, result);
} else if (method == "joinChannel") {
joinChannel(arguments, result);
} else if (method == "quitChannel") {
quitChannel(arguments, result);
} else if (method == "changeChannelMute") {
changeChannelMute(arguments, result);
} else if (method == "changeChannelMemberMute") {
changeChannelMemberMute(arguments, result);
} else if (method == "isJoinChannel") {
isJoinChannel(arguments, result);
} else if (method == "getUsersInChannel") {
getUsersInChannel(arguments, result);
} else {
result->NotImplemented();
}
}
void ChannelManagerService::setChannelListener(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
set_channel_listener(NewChannelListenCallBack());
result->Success(flutter::EncodableValue());
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ChannelManagerService::getChannelMembersInfo(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto channelID = zego_value_get_string(arguments->at(flutter::EncodableValue("channelID")));
auto userIDList = zego_value_get_string(arguments->at(flutter::EncodableValue("userIDList")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* channelID_cs = const_cast<char*>(channelID.c_str());
char* userIDList_cs = const_cast<char*>(userIDList.c_str());
get_specified_channel_members_info(NewBaseCallBack(result), operationID_cs, channelID_cs, userIDList_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ChannelManagerService::getChannelMemberList(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto channelID = zego_value_get_string(arguments->at(flutter::EncodableValue("channelID")));
auto filter = zego_value_get_int(arguments->at(flutter::EncodableValue("filter")));
auto offset = zego_value_get_int(arguments->at(flutter::EncodableValue("offset")));
auto count = zego_value_get_int(arguments->at(flutter::EncodableValue("count")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* channelID_cs = const_cast<char*>(channelID.c_str());
get_channel_member_list(NewBaseCallBack(result), operationID_cs, channelID_cs, filter, offset, count);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ChannelManagerService::getChannelsInfo(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto channelIDList = zego_value_get_string(arguments->at(flutter::EncodableValue("channelIDList")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* channelIDList_cs = const_cast<char*>(channelIDList.c_str());
get_specified_channels_info(NewBaseCallBack(result), operationID_cs, channelIDList_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ChannelManagerService::joinChannel(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto channelID = zego_value_get_string(arguments->at(flutter::EncodableValue("channelID")));
auto reason = zego_value_get_string(arguments->at(flutter::EncodableValue("reason")));
auto joinSource = zego_value_get_int(arguments->at(flutter::EncodableValue("joinSource")));
auto ex = zego_value_get_string(arguments->at(flutter::EncodableValue("ex")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* channelID_cs = const_cast<char*>(channelID.c_str());
char* reason_cs = const_cast<char*>(reason.c_str());
char* ex_cs = const_cast<char*>(ex.c_str());
join_channel(NewBaseCallBack(result), operationID_cs, channelID_cs, reason_cs, joinSource, ex_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ChannelManagerService::quitChannel(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto channelID = zego_value_get_string(arguments->at(flutter::EncodableValue("channelID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* channelID_cs = const_cast<char*>(channelID.c_str());
quit_channel(NewBaseCallBack(result), operationID_cs, channelID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ChannelManagerService::changeChannelMute(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
// if (arguments) {
// auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
// auto channelID = zego_value_get_string(arguments->at(flutter::EncodableValue("channelID")));
// auto mute = zego_value_get_bool(arguments->at(flutter::EncodableValue("mute")));
// char* operationID_cs = const_cast<char*>(operationID.c_str());
// char* channelID_cs = const_cast<char*>(channelID.c_str());
// change_channel_mute(NewBaseCallBack(result), operationID_cs, channelID_cs, mute);
// } else {
// result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
// }
}
void ChannelManagerService::changeChannelMemberMute(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
// if (arguments) {
// auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
// auto channelID = zego_value_get_string(arguments->at(flutter::EncodableValue("channelID")));
// auto userID = zego_value_get_string(arguments->at(flutter::EncodableValue("userID")));
// auto seconds = zego_value_get_int(arguments->at(flutter::EncodableValue("seconds")));
// char* operationID_cs = const_cast<char*>(operationID.c_str());
// char* channelID_cs = const_cast<char*>(channelID.c_str());
// char* userID_cs = const_cast<char*>(userID.c_str());
// change_channel_member_mute(NewBaseCallBack(result), operationID_cs, channelID_cs, userID_cs, seconds);
// } else {
// result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
// }
}
void ChannelManagerService::isJoinChannel(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto channelID = zego_value_get_string(arguments->at(flutter::EncodableValue("channelID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* channelID_cs = const_cast<char*>(channelID.c_str());
is_join_channel(NewBaseCallBack(result), operationID_cs, channelID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ChannelManagerService::getUsersInChannel(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto channelID = zego_value_get_string(arguments->at(flutter::EncodableValue("channelID")));
auto userIDs = zego_value_get_string(arguments->at(flutter::EncodableValue("userIDs")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* channelID_cs = const_cast<char*>(channelID.c_str());
char* userIDs_cs = const_cast<char*>(userIDs.c_str());
get_users_in_channel(NewBaseCallBack(result), operationID_cs, channelID_cs, userIDs_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}

@ -0,0 +1,56 @@
#ifndef CHANNEL_MANAGER_SERVICE_H
#define CHANNEL_MANAGER_SERVICE_H
#include "../FLTService.h"
#include "Listen.h"
#include <flutter/standard_method_codec.h>
#include <memory>
#include <string>
class ChannelManagerService : public FLTService
{
public:
ChannelManagerService();
void onMethodCalled(
const std::string &method,
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
// Method handlers
void setChannelListener(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getChannelMembersInfo(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getChannelMemberList(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getChannelsInfo(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void joinChannel(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void quitChannel(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void changeChannelMute(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void changeChannelMemberMute(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void isJoinChannel(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getUsersInChannel(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
private:
std::string m_serviceName;
};
#endif // CHANNEL_MANAGER_SERVICE_H

@ -45,10 +45,14 @@ enum class ConstDefine {
MSG_DELETED, MSG_DELETED,
RECV_NEW_MESSAGES, RECV_NEW_MESSAGES,
RECV_OFFLINE_NEW_MESSAGES, RECV_OFFLINE_NEW_MESSAGES,
SELF_INFO_UPDATED, SELF_INFO_UPDATED,
USER_STATUS_CHANGED, USER_STATUS_CHANGED,
RECV_CUSTOM_BUSINESS_MESSAGE, RECV_CUSTOM_BUSINESS_MESSAGE,
MESSAGE_KV_INFO_CHANGED, MESSAGE_KV_INFO_CHANGED,
OPEN, OPEN,
PART_SIZE, PART_SIZE,
HASH_PART_PROGRESS, HASH_PART_PROGRESS,
@ -59,9 +63,22 @@ enum class ConstDefine {
COMPLETE, COMPLETE,
CONVERSATION_USER_INPUT_STATUS_CHANGED, CONVERSATION_USER_INPUT_STATUS_CHANGED,
RECV_ONLINE_ONLY_MESSAGE, RECV_ONLINE_ONLY_MESSAGE,
RECV_MESSAGE_EDIT, NEW_RECV_MESSAGE_EDIT,
USER_TOKEN_INVALID, USER_TOKEN_INVALID,
ON_PROGRESS
ON_PROGRESS,
JOINED_CHANNEL_ADDED,
JOINED_CHANNEL_DELETED,
CHANNEL_MEMBER_ADDED,
CHANNEL_MEMBER_DELETED,
CHANNEL_APPLICATION_ADDED,
CHANNEL_APPLICATION_DELETED,
CHANNEL_INFO_CHANGED,
CHANNEL_DISMISSED,
CHANNEL_MEMBER_INFO_CHANGED,
CHANNEL_APPLICATION_ACCEPTED,
CHANNEL_APPLICATION_REJECTED,
}; };

@ -0,0 +1,341 @@
#include "ConversationManager.h"
#include <libopenimsdk.h>
#include "../NimResult.h"
#include "../ZegoDataUtils.h"
#include "ConstDefine.h"
#include "Listen.h"
ConversationManagerService::ConversationManagerService() {
m_serviceName = "conversationManager";
}
void ConversationManagerService::onMethodCalled(
const std::string& method,
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (method == "setConversationListener") {
setConversationListener(arguments, result);
} else if (method == "getAllConversationList") {
getAllConversationList(arguments, result);
} else if (method == "getConversationListSplit") {
getConversationListSplit(arguments, result);
} else if (method == "getOneConversation") {
getOneConversation(arguments, result);
} else if (method == "getMultipleConversation") {
getMultipleConversation(arguments, result);
} else if (method == "setConversationDraft") {
setConversationDraft(arguments, result);
} else if (method == "hideConversation") {
hideConversation(arguments, result);
} else if (method == "markConversationMessageAsRead") {
markConversationMessageAsRead(arguments, result);
} else if (method == "getTotalUnreadMsgCount") {
getTotalUnreadMsgCount(arguments, result);
} else if (method == "getConversationIDBySessionType") {
getConversationIDBySessionType(arguments, result);
} else if (method == "clearConversationAndDeleteAllMsg") {
clearConversationAndDeleteAllMsg(arguments, result);
} else if (method == "deleteConversationAndDeleteAllMsg") {
deleteConversationAndDeleteAllMsg(arguments, result);
} else if (method == "getAtAllTag") {
getAtAllTag(arguments, result);
} else if (method == "hideAllConversations") {
hideAllConversations(arguments, result);
} else if (method == "searchConversation") {
searchConversation(arguments, result);
} else if (method == "changeInputStates") {
changeInputStates(arguments, result);
} else if (method == "getInputStates") {
getInputStates(arguments, result);
} else if (method == "setConversation") {
setConversation(arguments, result);
} else if (method == "searchConversations") {
searchConversations(arguments, result);
} else {
result->NotImplemented();
}
}
void ConversationManagerService::setConversationListener(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
set_conversation_listener(NewConversationListenerCallBack());
result->Success(flutter::EncodableValue());
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::getAllConversationList(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
get_all_conversation_list(NewBaseCallBack(result), operationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::getConversationListSplit(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto offset = zego_value_get_int(arguments->at(flutter::EncodableValue("offset")));
auto count = zego_value_get_int(arguments->at(flutter::EncodableValue("count")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
get_conversation_list_split(NewBaseCallBack(result), operationID_cs, offset, count);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::getOneConversation(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto sessionType = zego_value_get_int(arguments->at(flutter::EncodableValue("sessionType")));
auto sourceID = zego_value_get_string(arguments->at(flutter::EncodableValue("sourceID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* sourceID_cs = const_cast<char*>(sourceID.c_str());
get_one_conversation(NewBaseCallBack(result), operationID_cs, sessionType, sourceID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::getMultipleConversation(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationIDList = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationIDList")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationIDList_cs = const_cast<char*>(conversationIDList.c_str());
get_multiple_conversation(NewBaseCallBack(result), operationID_cs, conversationIDList_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::setConversationDraft(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
auto draftText = zego_value_get_string(arguments->at(flutter::EncodableValue("draftText")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
char* draftText_cs = const_cast<char*>(draftText.c_str());
set_conversation_draft(NewBaseCallBack(result), operationID_cs, conversationID_cs, draftText_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::hideConversation(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
hide_conversation(NewBaseCallBack(result), operationID_cs, conversationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::markConversationMessageAsRead(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
mark_conversation_message_as_read(NewBaseCallBack(result), operationID_cs, conversationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::getTotalUnreadMsgCount(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
get_total_unread_msg_count(NewBaseCallBack(result), operationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::getConversationIDBySessionType(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto sourceID = zego_value_get_string(arguments->at(flutter::EncodableValue("sourceID")));
auto sessionType = zego_value_get_int(arguments->at(flutter::EncodableValue("sessionType")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* sourceID_cs = const_cast<char*>(sourceID.c_str());
std::string conversationID = get_conversation_id_by_session_type(operationID_cs, sourceID_cs, sessionType);
result->Success(flutter::EncodableValue(conversationID));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::clearConversationAndDeleteAllMsg(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
clear_conversation_and_delete_all_msg(NewBaseCallBack(result), operationID_cs, conversationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::deleteConversationAndDeleteAllMsg(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
delete_conversation_and_delete_all_msg(NewBaseCallBack(result), operationID_cs, conversationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::getAtAllTag(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
std::string tag = get_at_all_tag(operationID_cs);
result->Success(flutter::EncodableValue(tag));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::hideAllConversations(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
hide_all_conversations(NewBaseCallBack(result), operationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::searchConversation(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto name = zego_value_get_string(arguments->at(flutter::EncodableValue("name")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* name_cs = const_cast<char*>(name.c_str());
search_conversation(NewBaseCallBack(result), operationID_cs, name_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::changeInputStates(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
auto focus = zego_value_get_bool(arguments->at(flutter::EncodableValue("focus")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
change_input_states(NewBaseCallBack(result), operationID_cs, conversationID_cs, focus);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::getInputStates(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
auto userID = zego_value_get_string(arguments->at(flutter::EncodableValue("userID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
char* userID_cs = const_cast<char*>(userID.c_str());
get_input_states(NewBaseCallBack(result), operationID_cs, conversationID_cs, userID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::setConversation(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
auto req = zego_value_get_string(arguments->at(flutter::EncodableValue("req")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
char* req_cs = const_cast<char*>(req.c_str());
set_conversation(NewBaseCallBack(result), operationID_cs, conversationID_cs, req_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void ConversationManagerService::searchConversations(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto name = zego_value_get_string(arguments->at(flutter::EncodableValue("name")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* name_cs = const_cast<char*>(name.c_str());
search_conversations(NewBaseCallBack(result), operationID_cs, name_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}

@ -0,0 +1,82 @@
#ifndef CONVERSATION_MANAGER_SERVICE_H
#define CONVERSATION_MANAGER_SERVICE_H
#include "../FLTService.h"
#include "Listen.h"
#include <flutter/standard_method_codec.h>
#include <memory>
#include <string>
class ConversationManagerService: public FLTService {
public:
ConversationManagerService();
void onMethodCalled(
const std::string& method,
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
// Method handlers
void setConversationListener(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getAllConversationList(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getConversationListSplit(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getOneConversation(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getMultipleConversation(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void setConversationDraft(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void hideConversation(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void markConversationMessageAsRead(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getTotalUnreadMsgCount(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getConversationIDBySessionType(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void clearConversationAndDeleteAllMsg(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void deleteConversationAndDeleteAllMsg(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getAtAllTag(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void hideAllConversations(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void searchConversation(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void changeInputStates(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getInputStates(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void setConversation(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void searchConversations(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
private:
std::string m_serviceName;
};
#endif // CONVERSATION_MANAGER_SERVICE_H

@ -0,0 +1,383 @@
#include "FriendManager.h"
#include <libopenimsdk.h>
#include "../NimResult.h"
#include "../ZegoDataUtils.h"
#include "ConstDefine.h"
#include "Listen.h"
FriendshipManagerService::FriendshipManagerService()
{
m_serviceName = "friendshipManager";
}
void FriendshipManagerService::onMethodCalled(
const std::string &method,
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (method == "setFriendListener")
{
setFriendListener(arguments, result);
}
else if (method == "getFriendsInfo")
{
getFriendsInfo(arguments, result);
}
else if (method == "addFriend")
{
addFriend(arguments, result);
}
else if (method == "getFriendApplicationListAsRecipient")
{
getFriendApplicationListAsRecipient(arguments, result);
}
else if (method == "getFriendApplicationListAsApplicant")
{
getFriendApplicationListAsApplicant(arguments, result);
}
else if (method == "getFriendList")
{
getFriendList(arguments, result);
}
else if (method == "getFriendListPage")
{
getFriendListPage(arguments, result);
}
else if (method == "addBlacklist")
{
addBlacklist(arguments, result);
}
else if (method == "getBlacklist")
{
getBlacklist(arguments, result);
}
else if (method == "removeBlacklist")
{
removeBlacklist(arguments, result);
}
else if (method == "checkFriend")
{
checkFriend(arguments, result);
}
else if (method == "deleteFriend")
{
deleteFriend(arguments, result);
}
else if (method == "acceptFriendApplication")
{
acceptFriendApplication(arguments, result);
}
else if (method == "refuseFriendApplication")
{
refuseFriendApplication(arguments, result);
}
else if (method == "searchFriends")
{
searchFriends(arguments, result);
}
else if (method == "updateFriends")
{
updateFriends(arguments, result);
}
else
{
result->NotImplemented();
}
}
void FriendshipManagerService::setFriendListener(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
set_friend_listener(NewFriendshipListenCallBack());
result->Success(flutter::EncodableValue());
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::getFriendsInfo(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto userIDList = zego_value_get_string(arguments->at(flutter::EncodableValue("userIDList")));
auto filterBlack = zego_value_get_bool(arguments->at(flutter::EncodableValue("filterBlack")));
char *operationID_cs = const_cast<char *>(operationID.c_str());
char *userIDList_cs = const_cast<char *>(userIDList.c_str());
get_specified_friends_info(NewBaseCallBack(result), operationID_cs, userIDList_cs, filterBlack);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::addFriend(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto friendInfo = map_2_json(*arguments);
char *operationID_cs = const_cast<char *>(operationID.c_str());
char *friendInfo_cs = const_cast<char *>(friendInfo.c_str());
add_friend(NewBaseCallBack(result), operationID_cs, friendInfo_cs);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::getFriendApplicationListAsRecipient(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char *operationID_cs = const_cast<char *>(operationID.c_str());
get_friend_application_list_as_recipient(NewBaseCallBack(result), operationID_cs);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::getFriendApplicationListAsApplicant(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char *operationID_cs = const_cast<char *>(operationID.c_str());
get_friend_application_list_as_applicant(NewBaseCallBack(result), operationID_cs);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::getFriendList(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto filterBlack = zego_value_get_bool(arguments->at(flutter::EncodableValue("filterBlack")));
char *operationID_cs = const_cast<char *>(operationID.c_str());
get_friend_list(NewBaseCallBack(result), operationID_cs, filterBlack);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::getFriendListPage(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto offset = zego_value_get_int(arguments->at(flutter::EncodableValue("offset")));
auto count = zego_value_get_int(arguments->at(flutter::EncodableValue("count")));
auto filterBlack = zego_value_get_bool(arguments->at(flutter::EncodableValue("filterBlack")));
char *operationID_cs = const_cast<char *>(operationID.c_str());
get_friend_list_page(NewBaseCallBack(result), operationID_cs, offset, count, filterBlack);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::addBlacklist(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto userID = zego_value_get_string(arguments->at(flutter::EncodableValue("userID")));
auto ex = zego_value_get_string(arguments->at(flutter::EncodableValue("ex")));
char *operationID_cs = const_cast<char *>(operationID.c_str());
char *userID_cs = const_cast<char *>(userID.c_str());
char *ex_cs = const_cast<char *>(ex.c_str());
add_black(NewBaseCallBack(result), operationID_cs, userID_cs, ex_cs);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::getBlacklist(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char *operationID_cs = const_cast<char *>(operationID.c_str());
get_black_list(NewBaseCallBack(result), operationID_cs);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::removeBlacklist(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto userID = zego_value_get_string(arguments->at(flutter::EncodableValue("userID")));
char *operationID_cs = const_cast<char *>(operationID.c_str());
char *userID_cs = const_cast<char *>(userID.c_str());
remove_black(NewBaseCallBack(result), operationID_cs, userID_cs);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::checkFriend(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto userIDList = zego_value_get_string(arguments->at(flutter::EncodableValue("userIDList")));
char *operationID_cs = const_cast<char *>(operationID.c_str());
char *userIDList_cs = const_cast<char *>(userIDList.c_str());
check_friend(NewBaseCallBack(result), operationID_cs, userIDList_cs);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::deleteFriend(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto userID = zego_value_get_string(arguments->at(flutter::EncodableValue("userID")));
char *operationID_cs = const_cast<char *>(operationID.c_str());
char *userID_cs = const_cast<char *>(userID.c_str());
delete_friend(NewBaseCallBack(result), operationID_cs, userID_cs);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::acceptFriendApplication(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto applicationInfo = map_2_json(*arguments);
char *operationID_cs = const_cast<char *>(operationID.c_str());
char *applicationInfo_cs = const_cast<char *>(applicationInfo.c_str());
accept_friend_application(NewBaseCallBack(result), operationID_cs, applicationInfo_cs);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::refuseFriendApplication(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto applicationInfo = map_2_json(*arguments);
char *operationID_cs = const_cast<char *>(operationID.c_str());
char *applicationInfo_cs = const_cast<char *>(applicationInfo.c_str());
refuse_friend_application(NewBaseCallBack(result), operationID_cs, applicationInfo_cs);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::searchFriends(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto searchParam = zego_value_get_string(arguments->at(flutter::EncodableValue("searchParam")));
char *operationID_cs = const_cast<char *>(operationID.c_str());
char *searchParam_cs = const_cast<char *>(searchParam.c_str());
search_friends(NewBaseCallBack(result), operationID_cs, searchParam_cs);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void FriendshipManagerService::updateFriends(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
{
if (arguments)
{
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto req = zego_value_get_string(arguments->at(flutter::EncodableValue("req")));
char *operationID_cs = const_cast<char *>(operationID.c_str());
char *req_cs = const_cast<char *>(req.c_str());
update_friends(NewBaseCallBack(result), operationID_cs, req_cs);
}
else
{
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}

@ -0,0 +1,74 @@
#ifndef FRIENDSHIP_MANAGER_SERVICE_H
#define FRIENDSHIP_MANAGER_SERVICE_H
#include "../FLTService.h"
#include "Listen.h"
#include <flutter/standard_method_codec.h>
#include <memory>
#include <string>
class FriendshipManagerService : public FLTService
{
public:
FriendshipManagerService();
void onMethodCalled(
const std::string &method,
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
// Method handlers
void setFriendListener(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getFriendsInfo(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void addFriend(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getFriendApplicationListAsRecipient(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getFriendApplicationListAsApplicant(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getFriendList(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getFriendListPage(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void addBlacklist(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getBlacklist(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void removeBlacklist(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void checkFriend(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void deleteFriend(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void acceptFriendApplication(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void refuseFriendApplication(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void searchFriends(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void updateFriends(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
private:
std::string m_serviceName;
};
#endif // FRIENDSHIP_MANAGER_SERVICE_H

@ -0,0 +1,508 @@
#include "GroupManager.h"
#include <libopenimsdk.h>
#include "../NimResult.h"
#include "../ZegoDataUtils.h"
#include "ConstDefine.h"
#include "Listen.h"
GroupManagerService::GroupManagerService() {
m_serviceName = "groupManager";
}
void GroupManagerService::onMethodCalled(
const std::string& method,
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (method == "setGroupListener") {
setGroupListener(arguments, result);
} else if (method == "inviteUserToGroup") {
inviteUserToGroup(arguments, result);
} else if (method == "kickGroupMember") {
kickGroupMember(arguments, result);
} else if (method == "getGroupMembersInfo") {
getGroupMembersInfo(arguments, result);
} else if (method == "getGroupMemberList") {
getGroupMemberList(arguments, result);
} else if (method == "getJoinedGroupList") {
getJoinedGroupList(arguments, result);
} else if (method == "getJoinedGroupListPage") {
getJoinedGroupListPage(arguments, result);
} else if (method == "createGroup") {
createGroup(arguments, result);
} else if (method == "setGroupInfo") {
setGroupInfo(arguments, result);
} else if (method == "getGroupsInfo") {
getGroupsInfo(arguments, result);
} else if (method == "joinGroup") {
joinGroup(arguments, result);
} else if (method == "quitGroup") {
quitGroup(arguments, result);
} else if (method == "transferGroupOwner") {
transferGroupOwner(arguments, result);
} else if (method == "getGroupApplicationListAsRecipient") {
getGroupApplicationListAsRecipient(arguments, result);
} else if (method == "getGroupApplicationListAsApplicant") {
getGroupApplicationListAsApplicant(arguments, result);
} else if (method == "acceptGroupApplication") {
acceptGroupApplication(arguments, result);
} else if (method == "refuseGroupApplication") {
refuseGroupApplication(arguments, result);
} else if (method == "dismissGroup") {
dismissGroup(arguments, result);
} else if (method == "changeGroupMute") {
changeGroupMute(arguments, result);
} else if (method == "changeGroupMemberMute") {
changeGroupMemberMute(arguments, result);
} else if (method == "searchGroups") {
searchGroups(arguments, result);
} else if (method == "getGroupMemberListByJoinTimeFilter") {
getGroupMemberListByJoinTimeFilter(arguments, result);
} else if (method == "getGroupMemberOwnerAndAdmin") {
getGroupMemberOwnerAndAdmin(arguments, result);
} else if (method == "searchGroupMembers") {
searchGroupMembers(arguments, result);
} else if (method == "setGroupMemberInfo") {
setGroupMemberInfo(arguments, result);
} else if (method == "isJoinGroup") {
isJoinGroup(arguments, result);
} else if (method == "getUsersInGroup") {
getUsersInGroup(arguments, result);
} else {
result->NotImplemented();
}
}
void GroupManagerService::setGroupListener(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
set_group_listener(NewGroupListenerCallBack());
result->Success(flutter::EncodableValue());
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::inviteUserToGroup(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto reason = zego_value_get_string(arguments->at(flutter::EncodableValue("reason")));
auto userIDList = zego_value_get_string(arguments->at(flutter::EncodableValue("userIDList")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
char* reason_cs = const_cast<char*>(reason.c_str());
char* userIDList_cs = const_cast<char*>(userIDList.c_str());
invite_user_to_group(NewBaseCallBack(result), operationID_cs, groupID_cs, reason_cs, userIDList_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::kickGroupMember(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto reason = zego_value_get_string(arguments->at(flutter::EncodableValue("reason")));
auto userIDList = zego_value_get_string(arguments->at(flutter::EncodableValue("userIDList")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
char* reason_cs = const_cast<char*>(reason.c_str());
char* userIDList_cs = const_cast<char*>(userIDList.c_str());
kick_group_member(NewBaseCallBack(result), operationID_cs, groupID_cs, reason_cs, userIDList_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::getGroupMembersInfo(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto userIDList = zego_value_get_string(arguments->at(flutter::EncodableValue("userIDList")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
char* userIDList_cs = const_cast<char*>(userIDList.c_str());
get_specified_group_members_info(NewBaseCallBack(result), operationID_cs, groupID_cs, userIDList_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::getGroupMemberList(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto filter = zego_value_get_int(arguments->at(flutter::EncodableValue("filter")));
auto offset = zego_value_get_int(arguments->at(flutter::EncodableValue("offset")));
auto count = zego_value_get_int(arguments->at(flutter::EncodableValue("count")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
get_group_member_list(NewBaseCallBack(result), operationID_cs, groupID_cs, filter, offset, count);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::getJoinedGroupList(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
get_joined_group_list(NewBaseCallBack(result), operationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::getJoinedGroupListPage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto offset = zego_value_get_int(arguments->at(flutter::EncodableValue("offset")));
auto count = zego_value_get_int(arguments->at(flutter::EncodableValue("count")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
get_joined_group_list_page(NewBaseCallBack(result), operationID_cs, offset, count);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::createGroup(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupInfo = map_2_json(*arguments);
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupInfo_cs = const_cast<char*>(groupInfo.c_str());
create_group(NewBaseCallBack(result), operationID_cs, groupInfo_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::setGroupInfo(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupInfo = zego_value_get_string(arguments->at(flutter::EncodableValue("groupInfo")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupInfo_cs = const_cast<char*>(groupInfo.c_str());
set_group_info(NewBaseCallBack(result), operationID_cs, groupInfo_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::getGroupsInfo(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupIDList = zego_value_get_string(arguments->at(flutter::EncodableValue("groupIDList")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupIDList_cs = const_cast<char*>(groupIDList.c_str());
get_specified_groups_info(NewBaseCallBack(result), operationID_cs, groupIDList_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::joinGroup(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto reason = zego_value_get_string(arguments->at(flutter::EncodableValue("reason")));
auto joinSource = zego_value_get_int(arguments->at(flutter::EncodableValue("joinSource")));
auto ex = zego_value_get_string(arguments->at(flutter::EncodableValue("ex")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
char* reason_cs = const_cast<char*>(reason.c_str());
char* ex_cs = const_cast<char*>(ex.c_str());
join_group(NewBaseCallBack(result), operationID_cs, groupID_cs, reason_cs, joinSource, ex_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::quitGroup(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
quit_group(NewBaseCallBack(result), operationID_cs, groupID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::transferGroupOwner(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto userID = zego_value_get_string(arguments->at(flutter::EncodableValue("userID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
char* userID_cs = const_cast<char*>(userID.c_str());
transfer_group_owner(NewBaseCallBack(result), operationID_cs, groupID_cs, userID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::getGroupApplicationListAsRecipient(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
get_group_application_list_as_recipient(NewBaseCallBack(result), operationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::getGroupApplicationListAsApplicant(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
get_group_application_list_as_applicant(NewBaseCallBack(result), operationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::acceptGroupApplication(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto userID = zego_value_get_string(arguments->at(flutter::EncodableValue("userID")));
auto handleMsg = zego_value_get_string(arguments->at(flutter::EncodableValue("handleMsg")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
char* userID_cs = const_cast<char*>(userID.c_str());
char* handleMsg_cs = const_cast<char*>(handleMsg.c_str());
accept_group_application(NewBaseCallBack(result), operationID_cs, groupID_cs, userID_cs, handleMsg_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::refuseGroupApplication(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto userID = zego_value_get_string(arguments->at(flutter::EncodableValue("userID")));
auto handleMsg = zego_value_get_string(arguments->at(flutter::EncodableValue("handleMsg")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
char* userID_cs = const_cast<char*>(userID.c_str());
char* handleMsg_cs = const_cast<char*>(handleMsg.c_str());
refuse_group_application(NewBaseCallBack(result), operationID_cs, groupID_cs, userID_cs, handleMsg_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::dismissGroup(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
dismiss_group(NewBaseCallBack(result), operationID_cs, groupID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::changeGroupMute(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto mute = zego_value_get_bool(arguments->at(flutter::EncodableValue("mute")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
change_group_mute(NewBaseCallBack(result), operationID_cs, groupID_cs, mute);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::changeGroupMemberMute(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto userID = zego_value_get_string(arguments->at(flutter::EncodableValue("userID")));
auto seconds = zego_value_get_int(arguments->at(flutter::EncodableValue("seconds")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
char* userID_cs = const_cast<char*>(userID.c_str());
change_group_member_mute(NewBaseCallBack(result), operationID_cs, groupID_cs, userID_cs, seconds);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::searchGroups(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto searchParam = zego_value_get_string(arguments->at(flutter::EncodableValue("searchParam")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* searchParam_cs = const_cast<char*>(searchParam.c_str());
search_groups(NewBaseCallBack(result), operationID_cs, searchParam_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::getGroupMemberListByJoinTimeFilter(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto offset = zego_value_get_int(arguments->at(flutter::EncodableValue("offset")));
auto count = zego_value_get_int(arguments->at(flutter::EncodableValue("count")));
auto joinTimeBegin = zego_value_get_int(arguments->at(flutter::EncodableValue("joinTimeBegin")));
auto joinTimeEnd = zego_value_get_int(arguments->at(flutter::EncodableValue("joinTimeEnd")));
auto excludeUserIDList = zego_value_get_string(arguments->at(flutter::EncodableValue("excludeUserIDList")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
char* excludeUserIDList_cs = const_cast<char*>(excludeUserIDList.c_str());
get_group_member_list_by_join_time_filter(NewBaseCallBack(result), operationID_cs, groupID_cs, offset, count, joinTimeBegin, joinTimeEnd, excludeUserIDList_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::getGroupMemberOwnerAndAdmin(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
get_group_member_owner_and_admin(NewBaseCallBack(result), operationID_cs, groupID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::searchGroupMembers(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto searchParam = zego_value_get_string(arguments->at(flutter::EncodableValue("searchParam")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* searchParam_cs = const_cast<char*>(searchParam.c_str());
search_group_members(NewBaseCallBack(result), operationID_cs, searchParam_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::setGroupMemberInfo(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto info = zego_value_get_string(arguments->at(flutter::EncodableValue("info")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* info_cs = const_cast<char*>(info.c_str());
set_group_member_info(NewBaseCallBack(result), operationID_cs, info_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::isJoinGroup(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
is_join_group(NewBaseCallBack(result), operationID_cs, groupID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void GroupManagerService::getUsersInGroup(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto userIDs = zego_value_get_string(arguments->at(flutter::EncodableValue("userIDs")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
char* userIDs_cs = const_cast<char*>(userIDs.c_str());
get_users_in_group(NewBaseCallBack(result), operationID_cs, groupID_cs, userIDs_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}

@ -0,0 +1,107 @@
#ifndef GROUP_MANAGER_SERVICE_H
#define GROUP_MANAGER_SERVICE_H
#include "../FLTService.h"
#include "Listen.h"
#include <flutter/standard_method_codec.h>
#include <memory>
#include <string>
class GroupManagerService : public FLTService
{
public:
GroupManagerService();
void onMethodCalled(
const std::string &method,
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
// Method handlers
void setGroupListener(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void inviteUserToGroup(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void kickGroupMember(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getGroupMembersInfo(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getGroupMemberList(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getJoinedGroupList(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getJoinedGroupListPage(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createGroup(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void setGroupInfo(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getGroupsInfo(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void joinGroup(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void quitGroup(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void transferGroupOwner(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getGroupApplicationListAsRecipient(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getGroupApplicationListAsApplicant(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void acceptGroupApplication(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void refuseGroupApplication(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void dismissGroup(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void changeGroupMute(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void changeGroupMemberMute(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void searchGroups(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getGroupMemberListByJoinTimeFilter(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getGroupMemberOwnerAndAdmin(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void searchGroupMembers(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void setGroupMemberInfo(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void isJoinGroup(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getUsersInGroup(
const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
private:
std::string m_serviceName;
};
#endif // GROUP_MANAGER_SERVICE_H

@ -12,90 +12,14 @@
#include <libopenimsdk.h> #include <libopenimsdk.h>
#include "../ZegoDataUtils.h" #include "../ZegoDataUtils.h"
#include "ConstDefine.h" #include "ConstDefine.h"
#include "Listen.h"
IMManagerService::IMManagerService() { IMManagerService::IMManagerService() {
m_serviceName = "imManager"; m_serviceName = "imManager";
_im_manager_listener.onInitSdk = [](int state, char *msg) {
// friend added, handle friendInfo
flutter::EncodableMap arguments;
switch (ConstDefine(state)) {
case ConstDefine::CONNECTING:
arguments.insert(std::make_pair("type", "onConnecting"));
arguments.insert(std::make_pair("data", *msg));
break;
case ConstDefine::CONNECT_SUCCESS:
arguments.insert(std::make_pair("type", "onConnectSuccess"));
arguments.insert(std::make_pair("data", *msg));
break;
case ConstDefine::CONNECT_FAILED:
arguments.insert(std::make_pair("type", "onConnectFailed"));
arguments.insert(std::make_pair("data", *msg));
break;
case ConstDefine::KICKED_OFFLINE:
arguments.insert(std::make_pair("type", "onKickedOffline"));
arguments.insert(std::make_pair("data", *msg));
break;
case ConstDefine::USER_TOKEN_EXPIRED:
arguments.insert(std::make_pair("type", "onUserTokenExpired"));
arguments.insert(std::make_pair("data", *msg));
break;
case ConstDefine::USER_TOKEN_INVALID:
arguments.insert(std::make_pair("type", "onUserTokenExpired"));
arguments.insert(std::make_pair("data", *msg));
break;
}
notifyEvent("connectListener", arguments);
};
_im_manager_listener.baseCallBack = [](char *opid, int errCode, char *errMsg, char *msg) {
CallBaseCallBack(msg, errCode, errMsg, msg);
};
_im_manager_listener.uploadCallback = [](int state, char *msg) {
// upload progress
flutter::EncodableMap arguments;
switch (ConstDefine(state)) {
case ConstDefine::OPEN:
arguments.insert(std::make_pair("type", "onConnecting"));
arguments.insert(std::make_pair("data", *msg));
break;
case ConstDefine::PART_SIZE:
arguments.insert(std::make_pair("type", "onConnectSuccess"));
arguments.insert(std::make_pair("data", *msg));
break;
case ConstDefine::HASH_PART_PROGRESS:
arguments.insert(std::make_pair("type", "onConnectFailed"));
arguments.insert(std::make_pair("data", *msg));
break;
case ConstDefine::HASH_PART_COMPLETE:
arguments.insert(std::make_pair("type", "onKickedOffline"));
arguments.insert(std::make_pair("data", *msg));
break;
case ConstDefine::UPLOAD_ID:
arguments.insert(std::make_pair("type", "onUserTokenExpired"));
arguments.insert(std::make_pair("data", *msg));
break;
case ConstDefine::UPLOAD_PART_COMPLETE:
arguments.insert(std::make_pair("type", "onUserTokenExpired"));
arguments.insert(std::make_pair("data", *msg));
break;
case ConstDefine::UPLOAD_COMPLETE:
arguments.insert(std::make_pair("type", "onUserTokenExpired"));
arguments.insert(std::make_pair("data", *msg));
break;
case ConstDefine::COMPLETE:
arguments.insert(std::make_pair("type", "onUserTokenExpired"));
arguments.insert(std::make_pair("data", *msg));
break;
}
notifyEvent("uploadFileListener", arguments);
};
} }
void IMManagerService::onMethodCalled( void IMManagerService::onMethodCalled(
const std::string &method, const flutter::EncodableMap *arguments, const std::string &method, const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) { std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
@ -138,7 +62,7 @@ void IMManagerService::initializeSDK(
char *config_cs = const_cast<char *>(config.c_str()); char *config_cs = const_cast<char *>(config.c_str());
auto error = init_sdk(_im_manager_listener.onInitSdk, auto error = init_sdk(NewInitListenCallBack(),
operationID_cs, operationID_cs,
config_cs); config_cs);
if (error == 0) { if (error == 0) {
@ -181,9 +105,7 @@ void IMManagerService::login(
char *userID_cs = const_cast<char *>(userID.c_str()); char *userID_cs = const_cast<char *>(userID.c_str());
char *token_cs = const_cast<char *>(token.c_str()); char *token_cs = const_cast<char *>(token.c_str());
NewBaseCallBack(operationID, result); ::login(NewBaseCallBack(result), operationID_cs, userID_cs, token_cs);
::login(_im_manager_listener.baseCallBack, operationID_cs, userID_cs, token_cs);
} else { } else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
@ -197,8 +119,8 @@ void IMManagerService::logout(
auto operationID = zego_value_get_string( auto operationID = zego_value_get_string(
arguments->at(flutter::EncodableValue("operationID"))); arguments->at(flutter::EncodableValue("operationID")));
char *operationID_cs = const_cast<char *>(operationID.c_str()); char *operationID_cs = const_cast<char *>(operationID.c_str());
NewBaseCallBack(operationID, result);
::logout(_im_manager_listener.baseCallBack, operationID_cs); ::logout(NewBaseCallBack(result), operationID_cs);
} else { } else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
@ -225,67 +147,61 @@ void IMManagerService::getLoginStatus(
void IMManagerService::uploadFile( void IMManagerService::uploadFile(
const flutter::EncodableMap *arguments, const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) { std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
// if (arguments) { if (arguments) {
// auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
// auto id = zego_value_get_string(arguments->at(flutter::EncodableValue("id"))); auto id = zego_value_get_string(arguments->at(flutter::EncodableValue("id")));
// auto fileInfo = map_2_json(*arguments); auto fileInfo = map_2_json(*arguments);
// char* operationID_cs = const_cast<char*>(operationID.c_str()); char* operationID_cs = const_cast<char*>(operationID.c_str());
// char* fileInfo_cs = const_cast<char*>(fileInfo.c_str()); char* fileInfo_cs = const_cast<char*>(fileInfo.c_str());
// uploadFileResult = result;
// upload_file(_im_manager_listener.onUploadFile, operationID_cs, fileInfo_cs, _im_manager_listener.uploadCallback); upload_file(NewBaseCallBack(result), operationID_cs, fileInfo_cs, NewUploadFileListenCallBack(id));
// } }
// else { else {
// result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
// } }
} }
void IMManagerService::uploadLogs( void IMManagerService::uploadLogs(
const flutter::EncodableMap *arguments, const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) { std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
// if (arguments) { if (arguments) {
// auto operationID = zego_value_get_string( auto operationID = zego_value_get_string(
// arguments->at(flutter::EncodableValue("operationID"))); arguments->at(flutter::EncodableValue("operationID")));
// auto line = zego_value_get_int(arguments->at(flutter::EncodableValue("line"))); auto line = zego_value_get_int(arguments->at(flutter::EncodableValue("line")));
// auto ex = zego_value_get_string(arguments->at(flutter::EncodableValue("ex"))); auto ex = zego_value_get_string(arguments->at(flutter::EncodableValue("ex")));
// char *operationID_cs = const_cast<char *>(operationID.c_str()); char *operationID_cs = const_cast<char *>(operationID.c_str());
// char *ex_cs = const_cast<char *>(ex.c_str()); char *ex_cs = const_cast<char *>(ex.c_str());
//
// upload_logs(_im_manager_listener.onUploadLogs, operationID_cs, line, ex_cs); ::upload_logs(NewBaseCallBack(result), operationID_cs, line, ex_cs, NewUploadLogsListenCallBack());
//
// } else { } else {
// result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
// } }
} }
void IMManagerService::logs( void IMManagerService::logs(
const flutter::EncodableMap *arguments, const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) { std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
// if (arguments) { if (arguments) {
// auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
// auto logLevel = zego_value_get_int(arguments->at(flutter::EncodableValue("logLevel"))); auto logLevel = zego_value_get_int(arguments->at(flutter::EncodableValue("logLevel")));
// auto file = zego_value_get_string(arguments->at(flutter::EncodableValue("file"))); auto file = zego_value_get_string(arguments->at(flutter::EncodableValue("file")));
// auto line = zego_value_get_int(arguments->at(flutter::EncodableValue("line"))); auto line = zego_value_get_int(arguments->at(flutter::EncodableValue("line")));
// auto msgs = zego_value_get_string(arguments->at(flutter::EncodableValue("msgs"))); auto msgs = zego_value_get_string(arguments->at(flutter::EncodableValue("msgs")));
// auto err = zego_value_get_string(arguments->at(flutter::EncodableValue("err"))); auto err = zego_value_get_string(arguments->at(flutter::EncodableValue("err")));
// auto keyAndValue = zego_value_get_string(arguments->at(flutter::EncodableValue("keyAndValue"))); auto keyAndValue = zego_value_get_string(arguments->at(flutter::EncodableValue("keyAndValue")));
// char* operationID_cs = const_cast<char*>(operationID.c_str()); char* operationID_cs = const_cast<char*>(operationID.c_str());
// char* file_cs = const_cast<char*>(file.c_str()); char* file_cs = const_cast<char*>(file.c_str());
// char* msgs_cs = const_cast<char*>(msgs.c_str()); char* msgs_cs = const_cast<char*>(msgs.c_str());
// char* err_cs = const_cast<char*>(err.c_str()); char* err_cs = const_cast<char*>(err.c_str());
// char* keyAndValue_cs = const_cast<char*>(keyAndValue.c_str()); char* keyAndValue_cs = const_cast<char*>(keyAndValue.c_str());
//
// auto error = logs(_im_manager_listener.onLogs, operationID_cs, logLevel, file_cs, line, msgs_cs, err_cs, keyAndValue_cs); ::logs(NewBaseCallBack(result), operationID_cs, logLevel, file_cs, line, msgs_cs, err_cs, keyAndValue_cs);
// if (error != 0) {
// std::string msg = "Logging failed"; }
// result->Error("", "", NimResult::getErrorResult(error, msg)); else {
// } result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
// else { }
// result->Success(NimResult::getSuccessResult());
// }
// }
// else {
// result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
// }
} }
void IMManagerService::updateFcmToken( void IMManagerService::updateFcmToken(
@ -298,8 +214,8 @@ void IMManagerService::updateFcmToken(
auto expireTime = zego_value_get_int(arguments->at(flutter::EncodableValue("expireTime"))); auto expireTime = zego_value_get_int(arguments->at(flutter::EncodableValue("expireTime")));
char *operationID_cs = const_cast<char *>(operationID.c_str()); char *operationID_cs = const_cast<char *>(operationID.c_str());
char *fcmToken_cs = const_cast<char *>(fcmToken.c_str()); char *fcmToken_cs = const_cast<char *>(fcmToken.c_str());
NewBaseCallBack(operationID, result);
update_fcm_token(_im_manager_listener.baseCallBack, operationID_cs, fcmToken_cs, ::update_fcm_token(NewBaseCallBack(result), operationID_cs, fcmToken_cs,
expireTime); expireTime);
} else { } else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
@ -309,31 +225,31 @@ void IMManagerService::updateFcmToken(
void IMManagerService::setAppBackgroundStatus( void IMManagerService::setAppBackgroundStatus(
const flutter::EncodableMap *arguments, const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) { std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) { if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); auto operationID = zego_value_get_string(
auto isBackground = zego_value_get_bool(arguments->at(flutter::EncodableValue("isBackground"))); arguments->at(flutter::EncodableValue("operationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str()); auto isBackground = zego_value_get_bool(
NewBaseCallBack(operationID, result); arguments->at(flutter::EncodableValue("isBackground")));
set_app_background_status(_im_manager_listener.baseCallBack, operationID_cs, isBackground); char *operationID_cs = const_cast<char *>(operationID.c_str());
} set_app_background_status(NewBaseCallBack(result), operationID_cs, isBackground);
else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); } else {
} result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
} }
void IMManagerService::networkStatusChanged( void IMManagerService::networkStatusChanged(
const flutter::EncodableMap *arguments, const flutter::EncodableMap *arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) { std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) { if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); auto operationID = zego_value_get_string(
char* operationID_cs = const_cast<char*>(operationID.c_str()); arguments->at(flutter::EncodableValue("operationID")));
NewBaseCallBack(operationID, result); char *operationID_cs = const_cast<char *>(operationID.c_str());
network_status_changed(_im_manager_listener.baseCallBack, operationID_cs); network_status_changed(NewBaseCallBack(result), operationID_cs);
} } else {
else { result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); }
}
} }

@ -8,11 +8,7 @@
#include "../FLTService.h" #include "../FLTService.h"
#include "Listen.h" #include "Listen.h"
struct IMManagerServiceListener {
CB_I_S onInitSdk;
CB_S_I_S_S baseCallBack;
CB_I_S uploadCallback;
};
class IMManagerService : public FLTService { class IMManagerService : public FLTService {
public: public:
@ -67,7 +63,6 @@ class IMManagerService : public FLTService {
const flutter::EncodableMap* arguments, const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result); std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
IMManagerServiceListener _im_manager_listener;
}; };

@ -1,20 +1,621 @@
#include "Listen.h" #include "Listen.h"
#include <unordered_map>
std::unordered_map <std::string, std::unique_ptr<BaseCallBack>> g_baseCallBackMap; #include "wrapp_cpp_function.inc"
std::mutex g_baseCallBackMapMutex; #include "ConstDefine.h"
#include "../FLTService.h"
#include "../ThreadUtil.h"
#include "../json.hpp"
using json = nlohmann::json;
void NewBaseCallBack(std::string opid, CB_S_I_S_S NewBaseCallBack(std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result)
std::shared_ptr <flutter::MethodResult<flutter::EncodableValue>> result) { {
std::lock_guard <std::mutex> lock(g_baseCallBackMapMutex);
g_baseCallBackMap[opid] = std::make_unique<BaseCallBack>(result); auto t = std::make_shared<BaseCallBack>(result);
auto f = [t](const std::string &operationID, int errCode, const std::string &errMsg, const std::string &data)
{
t->HandleCallback(operationID, errCode, errMsg, data);
};
return _wrapper_callonce_cpp_function(f);
}
///////////////////////////////////////////////////////////////////////////////////////////////
void InitListenCallBack::HandleCallback(int state, const std::string &msg)
{
flutter::EncodableMap arguments;
switch (ConstDefine(state))
{
case ConstDefine::CONNECTING:
arguments.insert(std::make_pair("type", "onConnecting"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::CONNECT_SUCCESS:
arguments.insert(std::make_pair("type", "onConnectSuccess"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::CONNECT_FAILED:
arguments.insert(std::make_pair("type", "onConnectFailed"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::KICKED_OFFLINE:
arguments.insert(std::make_pair("type", "onKickedOffline"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::USER_TOKEN_EXPIRED:
arguments.insert(std::make_pair("type", "onUserTokenExpired"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::USER_TOKEN_INVALID:
arguments.insert(std::make_pair("type", "onUserTokenExpired"));
arguments.insert(std::make_pair("data", msg));
break;
}
notifyEvent("connectListener", arguments);
}
CB_I_S NewInitListenCallBack()
{
auto t = std::make_shared<InitListenCallBack>();
auto f = [t](int state, const std::string &msg)
{
t->HandleCallback(state, msg);
};
return _wrapper_cpp_function(f);
}
///////////////////////////////////////////////////////////////////////////////////////////////
void UploadFileListenCallBack::HandleCallback(int state, const std::string &msg)
{
flutter::EncodableMap arguments;
flutter::EncodableMap data;
json j;
switch (ConstDefine(state))
{
case ConstDefine::OPEN:
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("size", std::stoi(msg)));
arguments.insert(std::make_pair("type", "open"));
arguments.insert(std::make_pair("data", data));
break;
case ConstDefine::PART_SIZE:
// 需要使用json反序列化对象msg,使用临时结构
j = json::parse(msg);
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("partSize", j.at("partSize").get<int>()));
data.insert(std::make_pair("num", j.at("num").get<int>()));
arguments.insert(std::make_pair("type", "partSize"));
arguments.insert(std::make_pair("data", data));
break;
case ConstDefine::HASH_PART_PROGRESS:
j = json::parse(msg);
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("index", j.at("index").get<int>()));
data.insert(std::make_pair("size", j.at("size").get<int>()));
data.insert(std::make_pair("partHash", j.at("partHash").get<std::string>()));
arguments.insert(std::make_pair("type", "hashPartProgress"));
arguments.insert(std::make_pair("data", data));
break;
case ConstDefine::HASH_PART_COMPLETE:
j = json::parse(msg);
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("partHash", j.at("partHash").get<std::string>()));
data.insert(std::make_pair("fileHash", j.at("fileHash").get<std::string>()));
arguments.insert(std::make_pair("type", "hashPartComplete"));
arguments.insert(std::make_pair("data", data));
break;
case ConstDefine::UPLOAD_ID:
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("uploadID", msg));
arguments.insert(std::make_pair("type", "uploadID"));
arguments.insert(std::make_pair("data", data));
break;
case ConstDefine::UPLOAD_PART_COMPLETE:
j = json::parse(msg);
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("index", j.at("index").get<int>()));
data.insert(std::make_pair("partSize", j.at("partSize").get<int>()));
data.insert(std::make_pair("partHash", j.at("partHash").get<std::string>()));
arguments.insert(std::make_pair("type", "uploadPartComplete"));
arguments.insert(std::make_pair("data", data));
break;
case ConstDefine::UPLOAD_COMPLETE:
j = json::parse(msg);
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("fileSize", j.at("fileSize").get<int>()));
data.insert(std::make_pair("streamSize", j.at("streamSize").get<int>()));
data.insert(std::make_pair("storageSize", j.at("storageSize").get<int>()));
arguments.insert(std::make_pair("type", "uploadProgress"));
arguments.insert(std::make_pair("data", data));
break;
case ConstDefine::COMPLETE:
j = json::parse(msg);
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("size", j.at("fileSize").get<int>()));
data.insert(std::make_pair("url", j.at("url").get<std::string>()));
data.insert(std::make_pair("type", j.at("fileSize").get<int>()));
arguments.insert(std::make_pair("type", "complete"));
arguments.insert(std::make_pair("data", data));
break;
}
notifyEvent("uploadFileListener", arguments);
}
CB_I_S NewUploadFileListenCallBack(std::string id)
{
auto t = std::make_shared<UploadFileListenCallBack>(id);
auto f = [t](int state, const std::string &msg)
{
t->HandleCallback(state, msg);
};
return _wrapper_cpp_function(f);
}
///////////////////////////////////////////////////////////////////////////////////////////////
void UploadLogsListenCallBack::HandleCallback(int state, const std::string &msg)
{
flutter::EncodableMap arguments;
flutter::EncodableMap data;
json j;
switch (ConstDefine(state))
{
case ConstDefine::ON_PROGRESS:
j = json::parse(msg);
data.insert(std::make_pair("current", j.at("current").get<int>()));
data.insert(std::make_pair("size", j.at("size").get<int>()));
arguments.insert(std::make_pair("type", "onProgress"));
arguments.insert(std::make_pair("data", data));
break;
}
notifyEvent("uploadLogsListener", arguments);
}
CB_I_S NewUploadLogsListenCallBack()
{
auto t = std::make_shared<UploadLogsListenCallBack>();
auto f = [t](int state, const std::string &msg)
{
t->HandleCallback(state, msg);
};
return _wrapper_cpp_function(f);
} }
///////////////////////////////////////////////////////////////////////////////////////////////
void UserListenCallBack::HandleCallback(int state, const std::string &msg)
{
flutter::EncodableMap arguments;
flutter::EncodableMap data;
json j;
switch (ConstDefine(state))
{
case ConstDefine::SELF_INFO_UPDATED:
void CallBaseCallBack(char *opid, int errCode, char *errMsg, char *msg) { arguments.insert(std::make_pair("type", "onSelfInfoUpdated"));
std::lock_guard <std::mutex> lock(g_baseCallBackMapMutex); arguments.insert(std::make_pair("data", msg));
auto it = g_baseCallBackMap.find(std::string(opid)); break;
if (it != g_baseCallBackMap.end()) { case ConstDefine::USER_STATUS_CHANGED:
auto ctx = std::move(it->second); //unique_ptr arguments.insert(std::make_pair("type", "onUserStatusChanged"));
ctx->HandleCallback(opid, errCode, errMsg, msg); arguments.insert(std::make_pair("data", msg));
break;
} }
} notifyEvent("userListener", arguments);
}
CB_I_S NewUserListenCallBack()
{
auto t = std::make_shared<UserListenCallBack>();
auto f = [t](int state, const std::string &msg)
{
t->HandleCallback(state, msg);
};
return _wrapper_cpp_function(f);
}
///////////////////////////////////////////////////////////////////////////////////////////////
void AdvancedMsgListenCallBack::HandleCallback(int state, const std::string &msg)
{
flutter::EncodableMap arguments;
flutter::EncodableMap data;
json j;
switch (ConstDefine(state))
{
case ConstDefine::MSG_DELETED:
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("message", msg));
arguments.insert(std::make_pair("type", "onMsgDeleted"));
arguments.insert(std::make_pair("data", data));
break;
case ConstDefine::NEW_RECV_MESSAGE_REVOKED:
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("messageRevoked", msg));
arguments.insert(std::make_pair("type", "onNewRecvMessageRevoked"));
arguments.insert(std::make_pair("data", data));
break;
case ConstDefine::NEW_RECV_MESSAGE_EDIT:
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("messageEdited", msg));
arguments.insert(std::make_pair("type", "onNewRecvMessageEdited"));
arguments.insert(std::make_pair("data", data));
break;
case ConstDefine::RECV_C2C_READ_RECEIPT:
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("msgReceiptList", msg));
arguments.insert(std::make_pair("type", "onRecvC2CReadReceipt"));
arguments.insert(std::make_pair("data", data));
break;
case ConstDefine::RECV_NEW_MESSAGE:
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("message", msg));
arguments.insert(std::make_pair("type", "onRecvNewMessage"));
arguments.insert(std::make_pair("data", data));
break;
case ConstDefine::RECV_OFFLINE_NEW_MESSAGE:
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("message", msg));
arguments.insert(std::make_pair("type", "onRecvOfflineNewMessage"));
arguments.insert(std::make_pair("data", data));
break;
case ConstDefine::RECV_ONLINE_ONLY_MESSAGE:
data.insert(std::make_pair("id", id));
data.insert(std::make_pair("message", msg));
arguments.insert(std::make_pair("type", "onRecvOnlineOnlyMessage"));
arguments.insert(std::make_pair("data", data));
break;
}
notifyEvent("advancedMsgListener", arguments);
}
CB_I_S NewAdvancedMsgListenCallBack(std::string id)
{
auto t = std::make_shared<AdvancedMsgListenCallBack>(id);
auto f = [t](int state, const std::string &msg)
{
t->HandleCallback(state, msg);
};
return _wrapper_cpp_function(f);
}
///////////////////////////////////////////////////////////////////////////////////////////////
void MsgSendListenerCallBack::HandleCallback(const std::string &operationID, int state, const std::string &error, const std::string &msg, long progress)
{
if (result == nullptr)
{
return;
}
if (state == 0 && progress == 0 && msg.empty())
{
flutter::EncodableMap arguments;
flutter::EncodableMap data;
json j;
data.insert(std::make_pair("clientMsgID", clientMsgID));
data.insert(std::make_pair("progress", progress));
arguments.insert(std::make_pair("type", "onProgress"));
arguments.insert(std::make_pair("data", data));
notifyEvent("msgSendProgressListener", arguments);
}
else
{
// Create shared pointers for the data to ensure copy constructibility
auto resultCopy = result;
auto dataCopy = std::make_shared<std::string>(msg);
auto errCodeCopy = state;
auto errMsgCopy = std::make_shared<std::string>(error);
// Ensure callback runs on the platform thread
ThreadUtil::RunOnPlatformThread([resultCopy, errCodeCopy, errMsgCopy, dataCopy]()
{
if (errCodeCopy == 0) {
resultCopy->Success(flutter::EncodableValue(*dataCopy));
} else {
resultCopy->Error(std::to_string(errCodeCopy), *errMsgCopy,
flutter::EncodableValue(*dataCopy));
} });
}
}
CB_S_I_S_S_I NewMsgSendCallBack(std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result, std::string clientMsgID)
{
auto t = std::make_shared<MsgSendListenerCallBack>(result, clientMsgID);
auto f = [t](const std::string &operationID, int state, const std::string &error, const std::string &msg, long progress)
{
t->HandleCallback(operationID, state, error, msg, progress);
};
return _wrapper_callonce_cpp_function(f);
}
///////////////////////////////////////////////////////////////////////////////////////////////
void CustomBusinessListenCallBack::HandleCallback(int state, const std::string &msg)
{
flutter::EncodableMap arguments;
flutter::EncodableMap data;
json j;
switch (ConstDefine(state))
{
case ConstDefine::RECV_CUSTOM_BUSINESS_MESSAGE:
arguments.insert(std::make_pair("type", "onRecvCustomBusinessMessage"));
arguments.insert(std::make_pair("data", msg));
break;
}
notifyEvent("customBusinessListener", arguments);
}
CB_I_S NewCustomBusinessListenCallBack()
{
auto t = std::make_shared<CustomBusinessListenCallBack>();
auto f = [t](int state, const std::string &msg)
{
t->HandleCallback(state, msg);
};
return _wrapper_callonce_cpp_function(f);
}
///////////////////////////////////////////////////////////////////////////////////////////////
void GroupListenerCallBack::HandleCallback(int state, const std::string &msg)
{
flutter::EncodableMap arguments;
flutter::EncodableMap data;
switch (ConstDefine(state))
{
case ConstDefine::GROUP_APPLICATION_ACCEPTED:
arguments.insert(std::make_pair("type", "onGroupApplicationAccepted"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::GROUP_APPLICATION_ADDED:
arguments.insert(std::make_pair("type", "onGroupApplicationAdded"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::GROUP_APPLICATION_DELETED:
arguments.insert(std::make_pair("type", "onGroupApplicationDeleted"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::GROUP_APPLICATION_REJECTED:
arguments.insert(std::make_pair("type", "onGroupApplicationRejected"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::GROUP_DISMISSED:
arguments.insert(std::make_pair("type", "onGroupDismissed"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::GROUP_INFO_CHANGED:
arguments.insert(std::make_pair("type", "onGroupInfoChanged"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::GROUP_MEMBER_ADDED:
arguments.insert(std::make_pair("type", "onGroupMemberAdded"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::GROUP_MEMBER_DELETED:
arguments.insert(std::make_pair("type", "onGroupMemberDeleted"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::GROUP_MEMBER_INFO_CHANGED:
arguments.insert(std::make_pair("type", "onGroupMemberInfoChanged"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::JOINED_GROUP_ADDED:
arguments.insert(std::make_pair("type", "onJoinedGroupAdded"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::JOINED_GROUP_DELETED:
arguments.insert(std::make_pair("type", "onJoinedGroupDeleted"));
arguments.insert(std::make_pair("data", msg));
break;
}
notifyEvent("groupListener", arguments);
}
CB_I_S NewGroupListenerCallBack()
{
auto t = std::make_shared<GroupListenerCallBack>();
auto f = [t](int state, const std::string &msg)
{
t->HandleCallback(state, msg);
};
return _wrapper_cpp_function(f);
}
///////////////////////////////////////////////////////////////////////////////////////////////
void ConversationListenerCallBack::HandleCallback(int state, const std::string &msg)
{
flutter::EncodableMap arguments;
flutter::EncodableMap data;
json j;
switch (ConstDefine(state))
{
case ConstDefine::CONVERSATION_CHANGED:
arguments.insert(std::make_pair("type", "onConversationChanged"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::CONVERSATION_USER_INPUT_STATUS_CHANGED:
arguments.insert(std::make_pair("type", "onConversationUserInputStatusChanged"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::NEW_CONVERSATION:
arguments.insert(std::make_pair("type", "onNewConversation"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::SYNC_SERVER_FAILED:
j = json::parse(msg);
arguments.insert(std::make_pair("type", "onSyncServerFailed"));
arguments.insert(std::make_pair("data", j.at("reinstalled").get<bool>()));
break;
case ConstDefine::SYNC_SERVER_FINISH:
j = json::parse(msg);
arguments.insert(std::make_pair("type", "onSyncServerFinish"));
arguments.insert(std::make_pair("data", j.at("reinstalled").get<bool>()));
break;
case ConstDefine::SYNC_SERVER_START:
j = json::parse(msg);
arguments.insert(std::make_pair("type", "onSyncServerStart"));
arguments.insert(std::make_pair("data", j.at("reinstalled").get<bool>()));
break;
case ConstDefine::SYNC_SERVER_PROGRESS:
j = json::parse(msg);
arguments.insert(std::make_pair("type", "onSyncServerProgress"));
arguments.insert(std::make_pair("data", j.at("progress").get<int>()));
break;
case ConstDefine::TOTAL_UNREAD_MESSAGE_COUNT_CHANGED:
j = json::parse(msg);
arguments.insert(std::make_pair("type", "onTotalUnreadMessageCountChanged"));
arguments.insert(std::make_pair("data", j.at("count").get<int>()));
break;
}
notifyEvent("conversationListener", arguments);
}
CB_I_S NewConversationListenerCallBack()
{
auto t = std::make_shared<ConversationListenerCallBack>();
auto f = [t](int state, const std::string &msg)
{
t->HandleCallback(state, msg);
};
return _wrapper_cpp_function(f);
}
///////////////////////////////////////////////////////////////////////////////////////////////
void FriendshipListenCallBack::HandleCallback(int state, const std::string &msg)
{
flutter::EncodableMap arguments;
flutter::EncodableMap data;
switch (ConstDefine(state))
{
case ConstDefine::BLACK_ADDED:
arguments.insert(std::make_pair("type", "onBlackAdded"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::BLACK_DELETED:
arguments.insert(std::make_pair("type", "onBlackDeleted"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::FRIEND_ADDED:
arguments.insert(std::make_pair("type", "onFriendAdded"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::FRIEND_APPLICATION_ACCEPTED:
arguments.insert(std::make_pair("type", "onFriendApplicationAccepted"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::FRIEND_APPLICATION_ADDED:
arguments.insert(std::make_pair("type", "onFriendApplicationAdded"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::FRIEND_APPLICATION_DELETED:
arguments.insert(std::make_pair("type", "onFriendApplicationDeleted"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::FRIEND_APPLICATION_REJECTED:
arguments.insert(std::make_pair("type", "onFriendApplicationRejected"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::FRIEND_DELETED:
arguments.insert(std::make_pair("type", "onFriendDeleted"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::FRIEND_INFO_CHANGED:
arguments.insert(std::make_pair("type", "onFriendInfoChanged"));
arguments.insert(std::make_pair("data", msg));
break;
}
notifyEvent("friendListener", arguments);
}
CB_I_S NewFriendshipListenCallBack()
{
auto t = std::make_shared<FriendshipListenCallBack>();
auto f = [t](int state, const std::string &msg)
{
t->HandleCallback(state, msg);
};
return _wrapper_cpp_function(f);
}
///////////////////////////////////////////////////////////////////////////////////////////////
void ChannelListenCallBack::HandleCallback(int state, const std::string &msg)
{
flutter::EncodableMap arguments;
flutter::EncodableMap data;
switch (ConstDefine(state))
{
case ConstDefine::CHANNEL_DISMISSED:
arguments.insert(std::make_pair("type", "onChannelDismissed"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::CHANNEL_INFO_CHANGED:
arguments.insert(std::make_pair("type", "onChannelInfoChanged"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::CHANNEL_MEMBER_ADDED:
arguments.insert(std::make_pair("type", "onChannelMemberAdded"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::CHANNEL_MEMBER_DELETED:
arguments.insert(std::make_pair("type", "onChannelMemberDeleted"));
arguments.insert(std::make_pair("data", msg));
break;
case ConstDefine::CHANNEL_MEMBER_INFO_CHANGED:
arguments.insert(std::make_pair("type", "onChannelMemberInfoChanged"));
arguments.insert(std::make_pair("data", msg));
break;
}
notifyEvent("channelListener", arguments);
}
CB_I_S NewChannelListenCallBack()
{
auto t = std::make_shared<ChannelListenCallBack>();
auto f = [t](int state, const std::string &msg)
{
t->HandleCallback(state, msg);
};
return _wrapper_cpp_function(f);
}

@ -1,58 +1,203 @@
#ifndef LISTEN_H #ifndef LISTEN_H
#define LISTEN_H #define LISTEN_H
#include <libopenimsdk.h>
#include "flutter/encodable_value.h" #include "flutter/encodable_value.h"
#include "flutter/method_result.h" #include "flutter/method_result.h"
#include <libopenimsdk.h>
#include <functional>
#include <string>
#include <memory>
#include <iostream>
#include <bitset>
#include <atomic>
#include <thread>
#include <chrono>
#include <mutex>
#include "../ThreadUtil.h"
class BaseCallBack
{
public:
BaseCallBack(std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result_ptr)
: result(result_ptr)
{
}
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result = nullptr;
void HandleCallback(const std::string &operationID, int errCode, const std::string &errMsg,
const std::string &data)
{
if (result == nullptr)
{
return;
}
// Create shared pointers for the data to ensure copy constructibility
auto resultCopy = result;
auto dataCopy = std::make_shared<std::string>(data);
auto errCodeCopy = errCode;
auto errMsgCopy = std::make_shared<std::string>(errMsg);
// Ensure callback runs on the platform thread
ThreadUtil::RunOnPlatformThread([resultCopy, errCodeCopy, errMsgCopy, dataCopy]()
{
if (errCodeCopy == 0) {
resultCopy->Success(flutter::EncodableValue(*dataCopy));
} else {
resultCopy->Error(std::to_string(errCodeCopy), *errMsgCopy,
flutter::EncodableValue(*dataCopy));
} });
}
};
CB_S_I_S_S NewBaseCallBack(std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
class BaseCallBack { /////////////////////////////////////////////////////////////////////////////////////////////////
class InitListenCallBack
{
public: public:
BaseCallBack(std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) { InitListenCallBack()
this->result = result; {
} }
void HandleCallback(int state, const std::string &msg);
};
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result = nullptr; CB_I_S NewInitListenCallBack();
/////////////////////////////////////////////////////////////////////////////////////////////////
void HandleCallback(char* opid, int errCode, char* errMsg, char* msg) { class UploadFileListenCallBack
if (result == nullptr) { {
return; public:
} UploadFileListenCallBack(std::string id) : id(id)
{
}
std::string id = "";
if (errCode == 0) { void HandleCallback(int state, const std::string &msg);
result->Success(flutter::EncodableValue(std::string(msg)));
}
else {
result->Error(std::to_string(errCode), std::string(errMsg), flutter::EncodableValue(std::string(msg)));
}
}
}; };
// 全局映射表 CB_I_S NewUploadFileListenCallBack(std::string id);
extern std::unordered_map<std::string, std::unique_ptr<BaseCallBack>> g_baseCallBackMap;
extern std::mutex g_baseCallBackMapMutex; /////////////////////////////////////////////////////////////////////////////////////////////////
class UploadLogsListenCallBack
{
public:
UploadLogsListenCallBack()
{
}
void NewBaseCallBack(std::string opid, std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result); void HandleCallback(int state, const std::string &msg);
void CallBaseCallBack(char* opid, int errCode, char* errMsg, char* msg); };
CB_I_S NewUploadLogsListenCallBack();
/////////////////////////////////////////////////////////////////////////////////////////////////
//todo 没想好怎么实现 class UserListenCallBack
class uploadFileCallBack { {
public: public:
uploadFileCallBack(std::string id) { UserListenCallBack()
this->id = id; {
} }
void HandleCallback(int state, const std::string &msg);
};
CB_I_S NewUserListenCallBack();
/////////////////////////////////////////////////////////////////////////////////////////////////
class AdvancedMsgListenCallBack
{
public:
AdvancedMsgListenCallBack(std::string id) : id(id)
{
}
std::string id = ""; std::string id = "";
void HandleCallback(char* opid, int errCode, char* errMsg, char* msg) { void HandleCallback(int state, const std::string &msg);
};
CB_I_S NewAdvancedMsgListenCallBack(std::string id);
/////////////////////////////////////////////////////////////////////////////////////////////////
class MsgSendListenerCallBack
{
public:
MsgSendListenerCallBack(std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result_ptr, std::string clientMsgID) : result(result_ptr), clientMsgID(clientMsgID)
{
}
std::string clientMsgID = "";
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result = nullptr;
void HandleCallback(const std::string &operationID, int state, const std::string &error, const std::string &msg, long progress);
};
CB_S_I_S_S_I NewMsgSendCallBack(std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result, std::string clientMsgID);
/////////////////////////////////////////////////////////////////////////////////////////////////
class CustomBusinessListenCallBack
{
public:
CustomBusinessListenCallBack()
{
}
void HandleCallback(int state, const std::string &msg);
};
CB_I_S NewCustomBusinessListenCallBack();
/////////////////////////////////////////////////////////////////////////////////////////////////
class GroupListenerCallBack
{
public:
GroupListenerCallBack()
{
}
void HandleCallback(int state, const std::string &msg);
};
CB_I_S NewGroupListenerCallBack();
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
class ConversationListenerCallBack
{
public:
ConversationListenerCallBack()
{
} }
void HandleCallback(int state, const std::string &msg);
}; };
CB_I_S NewConversationListenerCallBack();
/////////////////////////////////////////////////////////////////////////////////////////////////
class FriendshipListenCallBack
{
public:
FriendshipListenCallBack()
{
}
void HandleCallback(int state, const std::string &msg);
};
CB_I_S NewFriendshipListenCallBack();
/////////////////////////////////////////////////////////////////////////////////////////////////
class ChannelListenCallBack {
public:
ChannelListenCallBack() {
}
void HandleCallback(int state, const std::string& msg);
};
CB_I_S NewChannelListenCallBack();
#endif #endif

@ -0,0 +1,894 @@
#include "MessageManager.h"
#include <libopenimsdk.h>
#include "../NimResult.h"
#include "../ZegoDataUtils.h"
#include "ConstDefine.h"
#include "Listen.h"
MessageManagerService::MessageManagerService() {
m_serviceName = "messageManager";
}
void MessageManagerService::onMethodCalled(
const std::string& method,
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (method == "setAdvancedMsgListener") {
setAdvancedMsgListener(arguments, result);
} else if (method == "sendMessage") {
sendMessage(arguments, result);
} else if (method == "revokeMessage") {
revokeMessage(arguments, result);
} else if (method == "editMessage") {
editMessage(arguments, result);
} else if (method == "deleteMessageFromLocalStorage") {
deleteMessageFromLocalStorage(arguments, result);
} else if (method == "deleteMessageFromLocalAndSvr") {
deleteMessageFromLocalAndSvr(arguments, result);
} else if (method == "deleteAllMsgFromLocal") {
deleteAllMsgFromLocal(arguments, result);
} else if (method == "deleteAllMsgFromLocalAndSvr") {
deleteAllMsgFromLocalAndSvr(arguments, result);
} else if (method == "insertSingleMessageToLocalStorage") {
insertSingleMessageToLocalStorage(arguments, result);
} else if (method == "insertGroupMessageToLocalStorage") {
insertGroupMessageToLocalStorage(arguments, result);
} else if (method == "markMessagesAsReadByMsgID") {
markMessagesAsReadByMsgID(arguments, result);
} else if (method == "typingStatusUpdate") {
typingStatusUpdate(arguments, result);
} else if (method == "createTextMessage") {
createTextMessage(arguments, result);
} else if (method == "createTextAtMessage") {
createTextAtMessage(arguments, result);
} else if (method == "createImageMessage") {
createImageMessage(arguments, result);
} else if (method == "createImageMessageFromFullPath") {
createImageMessageFromFullPath(arguments, result);
} else if (method == "createSoundMessage") {
createSoundMessage(arguments, result);
} else if (method == "createSoundMessageFromFullPath") {
createSoundMessageFromFullPath(arguments, result);
} else if (method == "createVideoMessage") {
createVideoMessage(arguments, result);
} else if (method == "createVideoMessageFromFullPath") {
createVideoMessageFromFullPath(arguments, result);
} else if (method == "createFileMessage") {
createFileMessage(arguments, result);
} else if (method == "createFileMessageFromFullPath") {
createFileMessageFromFullPath(arguments, result);
} else if (method == "createMergerMessage") {
createMergerMessage(arguments, result);
} else if (method == "createForwardMessage") {
createForwardMessage(arguments, result);
} else if (method == "createLocationMessage") {
createLocationMessage(arguments, result);
} else if (method == "createCustomMessage") {
createCustomMessage(arguments, result);
} else if (method == "createQuoteMessage") {
createQuoteMessage(arguments, result);
} else if (method == "createCardMessage") {
createCardMessage(arguments, result);
} else if (method == "createFaceMessage") {
createFaceMessage(arguments, result);
} else if (method == "createAdvancedTextMessage") {
createAdvancedTextMessage(arguments, result);
} else if (method == "createAdvancedQuoteMessage") {
createAdvancedQuoteMessage(arguments, result);
} else if (method == "searchLocalMessages") {
searchLocalMessages(arguments, result);
} else if (method == "clearConversationAndDeleteAllMsg") {
clearConversationAndDeleteAllMsg(arguments, result);
} else if (method == "getAdvancedHistoryMessageList") {
getAdvancedHistoryMessageList(arguments, result);
} else if (method == "getAdvancedHistoryMessageListReverse") {
getAdvancedHistoryMessageListReverse(arguments, result);
} else if (method == "findMessageList") {
findMessageList(arguments, result);
} else if (method == "setMessageLocalEx") {
setMessageLocalEx(arguments, result);
} else if (method == "setAppBadge") {
setAppBadge(arguments, result);
} else if (method == "sendMessageNotOss") {
sendMessageNotOss(arguments, result);
} else if (method == "createImageMessageByURL") {
createImageMessageByURL(arguments, result);
} else if (method == "createSoundMessageByURL") {
createSoundMessageByURL(arguments, result);
} else if (method == "createVideoMessageByURL") {
createVideoMessageByURL(arguments, result);
} else if (method == "createFileMessageByURL") {
createFileMessageByURL(arguments, result);
} else if (method == "fetchSurroundingMessages") {
fetchSurroundingMessages(arguments, result);
} else if (method == "setCustomBusinessListener") {
setCustomBusinessListener(arguments, result);
} else {
result->NotImplemented();
}
}
void MessageManagerService::setAdvancedMsgListener(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto id = zego_value_get_string(arguments->at(flutter::EncodableValue("id")));
set_advanced_msg_listener(NewAdvancedMsgListenCallBack(id));
result->Success(flutter::EncodableValue());
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::sendMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto message = zego_value_get_string(arguments->at(flutter::EncodableValue("message")));
auto userID = zego_value_get_string(arguments->at(flutter::EncodableValue("userID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto channelID = zego_value_get_string(arguments->at(flutter::EncodableValue("channelID")));
auto offlinePushInfo = zego_value_get_string(arguments->at(flutter::EncodableValue("offlinePushInfo")));
auto isOnlineOnly = zego_value_get_bool(arguments->at(flutter::EncodableValue("isOnlineOnly")));
auto clientMsgID = zego_value_get_string(arguments->at(flutter::EncodableValue("clientMsgID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* message_cs = const_cast<char*>(message.c_str());
char* userID_cs = const_cast<char*>(userID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
char* channelID_cs = const_cast<char*>(channelID.c_str());
char* offlinePushInfo_cs = const_cast<char*>(offlinePushInfo.c_str());
send_message(NewMsgSendCallBack(result,clientMsgID), operationID_cs, message_cs, userID_cs, groupID_cs, channelID_cs, offlinePushInfo_cs, isOnlineOnly);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::revokeMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
auto clientMsgID = zego_value_get_string(arguments->at(flutter::EncodableValue("clientMsgID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
char* clientMsgID_cs = const_cast<char*>(clientMsgID.c_str());
revoke_message(NewBaseCallBack(result), operationID_cs, conversationID_cs, clientMsgID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::editMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
auto clientMsgID = zego_value_get_string(arguments->at(flutter::EncodableValue("clientMsgID")));
auto message = zego_value_get_string(arguments->at(flutter::EncodableValue("message")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
char* clientMsgID_cs = const_cast<char*>(clientMsgID.c_str());
char* message_cs = const_cast<char*>(message.c_str());
edit_message(NewBaseCallBack(result), operationID_cs, conversationID_cs, clientMsgID_cs, message_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::deleteMessageFromLocalStorage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
auto clientMsgID = zego_value_get_string(arguments->at(flutter::EncodableValue("clientMsgID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
char* clientMsgID_cs = const_cast<char*>(clientMsgID.c_str());
delete_message_from_local_storage(NewBaseCallBack(result), operationID_cs, conversationID_cs, clientMsgID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::deleteMessageFromLocalAndSvr(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
auto clientMsgID = zego_value_get_string(arguments->at(flutter::EncodableValue("clientMsgID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
char* clientMsgID_cs = const_cast<char*>(clientMsgID.c_str());
delete_message(NewBaseCallBack(result), operationID_cs, conversationID_cs, clientMsgID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::deleteAllMsgFromLocal(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
delete_all_msg_from_local(NewBaseCallBack(result), operationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::deleteAllMsgFromLocalAndSvr(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
delete_all_msg_from_local_and_svr(NewBaseCallBack(result), operationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::insertSingleMessageToLocalStorage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto message = zego_value_get_string(arguments->at(flutter::EncodableValue("message")));
auto receiverID = zego_value_get_string(arguments->at(flutter::EncodableValue("receiverID")));
auto senderID = zego_value_get_string(arguments->at(flutter::EncodableValue("senderID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* message_cs = const_cast<char*>(message.c_str());
char* receiverID_cs = const_cast<char*>(receiverID.c_str());
char* senderID_cs = const_cast<char*>(senderID.c_str());
insert_single_message_to_local_storage(NewBaseCallBack(result), operationID_cs, message_cs, receiverID_cs, senderID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::insertGroupMessageToLocalStorage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto message = zego_value_get_string(arguments->at(flutter::EncodableValue("message")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto channelID = zego_value_get_string(arguments->at(flutter::EncodableValue("channelID")));
auto senderID = zego_value_get_string(arguments->at(flutter::EncodableValue("senderID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* message_cs = const_cast<char*>(message.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
char* channelID_cs = const_cast<char*>(channelID.c_str());
char* senderID_cs = const_cast<char*>(senderID.c_str());
insert_group_message_to_local_storage(NewBaseCallBack(result), operationID_cs, message_cs, groupID_cs, channelID_cs, senderID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::markMessagesAsReadByMsgID(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
auto messageIDList = zego_value_get_string(arguments->at(flutter::EncodableValue("messageIDList")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
char* messageIDList_cs = const_cast<char*>(messageIDList.c_str());
mark_messages_as_read_by_msg_id(NewBaseCallBack(result), operationID_cs, conversationID_cs, messageIDList_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::typingStatusUpdate(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto userID = zego_value_get_string(arguments->at(flutter::EncodableValue("userID")));
auto msgTip = zego_value_get_string(arguments->at(flutter::EncodableValue("msgTip")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* userID_cs = const_cast<char*>(userID.c_str());
char* msgTip_cs = const_cast<char*>(msgTip.c_str());
typing_status_update(NewBaseCallBack(result), operationID_cs, userID_cs, msgTip_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createTextMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto text = zego_value_get_string(arguments->at(flutter::EncodableValue("text")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* text_cs = const_cast<char*>(text.c_str());
std::string message = create_text_message(operationID_cs, text_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createTextAtMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto text = zego_value_get_string(arguments->at(flutter::EncodableValue("text")));
auto atUserIDList = zego_value_get_string(arguments->at(flutter::EncodableValue("atUserIDList")));
auto atUserInfoList = zego_value_get_string(arguments->at(flutter::EncodableValue("atUserInfoList")));
auto quoteMessage = zego_value_get_string(arguments->at(flutter::EncodableValue("quoteMessage")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* text_cs = const_cast<char*>(text.c_str());
char* atUserIDList_cs = const_cast<char*>(atUserIDList.c_str());
char* atUserInfoList_cs = const_cast<char*>(atUserInfoList.c_str());
char* quoteMessage_cs = const_cast<char*>(quoteMessage.c_str());
std::string message = create_text_at_message(operationID_cs, text_cs, atUserIDList_cs, atUserInfoList_cs, quoteMessage_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createImageMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto imagePath = zego_value_get_string(arguments->at(flutter::EncodableValue("imagePath")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* imagePath_cs = const_cast<char*>(imagePath.c_str());
std::string message = create_image_message(operationID_cs, imagePath_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createImageMessageFromFullPath(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto imagePath = zego_value_get_string(arguments->at(flutter::EncodableValue("imagePath")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* imagePath_cs = const_cast<char*>(imagePath.c_str());
std::string message = create_image_message_from_full_path(operationID_cs, imagePath_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createSoundMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto soundPath = zego_value_get_string(arguments->at(flutter::EncodableValue("soundPath")));
auto duration = zego_value_get_int(arguments->at(flutter::EncodableValue("duration")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* soundPath_cs = const_cast<char*>(soundPath.c_str());
std::string message = create_sound_message(operationID_cs, soundPath_cs, duration);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createSoundMessageFromFullPath(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto soundPath = zego_value_get_string(arguments->at(flutter::EncodableValue("soundPath")));
auto duration = zego_value_get_int(arguments->at(flutter::EncodableValue("duration")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* soundPath_cs = const_cast<char*>(soundPath.c_str());
std::string message = create_sound_message_from_full_path(operationID_cs, soundPath_cs, duration);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createVideoMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto videoPath = zego_value_get_string(arguments->at(flutter::EncodableValue("videoPath")));
auto videoType = zego_value_get_string(arguments->at(flutter::EncodableValue("videoType")));
auto duration = zego_value_get_int(arguments->at(flutter::EncodableValue("duration")));
auto snapshotPath = zego_value_get_string(arguments->at(flutter::EncodableValue("snapshotPath")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* videoPath_cs = const_cast<char*>(videoPath.c_str());
char* videoType_cs = const_cast<char*>(videoType.c_str());
char* snapshotPath_cs = const_cast<char*>(snapshotPath.c_str());
std::string message = create_video_message(operationID_cs, videoPath_cs, videoType_cs, duration, snapshotPath_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createVideoMessageFromFullPath(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto videoPath = zego_value_get_string(arguments->at(flutter::EncodableValue("videoPath")));
auto videoType = zego_value_get_string(arguments->at(flutter::EncodableValue("videoType")));
auto duration = zego_value_get_int(arguments->at(flutter::EncodableValue("duration")));
auto snapshotPath = zego_value_get_string(arguments->at(flutter::EncodableValue("snapshotPath")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* videoPath_cs = const_cast<char*>(videoPath.c_str());
char* videoType_cs = const_cast<char*>(videoType.c_str());
char* snapshotPath_cs = const_cast<char*>(snapshotPath.c_str());
std::string message = create_video_message_from_full_path(operationID_cs, videoPath_cs, videoType_cs, duration, snapshotPath_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createFileMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto filePath = zego_value_get_string(arguments->at(flutter::EncodableValue("filePath")));
auto fileName = zego_value_get_string(arguments->at(flutter::EncodableValue("fileName")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* filePath_cs = const_cast<char*>(filePath.c_str());
char* fileName_cs = const_cast<char*>(fileName.c_str());
std::string message = create_file_message(operationID_cs, filePath_cs, fileName_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createFileMessageFromFullPath(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto filePath = zego_value_get_string(arguments->at(flutter::EncodableValue("filePath")));
auto fileName = zego_value_get_string(arguments->at(flutter::EncodableValue("fileName")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* filePath_cs = const_cast<char*>(filePath.c_str());
char* fileName_cs = const_cast<char*>(fileName.c_str());
std::string message = create_file_message_from_full_path(operationID_cs, filePath_cs, fileName_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createMergerMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto messageList = zego_value_get_string(arguments->at(flutter::EncodableValue("messageList")));
auto title = zego_value_get_string(arguments->at(flutter::EncodableValue("title")));
auto summaryList = zego_value_get_string(arguments->at(flutter::EncodableValue("summaryList")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* messageList_cs = const_cast<char*>(messageList.c_str());
char* title_cs = const_cast<char*>(title.c_str());
char* summaryList_cs = const_cast<char*>(summaryList.c_str());
std::string message = create_merger_message(operationID_cs, messageList_cs, title_cs, summaryList_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createForwardMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto message = zego_value_get_string(arguments->at(flutter::EncodableValue("message")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* message_cs = const_cast<char*>(message.c_str());
std::string resultMessage = create_forward_message(operationID_cs, message_cs);
result->Success(flutter::EncodableValue(resultMessage));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createLocationMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto description = zego_value_get_string(arguments->at(flutter::EncodableValue("description")));
auto longitude = zego_value_get_double(arguments->at(flutter::EncodableValue("longitude")));
auto latitude = zego_value_get_double(arguments->at(flutter::EncodableValue("latitude")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* description_cs = const_cast<char*>(description.c_str());
std::string message = create_location_message(operationID_cs, description_cs, longitude, latitude);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createCustomMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto data = zego_value_get_string(arguments->at(flutter::EncodableValue("data")));
auto extension = zego_value_get_string(arguments->at(flutter::EncodableValue("extension")));
auto description = zego_value_get_string(arguments->at(flutter::EncodableValue("description")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* data_cs = const_cast<char*>(data.c_str());
char* extension_cs = const_cast<char*>(extension.c_str());
char* description_cs = const_cast<char*>(description.c_str());
std::string message = create_custom_message(operationID_cs, data_cs, extension_cs, description_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createQuoteMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto quoteText = zego_value_get_string(arguments->at(flutter::EncodableValue("quoteText")));
auto quoteMessage = zego_value_get_string(arguments->at(flutter::EncodableValue("quoteMessage")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* quoteText_cs = const_cast<char*>(quoteText.c_str());
char* quoteMessage_cs = const_cast<char*>(quoteMessage.c_str());
std::string message = create_quote_message(operationID_cs, quoteText_cs, quoteMessage_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createCardMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto cardMessage = zego_value_get_string(arguments->at(flutter::EncodableValue("cardMessage")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* cardMessage_cs = const_cast<char*>(cardMessage.c_str());
std::string message = create_card_message(operationID_cs, cardMessage_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createFaceMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto index = zego_value_get_int(arguments->at(flutter::EncodableValue("index")));
auto data = zego_value_get_string(arguments->at(flutter::EncodableValue("data")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* data_cs = const_cast<char*>(data.c_str());
std::string message = create_face_message(operationID_cs, index, data_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createAdvancedTextMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto text = zego_value_get_string(arguments->at(flutter::EncodableValue("text")));
auto richMessageInfoList = zego_value_get_string(arguments->at(flutter::EncodableValue("richMessageInfoList")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* text_cs = const_cast<char*>(text.c_str());
char* richMessageInfoList_cs = const_cast<char*>(richMessageInfoList.c_str());
std::string message = create_advanced_text_message(operationID_cs, text_cs, richMessageInfoList_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createAdvancedQuoteMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto quoteText = zego_value_get_string(arguments->at(flutter::EncodableValue("quoteText")));
auto quoteMessage = zego_value_get_string(arguments->at(flutter::EncodableValue("quoteMessage")));
auto richMessageInfoList = zego_value_get_string(arguments->at(flutter::EncodableValue("richMessageInfoList")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* quoteText_cs = const_cast<char*>(quoteText.c_str());
char* quoteMessage_cs = const_cast<char*>(quoteMessage.c_str());
char* richMessageInfoList_cs = const_cast<char*>(richMessageInfoList.c_str());
std::string message = create_advanced_quote_message(operationID_cs, quoteText_cs, quoteMessage_cs, richMessageInfoList_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::searchLocalMessages(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto filter = zego_value_get_string(arguments->at(flutter::EncodableValue("filter")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* filter_cs = const_cast<char*>(filter.c_str());
search_local_messages(NewBaseCallBack(result), operationID_cs, filter_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::clearConversationAndDeleteAllMsg(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
clear_conversation_and_delete_all_msg(NewBaseCallBack(result), operationID_cs, conversationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::getAdvancedHistoryMessageList(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto params = map_2_json(*arguments);
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* params_cs = const_cast<char*>(params.c_str());
get_advanced_history_message_list(NewBaseCallBack(result), operationID_cs, params_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::getAdvancedHistoryMessageListReverse(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto params = map_2_json(*arguments);
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* params_cs = const_cast<char*>(params.c_str());
get_advanced_history_message_list_reverse(NewBaseCallBack(result), operationID_cs, params_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::findMessageList(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto searchParams = zego_value_get_string(arguments->at(flutter::EncodableValue("searchParams")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* searchParams_cs = const_cast<char*>(searchParams.c_str());
find_message_list(NewBaseCallBack(result), operationID_cs, searchParams_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::setMessageLocalEx(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto conversationID = zego_value_get_string(arguments->at(flutter::EncodableValue("conversationID")));
auto clientMsgID = zego_value_get_string(arguments->at(flutter::EncodableValue("clientMsgID")));
auto localEx = zego_value_get_string(arguments->at(flutter::EncodableValue("localEx")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* conversationID_cs = const_cast<char*>(conversationID.c_str());
char* clientMsgID_cs = const_cast<char*>(clientMsgID.c_str());
char* localEx_cs = const_cast<char*>(localEx.c_str());
set_message_local_ex(NewBaseCallBack(result), operationID_cs, conversationID_cs, clientMsgID_cs, localEx_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::setAppBadge(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto count = zego_value_get_int(arguments->at(flutter::EncodableValue("count")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
set_app_Badge(NewBaseCallBack(result), operationID_cs, count);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::sendMessageNotOss(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto message = zego_value_get_string(arguments->at(flutter::EncodableValue("message")));
auto userID = zego_value_get_string(arguments->at(flutter::EncodableValue("userID")));
auto groupID = zego_value_get_string(arguments->at(flutter::EncodableValue("groupID")));
auto channelId = zego_value_get_string(arguments->at(flutter::EncodableValue("channelId")));
auto offlinePushInfo = zego_value_get_string(arguments->at(flutter::EncodableValue("offlinePushInfo")));
auto clientMsgID = zego_value_get_string(arguments->at(flutter::EncodableValue("clientMsgID")));
auto isOnlineOnly = zego_value_get_bool(arguments->at(flutter::EncodableValue("isOnlineOnly")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* message_cs = const_cast<char*>(message.c_str());
char* userID_cs = const_cast<char*>(userID.c_str());
char* groupID_cs = const_cast<char*>(groupID.c_str());
char* channelId_cs = const_cast<char*>(channelId.c_str());
char* offlinePushInfo_cs = const_cast<char*>(offlinePushInfo.c_str());
send_message_not_oss(NewMsgSendCallBack(result,clientMsgID), operationID_cs, message_cs, userID_cs, groupID_cs, channelId_cs, offlinePushInfo_cs, isOnlineOnly);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createImageMessageByURL(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto sourcePath = zego_value_get_string(arguments->at(flutter::EncodableValue("sourcePath")));
auto sourcePicture = zego_value_get_string(arguments->at(flutter::EncodableValue("sourcePicture")));
auto bigPicture = zego_value_get_string(arguments->at(flutter::EncodableValue("bigPicture")));
auto snapshotPicture = zego_value_get_string(arguments->at(flutter::EncodableValue("snapshotPicture")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* sourcePath_cs = const_cast<char*>(sourcePath.c_str());
char* sourcePicture_cs = const_cast<char*>(sourcePicture.c_str());
char* bigPicture_cs = const_cast<char*>(bigPicture.c_str());
char* snapshotPicture_cs = const_cast<char*>(snapshotPicture.c_str());
std::string message = create_image_message_by_url(operationID_cs, sourcePath_cs, sourcePicture_cs, bigPicture_cs, snapshotPicture_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createSoundMessageByURL(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto soundElem = zego_value_get_string(arguments->at(flutter::EncodableValue("soundElem")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* soundElem_cs = const_cast<char*>(soundElem.c_str());
std::string message = create_sound_message_by_url(operationID_cs, soundElem_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createVideoMessageByURL(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto videoElem = zego_value_get_string(arguments->at(flutter::EncodableValue("videoElem")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* videoElem_cs = const_cast<char*>(videoElem.c_str());
std::string message = create_video_message_by_url(operationID_cs, videoElem_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::createFileMessageByURL(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto fileElem = zego_value_get_string(arguments->at(flutter::EncodableValue("fileElem")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* fileElem_cs = const_cast<char*>(fileElem.c_str());
std::string message = create_file_message_by_url(operationID_cs, fileElem_cs);
result->Success(flutter::EncodableValue(message));
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::fetchSurroundingMessages(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto message = zego_value_get_string(arguments->at(flutter::EncodableValue("message")));
auto before = zego_value_get_int(arguments->at(flutter::EncodableValue("before")));
auto after = zego_value_get_int(arguments->at(flutter::EncodableValue("after")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* message_cs = const_cast<char*>(message.c_str());
fetch_surrounding_messages(NewBaseCallBack(result), operationID_cs, message_cs, before, after);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void MessageManagerService::setCustomBusinessListener(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
set_custom_business_listener(NewCustomBusinessListenCallBack());
result->Success(flutter::EncodableValue());
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}

@ -0,0 +1,159 @@
#ifndef MESSAGE_MANAGER_SERVICE_H
#define MESSAGE_MANAGER_SERVICE_H
#include "../FLTService.h"
#include "Listen.h"
#include <flutter/standard_method_codec.h>
#include <memory>
#include <string>
class MessageManagerService : public FLTService {
public:
MessageManagerService();
void onMethodCalled(
const std::string& method,
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
// Method handlers
void setAdvancedMsgListener(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void sendMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void revokeMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void editMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void deleteMessageFromLocalStorage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void deleteMessageFromLocalAndSvr(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void deleteAllMsgFromLocal(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void deleteAllMsgFromLocalAndSvr(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void insertSingleMessageToLocalStorage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void insertGroupMessageToLocalStorage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void markMessagesAsReadByMsgID(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void typingStatusUpdate(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createTextMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createTextAtMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createImageMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createImageMessageFromFullPath(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createSoundMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createSoundMessageFromFullPath(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createVideoMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createVideoMessageFromFullPath(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createFileMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createFileMessageFromFullPath(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createMergerMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createForwardMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createLocationMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createCustomMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createQuoteMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createCardMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createFaceMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createAdvancedTextMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createAdvancedQuoteMessage(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void searchLocalMessages(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void clearConversationAndDeleteAllMsg(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getAdvancedHistoryMessageList(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getAdvancedHistoryMessageListReverse(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void findMessageList(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void setMessageLocalEx(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void setAppBadge(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void sendMessageNotOss(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createImageMessageByURL(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createSoundMessageByURL(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createVideoMessageByURL(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void createFileMessageByURL(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void fetchSurroundingMessages(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void setCustomBusinessListener(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
private:
std::string m_serviceName;
};
#endif // MESSAGE_MANAGER_SERVICE_H

@ -0,0 +1,150 @@
#include "UserManager.h"
#include <libopenimsdk.h>
#include "../NimResult.h"
#include "../ZegoDataUtils.h"
#include "ConstDefine.h"
#include "Listen.h"
UserManagerService::UserManagerService() {
m_serviceName = "userManager";
}
void UserManagerService::onMethodCalled(
const std::string& method,
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (method == "setUserListener") {
setUserListener(arguments, result);
} else if (method == "getUsersInfo") {
getUsersInfo(arguments, result);
} else if (method == "setSelfInfo") {
setSelfInfo(arguments, result);
} else if (method == "getSelfUserInfo") {
getSelfUserInfo(arguments, result);
} else if (method == "subscribeUsersStatus") {
subscribeUsersStatus(arguments, result);
} else if (method == "unsubscribeUsersStatus") {
unsubscribeUsersStatus(arguments, result);
} else if (method == "getSubscribeUsersStatus") {
getSubscribeUsersStatus(arguments, result);
} else if (method == "getUserStatus") {
getUserStatus(arguments, result);
} else {
result->NotImplemented();
}
}
void UserManagerService::setUserListener(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
set_user_listener(NewUserListenCallBack());
result->Success(flutter::EncodableValue());
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void UserManagerService::getUsersInfo(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto userIDList = zego_value_get_string(arguments->at(flutter::EncodableValue("userIDList")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* userIDList_cs = const_cast<char*>(userIDList.c_str());
get_users_info(NewBaseCallBack(result), operationID_cs, userIDList_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void UserManagerService::setSelfInfo(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto userInfo = map_2_json(*arguments);
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* userInfo_cs = const_cast<char*>(userInfo.c_str());
set_self_info(NewBaseCallBack(result), operationID_cs, userInfo_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void UserManagerService::getSelfUserInfo(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
get_self_user_info(NewBaseCallBack(result), operationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void UserManagerService::subscribeUsersStatus(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto userIDs = zego_value_get_string(arguments->at(flutter::EncodableValue("userIDs")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* userIDs_cs = const_cast<char*>(userIDs.c_str());
subscribe_users_status(NewBaseCallBack(result), operationID_cs, userIDs_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void UserManagerService::unsubscribeUsersStatus(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto userIDs = zego_value_get_string(arguments->at(flutter::EncodableValue("userIDs")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* userIDs_cs = const_cast<char*>(userIDs.c_str());
unsubscribe_users_status(NewBaseCallBack(result), operationID_cs, userIDs_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void UserManagerService::getSubscribeUsersStatus(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
get_subscribe_users_status(NewBaseCallBack(result), operationID_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}
void UserManagerService::getUserStatus(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
if (arguments) {
auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID")));
auto userIDs = zego_value_get_string(arguments->at(flutter::EncodableValue("userIDs")));
char* operationID_cs = const_cast<char*>(operationID.c_str());
char* userIDs_cs = const_cast<char*>(userIDs.c_str());
get_user_status(NewBaseCallBack(result), operationID_cs, userIDs_cs);
} else {
result->Error("INVALID_ARGUMENT", "Arguments cannot be null");
}
}

@ -0,0 +1,49 @@
#ifndef USER_MANAGER_SERVICE_H
#define USER_MANAGER_SERVICE_H
#include "../FLTService.h"
#include "Listen.h"
#include <flutter/standard_method_codec.h>
#include <memory>
#include <string>
class UserManagerService : public FLTService {
public:
UserManagerService();
void onMethodCalled(
const std::string& method,
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
// Method handlers
void setUserListener(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getUsersInfo(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void setSelfInfo(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getSelfUserInfo(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void subscribeUsersStatus(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void unsubscribeUsersStatus(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getSubscribeUsersStatus(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
void getUserStatus(
const flutter::EncodableMap* arguments,
std::shared_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
private:
std::string m_serviceName;
};
#endif // USER_MANAGER_SERVICE_H
Loading…
Cancel
Save