From 67bf71c99897cfc25cc75d07ee433b6b037d43d1 Mon Sep 17 00:00:00 2001 From: cpdl Date: Tue, 6 May 2025 17:25:49 +0800 Subject: [PATCH] no message --- .gitignore | 6 + .idea/flutter_openim_sdk.iml | 93 ++ ...nIM_v3_3e8b8fb2ecd8414db50838d9f7bcb19d.db | Bin 208896 -> 0 bytes .../plugin_integration_test.dart | 3 - example/lib/main.dart | 8 +- example/pubspec.lock | 76 +- example/test/widget_test.dart | 2 +- lib/src/manager/im_channel_manager.dart | 4 - lib/src/manager/im_conversation_manager.dart | 1 - lib/src/manager/im_friendship_manager.dart | 1 - lib/src/manager/im_group_manager.dart | 1 - lib/src/manager/im_manager.dart | 2 - lib/src/models/notification_info.dart | 23 +- windows/flutter_openim_sdk_plugin.cpp | 6 + windows/src/NimCore.cpp | 34 +- windows/src/common/FLTService.cpp | 25 +- windows/src/common/ThreadUtil.cpp | 89 ++ windows/src/common/ThreadUtil.h | 20 + .../src/common/services/ChannelManager.cpp | 201 ++++ windows/src/common/services/ChannelManager.h | 56 ++ windows/src/common/services/ConstDefine.h | 21 +- .../common/services/ConversationManager.cpp | 341 +++++++ .../src/common/services/ConversationManager.h | 82 ++ windows/src/common/services/FriendManager.cpp | 383 ++++++++ windows/src/common/services/FriendManager.h | 74 ++ windows/src/common/services/GroupManager.cpp | 508 ++++++++++ windows/src/common/services/GroupManager.h | 107 +++ windows/src/common/services/IMManager.cpp | 228 ++--- windows/src/common/services/IMManager.h | 7 +- windows/src/common/services/Listen.cpp | 629 +++++++++++- windows/src/common/services/Listen.h | 199 +++- .../src/common/services/MessageManager.cpp | 894 ++++++++++++++++++ windows/src/common/services/MessageManager.h | 159 ++++ windows/src/common/services/UserManager.cpp | 150 +++ windows/src/common/services/UserManager.h | 49 + 35 files changed, 4201 insertions(+), 281 deletions(-) delete mode 100644 example/OpenIM_v3_3e8b8fb2ecd8414db50838d9f7bcb19d.db create mode 100644 windows/src/common/ThreadUtil.cpp create mode 100644 windows/src/common/ThreadUtil.h create mode 100644 windows/src/common/services/ChannelManager.cpp create mode 100644 windows/src/common/services/ChannelManager.h create mode 100644 windows/src/common/services/ConversationManager.cpp create mode 100644 windows/src/common/services/ConversationManager.h create mode 100644 windows/src/common/services/FriendManager.cpp create mode 100644 windows/src/common/services/FriendManager.h create mode 100644 windows/src/common/services/GroupManager.cpp create mode 100644 windows/src/common/services/GroupManager.h create mode 100644 windows/src/common/services/UserManager.cpp create mode 100644 windows/src/common/services/UserManager.h diff --git a/.gitignore b/.gitignore index d540d77..9583cd5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,9 @@ #/.packages #/.dart_tool #/example/ios/Podfile.lock +build/ +.dart_tool/ +.vscode/ +.metadata +.idea/encodings.xml +.idea/other.xml diff --git a/.idea/flutter_openim_sdk.iml b/.idea/flutter_openim_sdk.iml index f66f4f5..956868f 100644 --- a/.idea/flutter_openim_sdk.iml +++ b/.idea/flutter_openim_sdk.iml @@ -123,6 +123,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/OpenIM_v3_3e8b8fb2ecd8414db50838d9f7bcb19d.db b/example/OpenIM_v3_3e8b8fb2ecd8414db50838d9f7bcb19d.db deleted file mode 100644 index 929664c86e00b8f14a23c55e70d8b1e89476e0f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208896 zcmeI)&2QXhe!%geWX;GgisHO+ojCC%j$<(%dnGH1Z3qigiIqV0TkJTfjcq_uGnCAT zLyq|(+t`;vwiTq=%bvGA_tsk%J@v4c06i>Z7YuTK17?DrGD zl8%o3y7GwEpIyik=tzaUjiyJbA|?pvZusvh`G^jWo>rf#Xtd%A5KmfAMjtA^{T zbEU;EKK}W1O;!|Xd*0VqEhAUS%YS`YwIDn(tgCbQ-$d+Y@q45GM8%|=Z)V8uGw+ zou|!cnOcf>xF(+w?Y^98H!=#LOPW1W)@=8LVXgKmDNo)#Sd-`HrR|^f&H1EvB`qHs zJmZs-hD`W$#0n{W*bIo(2F-(vVJ~6#x>zWC#(>k>fmj6$yOp0A^~=j2Eq!+Nc73*? zIUU2*{ef%1Zs)@@g!uBIs(g3;SwcJ+hJ1u4g@>QkYc=`QDe0^6;+SXiyEi#-l*K|g zFrWXw$>h5oU(GhedcJA6ne9qQ^aIu?~vX8s6nSy zvUkZ>N%t$m(yF3dn5@cIPCY}Ub$1cb9Q6)9aVBc=g$vS`zsST^eAk6dM4_-+7Hx$( zVc4y?PJ6(T8yy<7ltu>!r4Zj4a7l4s&;`YzL6_U*%3QwXj4zT|2-B@Wv;|I@C|S*a znAJI-jdJJ>EyJZKE7hGJ9tz`_rlmr0?eQ7BcF-1yrrF33W1giU z=2DnVx}mQqmkw0rYo~`#`(z06W9Ut6)um|SZ>gEF6S+(ES{q^3^ThL6yp<>vj+KpN zp-wpQlWP>m##()52+#NYfNfB*sr zAbfB*srAbhlf zAb-*k zxqmu*bZUI^w}-y1{%+E)UY+>E_$y<-m#&Zfy7GwEpIyik=tzaUjiyJbA|?pvmB zsCwW#(P!0in!2Sn@9DN}SnBs`K%BIjHrhse)o?v^F5h%g{Nm%EPuFBck+$c3ebq8@ zmAw3?=Rdr)ymWiHetYSItIKsw9Ng2%JqJ&#&uFQM+0yEpx+^}qGw;8rG&Eap8(Q5r z9{S>U$2Zr^rtX`L-K%zfVL{Y0ZQpfTL9^`Gn%*?jz_p6!G+jd%B8_(TX&tHqq@fZ!0`NT6y!^%w-={s^1_1j z^|4G4HklAu_evJ437AxE`gqZZs$7X){`;mf{_*$!A2nFK60~x)%DBG<&41 z+3pF$TJ2R*p1gaoCeP1H+du1@s>xlJw0vmrL`}Okc%G)vg{(X*aN}Vb6uue5UW)B? zu~7DmaiX;Yk;o0Zl@I9p<>il-KD&CmKHJcoj^XP5z%;(wFn)%}Ts~Bl@6JCWM=u#?qJlQ(<<41jG-w5k z4h~8ozBAyG;=rH_ibI1gx61{!eAgIXB(r{{D|)nxO`0fKgnyVtHJ^=g=nXByr6?=a zogYvN0>C@8oVqfqinJGTQJ1{s{qTDoWKb16Ez6`lWTX#2#JD&0Z z(p#EVrXyR|FnXwbOOZ8eCVb=4+BUU`|3x#84V_B#ZPWMMS|%)hTz^hoX4A!hWn96h#157l$$FN$YQ(Liri%12$Z zaGIiAd#x(#i^IFycL(WE^c{F(>!o8gc}eV?mohtNORR*RA3ndRUb>Bo<1c$Z-tnaO zxxIVYx!L`6?h0ZTUs_-JQj(*s^{SCc zW@l$b*!2$eM!6SNIJ`~QH{PLH7Y*`g^aihBu=8p~9 z0S;QYf4J>J$v6)UjC|tF_qUJ8@WQA zXcfw=61ibaHJ)u6MYYq*51LcY{3XxM-`ngq4)P$kb6ejn#k-{ zqa0(lk_}h0Q14?%gKmY**5I_I{1Q0*~0R#{z5#arQ2?|9BAbz^+5I_I{1Q0*~0R#|0phST8|0O6CA%Fk^2q1s}0tg_000IagFk%8c|Bu*!(j5d4 zKmY**5I_I{1Q0*~0R&0}c>XUzp$Gv45I_I{1Q0*~0R#|00D%z`;Q4>V29)j~fB*sr zAb>2j^&9|!1<3l*-i&RKVdn~ zrfvoO!|<@@KR0{+J*AO%OYb0Qx1mMt3AVF4vt@gevSrKWw(h)JlP_J89$(3@d4}CG z?RB+nc%Hs)cnNo*^jsNV@zjv8>DXcX=)MTzD5f%$P0JKvsJ6ZJ-jVkOfoANWQoN{$ z$lRqA<;t0=tX|q7tO|Wfjf&m)@#D8Y`%;99)^iDzzkbm^UrDk5FnkZKv5hB&J`FZ(q$-S_q8J)@-5-hk`S_Ueuw%M?39eK=@6l^t zQ7)aX%GXX07fEhC1xY@h+4}RhYx2#T(&LjE4>5CmkrCI$!063rK8f^f*x~Y!APuWA zQzkd;glP8Wrd6B!N*@|^T zNuyc=HwIe>2%TrBls&I|z9}B)U{kyt$yQrx)tr7 zpv`E>l{Ce#i+!4C=2&!^SjI*E^3^afRNZpyWaHaC^<=)S{`!L&%+}PDJ1460i8E4= z>6>TVk7s7Lt+(=R#r+c11~m~LQa0YG$!A1=rgE3ITTw(58hEq3fu!=_X3`4EPhPLe zH_r@DWZmwh*{fSne|qY8bhBScnUvK%T)5d2$<5}TF1nS6E)624#E!3IR~PQ93LCvN zFfuDkSWBGVv2=gUaof=e>E1(24%%YImp;`b#|KS%PwZ*KeP|&Qg&WW{*J)?-Std05 zi+kB2*-MySxG0MU1v_XPuGws8eHk(erKBVE%gY}veRlPBeO6QqRSMalbfdAurmZA{ z#ADijAirfPF3#6ptIGP~@G#4+GOFlVcd_g{@W$5JS8MX(qO^5C6Lx*o;#=)2e!VOV z`)WnuIOI7aOJCfX6i!nV{`~)*zs=wR2q1s}0tg_000IagfB*sr?0W(J{QtfmB5n`? z1Q0*~0R#|0009ILKmdU~3-JDb&xBk60R#|0009ILKmY**5I_KdeJ{ZK|9wA1+#mu7 zAb{)>K|9d9n0tg_000IagfB*srAbsxRKmY** z5I_I{1Q0*~0R#}(vjFe^_e{tI5I_I{1Q0*~0R#|0009IL*!Kdw|KImR#0?^V00Iag SfB*srAb _MyAppState(); } @@ -21,7 +23,7 @@ class _MyAppState extends State { super.initState(); OpenIM.iMManager .initSDK( - platformID: 1, + platformID: 2, apiAddr: 'http://192.168.77.135:10002', wsAddr: 'ws://192.168.77.135:10001', dataDir: './', @@ -50,7 +52,7 @@ class _MyAppState extends State { ), body: Column( children: [ - TextButton(onPressed: () {}, child: Text('login')), + TextButton(onPressed: () {}, child: const Text('login')), ], ), ), diff --git a/example/pubspec.lock b/example/pubspec.lock index c110d01..56cbd94 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,42 +5,42 @@ packages: dependency: transitive description: name: async - sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" url: "https://pub.dev" source: hosted - version: "2.12.0" + version: "2.11.0" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.1" characters: dependency: transitive description: name: characters - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.3.0" clock: dependency: transitive description: name: clock - sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.1" collection: dependency: transitive description: name: collection - sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.19.1" + version: "1.18.0" cupertino_icons: dependency: "direct main" description: @@ -53,10 +53,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.1" flutter: dependency: "direct main" description: flutter @@ -86,18 +86,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" url: "https://pub.dev" source: hosted - version: "10.0.8" + version: "10.0.5" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" url: "https://pub.dev" source: hosted - version: "3.0.9" + version: "3.0.5" leak_tracker_testing: dependency: transitive description: @@ -118,10 +118,10 @@ packages: dependency: transitive description: name: matcher - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.17" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: @@ -134,71 +134,71 @@ packages: dependency: transitive description: name: meta - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.15.0" path: dependency: transitive description: name: path - sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.9.0" sky_engine: dependency: transitive description: flutter source: sdk - version: "0.0.0" + version: "0.0.99" source_span: dependency: transitive description: name: source_span - sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.10.1" + version: "1.10.0" stack_trace: dependency: transitive description: name: stack_trace - sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.12.1" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.2" string_scanner: dependency: transitive description: name: string_scanner - sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" url: "https://pub.dev" source: hosted - version: "1.4.1" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.2.1" test_api: dependency: transitive description: name: test_api - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.dev" source: hosted - version: "0.7.4" + version: "0.7.2" vector_math: dependency: transitive description: @@ -211,10 +211,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" + sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" url: "https://pub.dev" source: hosted - version: "14.3.1" + version: "14.2.5" sdks: - dart: ">=3.7.0-0 <4.0.0" + dart: ">=3.4.4 <4.0.0" flutter: ">=3.18.0-18.0.pre.54" diff --git a/example/test/widget_test.dart b/example/test/widget_test.dart index f376c56..48ebcae 100644 --- a/example/test/widget_test.dart +++ b/example/test/widget_test.dart @@ -13,7 +13,7 @@ import 'package:flutter_openim_sdk_example/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. - await tester.pumpWidget(MyApp()); + await tester.pumpWidget(const MyApp()); // Verify that our counter starts at 0. expect(find.text('0'), findsOneWidget); diff --git a/lib/src/manager/im_channel_manager.dart b/lib/src/manager/im_channel_manager.dart index 5a3375d..a3e4f61 100644 --- a/lib/src/manager/im_channel_manager.dart +++ b/lib/src/manager/im_channel_manager.dart @@ -2,10 +2,6 @@ import 'dart:developer'; import 'package:flutter/services.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 { MethodChannel _channel; diff --git a/lib/src/manager/im_conversation_manager.dart b/lib/src/manager/im_conversation_manager.dart index cbbb6b2..ea89c24 100644 --- a/lib/src/manager/im_conversation_manager.dart +++ b/lib/src/manager/im_conversation_manager.dart @@ -4,7 +4,6 @@ import 'dart:developer'; import 'package:flutter/services.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; -import '../models/update_req.dart'; class ConversationManager { MethodChannel _channel; diff --git a/lib/src/manager/im_friendship_manager.dart b/lib/src/manager/im_friendship_manager.dart index e132805..71211e7 100644 --- a/lib/src/manager/im_friendship_manager.dart +++ b/lib/src/manager/im_friendship_manager.dart @@ -3,7 +3,6 @@ import 'dart:async'; import 'package:flutter/services.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; -import '../models/update_req.dart'; class FriendshipManager { MethodChannel _channel; diff --git a/lib/src/manager/im_group_manager.dart b/lib/src/manager/im_group_manager.dart index 5cf15a3..8d0d447 100644 --- a/lib/src/manager/im_group_manager.dart +++ b/lib/src/manager/im_group_manager.dart @@ -2,7 +2,6 @@ import 'dart:developer'; import 'package:flutter/services.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; -import 'package:flutter_openim_sdk/src/models/set_group_member_info.dart'; class GroupManager { MethodChannel _channel; diff --git a/lib/src/manager/im_manager.dart b/lib/src/manager/im_manager.dart index 5ed01e4..fee0103 100644 --- a/lib/src/manager/im_manager.dart +++ b/lib/src/manager/im_manager.dart @@ -6,8 +6,6 @@ import 'package:flutter/services.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; import 'package:flutter_openim_sdk/src/logger.dart'; -import '../models/channel_info.dart'; -import 'im_channel_manager.dart'; class IMManager { MethodChannel _channel; diff --git a/lib/src/models/notification_info.dart b/lib/src/models/notification_info.dart index 2ecc5e6..ff98fea 100644 --- a/lib/src/models/notification_info.dart +++ b/lib/src/models/notification_info.dart @@ -1,5 +1,4 @@ import '../../flutter_openim_sdk.dart'; -import 'channel_info.dart'; /// OA notification class OANotification { @@ -456,8 +455,6 @@ class GroupMemberInfoChangedNotification { } } - - ///todo 所有的聊天的操作者都没有,暂时没有处理 /// 聊天室事件通知 class ChannelNotification { @@ -481,7 +478,8 @@ class ChannelNotification { }); ChannelNotification.fromJson(Map json) { - Channel = json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; + Channel = + json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; opUser = json['opUser'] != null ? ChannelMembersInfo.fromJson(json['opUser']) : null; @@ -514,7 +512,6 @@ class ChannelNotification { } } - /// 组踢出成员通知 class KickedChannelMemeberNotification { /// 聊天室信息 @@ -530,7 +527,8 @@ class KickedChannelMemeberNotification { {this.Channel, this.opUser, this.kickedUserList}); KickedChannelMemeberNotification.fromJson(Map json) { - Channel = json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; + Channel = + json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; opUser = json['opUser'] != null ? ChannelMembersInfo.fromJson(json['opUser']) : null; @@ -569,7 +567,8 @@ class QuitChannelNotification { QuitChannelNotification({this.Channel, this.quitUser}); QuitChannelNotification.fromJson(Map json) { - Channel = json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; + Channel = + json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; quitUser = json['quitUser'] != null ? ChannelMembersInfo.fromJson(json['quitUser']) : null; @@ -598,7 +597,8 @@ class EnterChannelNotification { EnterChannelNotification({this.Channel, this.entrantUser}); EnterChannelNotification.fromJson(Map json) { - Channel = json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; + Channel = + json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; entrantUser = json['entrantUser'] != null ? ChannelMembersInfo.fromJson(json['entrantUser']) : null; @@ -616,7 +616,6 @@ class EnterChannelNotification { } } - /// 禁言成员通知 class MuteChannelMemberNotification { /// 聊天室信息 @@ -639,7 +638,8 @@ class MuteChannelMemberNotification { }); MuteChannelMemberNotification.fromJson(Map json) { - Channel = json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; + Channel = + json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; opUser = json['opUser'] != null ? ChannelMembersInfo.fromJson(json['opUser']) : null; @@ -683,7 +683,8 @@ class ChannelMemberInfoChangedNotification { }); ChannelMemberInfoChangedNotification.fromJson(Map json) { - Channel = json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; + Channel = + json['channel'] != null ? ChannelInfo.fromJson(json['channel']) : null; opUser = json['opUser'] != null ? ChannelMembersInfo.fromJson(json['opUser']) : null; diff --git a/windows/flutter_openim_sdk_plugin.cpp b/windows/flutter_openim_sdk_plugin.cpp index 4794fb8..e663829 100644 --- a/windows/flutter_openim_sdk_plugin.cpp +++ b/windows/flutter_openim_sdk_plugin.cpp @@ -14,6 +14,7 @@ #include #include "src/MethodCallHandlerImpl.h" #include "src/common/stable.h" +#include "src/common/ThreadUtil.h" class FlutterOpenimSdkPlugin : public flutter::Plugin { @@ -68,6 +69,11 @@ void FlutterOpenimSdkPlugin::RegisterWithRegistrar( 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(); auto channel = plugin->m_channel->startListening(registrar); channel->SetMethodCallHandler( diff --git a/windows/src/NimCore.cpp b/windows/src/NimCore.cpp index ae4e4c2..497ca29 100644 --- a/windows/src/NimCore.cpp +++ b/windows/src/NimCore.cpp @@ -10,8 +10,15 @@ #include #include "FLTConvert.h" - +#include "common/ThreadUtil.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"; @@ -22,7 +29,12 @@ NimCore::~NimCore() {} void NimCore::regService() { addService(new IMManagerService()); - + addService(new UserManagerService()); + addService(new FriendshipManagerService()); + addService(new MessageManagerService()); + addService(new GroupManagerService()); + addService(new ChannelManagerService()); + addService(new ConversationManagerService()); } void NimCore::cleanService() { @@ -85,8 +97,9 @@ void NimCore::onMethodCall( void NimCore::invokeMethod(const std::string& method, const flutter::EncodableMap& arguments) { if (m_channel) { - m_channel->InvokeMethod( - method, std::make_unique(arguments)); + // Use ThreadUtil to ensure we're on the platform thread + ThreadUtil::InvokeMethodOnPlatformThread( + m_channel, method, std::make_unique(arguments)); } } @@ -115,9 +128,16 @@ void NimCore::invokeMethod(const std::string& eventName, const InvokeMehtodCallback& callback) { invokeCallback = callback; if (m_channel) { - m_channel->InvokeMethod( - eventName, std::make_unique(arguments), - std::make_unique>()); + // Create shared pointers for the data to ensure copy constructibility + auto eventNameCopy = std::make_shared(eventName); + auto argsCopy = std::make_shared(arguments); + + // Use ThreadUtil to ensure we're on the platform thread + ThreadUtil::RunOnPlatformThread([this, eventNameCopy, argsCopy]() { + m_channel->InvokeMethod( + *eventNameCopy, std::make_unique(*argsCopy), + std::make_unique>()); + }); } } diff --git a/windows/src/common/FLTService.cpp b/windows/src/common/FLTService.cpp index 1f1ca4e..115e710 100644 --- a/windows/src/common/FLTService.cpp +++ b/windows/src/common/FLTService.cpp @@ -5,6 +5,7 @@ #include "FLTService.h" #include "../FLTConvert.h" +#include "ThreadUtil.h" std::string FLTService::getServiceName() const { return m_serviceName; } @@ -22,8 +23,16 @@ void notifyEvent(const std::string& eventName, for (auto& it : logList) { 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(eventName); + auto argsCopy = std::make_shared(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, @@ -60,6 +69,14 @@ void FLTService::notifyEventEx(const std::string& serviceName, for (auto& it : logList) { 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(eventName); + auto argsCopy = std::make_shared(arguments); + + // Ensure we're on the platform thread + ThreadUtil::RunOnPlatformThread([eventNameCopy, argsCopy]() { + NimCore::getInstance()->invokeMethod(*eventNameCopy, *argsCopy); + YXLOG_API(Info) << "notifyEventEx invoke completation." << YXLOGEnd; + }); } diff --git a/windows/src/common/ThreadUtil.cpp b/windows/src/common/ThreadUtil.cpp new file mode 100644 index 0000000..1b7a61f --- /dev/null +++ b/windows/src/common/ThreadUtil.cpp @@ -0,0 +1,89 @@ +#include "ThreadUtil.h" +#include +#include +#include +#include +#include +#include + +namespace ThreadUtil { + // Global variables for thread management + static DWORD g_platformThreadId = 0; + static std::queue> 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 task; + + { + std::unique_lock 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 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::move(callback)); + + // Otherwise, queue the task for execution on the platform thread + { + std::lock_guard lock(g_queueMutex); + g_taskQueue.push([callbackPtr]() { (*callbackPtr)(); }); + } + g_queueCondition.notify_one(); + } + + // Helper function to invoke method on platform thread + void InvokeMethodOnPlatformThread( + flutter::MethodChannel* channel, + const std::string& method, + std::unique_ptr arguments) { + + if (!channel) return; + + // Create shared pointers for the data to ensure copy constructibility + auto methodCopy = std::make_shared(method); + auto argsCopy = std::shared_ptr(arguments.release()); + + RunOnPlatformThread([channel, methodCopy, argsCopy]() { + channel->InvokeMethod( + *methodCopy, + std::make_unique(*argsCopy) + ); + }); + } +} diff --git a/windows/src/common/ThreadUtil.h b/windows/src/common/ThreadUtil.h new file mode 100644 index 0000000..11e192a --- /dev/null +++ b/windows/src/common/ThreadUtil.h @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +#include +#include + +namespace ThreadUtil { + // Function to initialize the platform thread ID + void InitializePlatformThreadId(); + + // Function to ensure code runs on the platform thread + void RunOnPlatformThread(std::function callback); + + // Helper function to invoke method on platform thread + void InvokeMethodOnPlatformThread( + flutter::MethodChannel* channel, + const std::string& method, + std::unique_ptr arguments); +} diff --git a/windows/src/common/services/ChannelManager.cpp b/windows/src/common/services/ChannelManager.cpp new file mode 100644 index 0000000..eeb6bad --- /dev/null +++ b/windows/src/common/services/ChannelManager.cpp @@ -0,0 +1,201 @@ +#include "ChannelManager.h" +#include +#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> 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> 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> 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(operationID.c_str()); + char* channelID_cs = const_cast(channelID.c_str()); + char* userIDList_cs = const_cast(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> 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(operationID.c_str()); + char* channelID_cs = const_cast(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> 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(operationID.c_str()); + char* channelIDList_cs = const_cast(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> 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(operationID.c_str()); + char* channelID_cs = const_cast(channelID.c_str()); + char* reason_cs = const_cast(reason.c_str()); + char* ex_cs = const_cast(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> 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(operationID.c_str()); + char* channelID_cs = const_cast(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> 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(operationID.c_str()); + // char* channelID_cs = const_cast(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> 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(operationID.c_str()); + // char* channelID_cs = const_cast(channelID.c_str()); + // char* userID_cs = const_cast(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> 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(operationID.c_str()); + char* channelID_cs = const_cast(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> 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(operationID.c_str()); + char* channelID_cs = const_cast(channelID.c_str()); + char* userIDs_cs = const_cast(userIDs.c_str()); + + get_users_in_channel(NewBaseCallBack(result), operationID_cs, channelID_cs, userIDs_cs); + } else { + result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); + } +} \ No newline at end of file diff --git a/windows/src/common/services/ChannelManager.h b/windows/src/common/services/ChannelManager.h new file mode 100644 index 0000000..834f45e --- /dev/null +++ b/windows/src/common/services/ChannelManager.h @@ -0,0 +1,56 @@ +#ifndef CHANNEL_MANAGER_SERVICE_H +#define CHANNEL_MANAGER_SERVICE_H +#include "../FLTService.h" +#include "Listen.h" +#include +#include +#include + +class ChannelManagerService : public FLTService +{ + + public: + ChannelManagerService(); + + void onMethodCalled( + const std::string &method, + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + + // Method handlers + void setChannelListener( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getChannelMembersInfo( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getChannelMemberList( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getChannelsInfo( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void joinChannel( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void quitChannel( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void changeChannelMute( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void changeChannelMemberMute( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void isJoinChannel( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getUsersInChannel( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + + private: + std::string m_serviceName; + }; + +#endif // CHANNEL_MANAGER_SERVICE_H \ No newline at end of file diff --git a/windows/src/common/services/ConstDefine.h b/windows/src/common/services/ConstDefine.h index e3663f7..8d3f972 100644 --- a/windows/src/common/services/ConstDefine.h +++ b/windows/src/common/services/ConstDefine.h @@ -45,10 +45,14 @@ enum class ConstDefine { MSG_DELETED, RECV_NEW_MESSAGES, RECV_OFFLINE_NEW_MESSAGES, + SELF_INFO_UPDATED, USER_STATUS_CHANGED, + RECV_CUSTOM_BUSINESS_MESSAGE, + MESSAGE_KV_INFO_CHANGED, + OPEN, PART_SIZE, HASH_PART_PROGRESS, @@ -59,9 +63,22 @@ enum class ConstDefine { COMPLETE, CONVERSATION_USER_INPUT_STATUS_CHANGED, RECV_ONLINE_ONLY_MESSAGE, - RECV_MESSAGE_EDIT, + NEW_RECV_MESSAGE_EDIT, + 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, }; diff --git a/windows/src/common/services/ConversationManager.cpp b/windows/src/common/services/ConversationManager.cpp new file mode 100644 index 0000000..d6ad3f8 --- /dev/null +++ b/windows/src/common/services/ConversationManager.cpp @@ -0,0 +1,341 @@ +#include "ConversationManager.h" +#include +#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> 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> 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> result) { + if (arguments) { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char* operationID_cs = const_cast(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> 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(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> 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(operationID.c_str()); + char* sourceID_cs = const_cast(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> 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(operationID.c_str()); + char* conversationIDList_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(conversationID.c_str()); + char* draftText_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(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> result) { + if (arguments) { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char* operationID_cs = const_cast(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> 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(operationID.c_str()); + char* sourceID_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(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> result) { + if (arguments) { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char* operationID_cs = const_cast(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> result) { + if (arguments) { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char* operationID_cs = const_cast(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> 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(operationID.c_str()); + char* name_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(conversationID.c_str()); + char* userID_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(conversationID.c_str()); + char* req_cs = const_cast(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> 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(operationID.c_str()); + char* name_cs = const_cast(name.c_str()); + + search_conversations(NewBaseCallBack(result), operationID_cs, name_cs); + } else { + result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); + } +} \ No newline at end of file diff --git a/windows/src/common/services/ConversationManager.h b/windows/src/common/services/ConversationManager.h new file mode 100644 index 0000000..8eaaff7 --- /dev/null +++ b/windows/src/common/services/ConversationManager.h @@ -0,0 +1,82 @@ +#ifndef CONVERSATION_MANAGER_SERVICE_H +#define CONVERSATION_MANAGER_SERVICE_H +#include "../FLTService.h" +#include "Listen.h" +#include +#include +#include + +class ConversationManagerService: public FLTService { +public: + ConversationManagerService(); + + + void onMethodCalled( + const std::string& method, + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + + // Method handlers + void setConversationListener( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getAllConversationList( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getConversationListSplit( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getOneConversation( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getMultipleConversation( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void setConversationDraft( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void hideConversation( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void markConversationMessageAsRead( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getTotalUnreadMsgCount( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getConversationIDBySessionType( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void clearConversationAndDeleteAllMsg( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void deleteConversationAndDeleteAllMsg( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getAtAllTag( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void hideAllConversations( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void searchConversation( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void changeInputStates( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getInputStates( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void setConversation( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void searchConversations( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + +private: + std::string m_serviceName; +}; + +#endif // CONVERSATION_MANAGER_SERVICE_H \ No newline at end of file diff --git a/windows/src/common/services/FriendManager.cpp b/windows/src/common/services/FriendManager.cpp new file mode 100644 index 0000000..2bb07ee --- /dev/null +++ b/windows/src/common/services/FriendManager.cpp @@ -0,0 +1,383 @@ +#include "FriendManager.h" +#include +#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> 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> 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> 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(operationID.c_str()); + char *userIDList_cs = const_cast(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> 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(operationID.c_str()); + char *friendInfo_cs = const_cast(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> result) +{ + if (arguments) + { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char *operationID_cs = const_cast(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> result) +{ + if (arguments) + { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char *operationID_cs = const_cast(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> 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(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> 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(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> 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(operationID.c_str()); + char *userID_cs = const_cast(userID.c_str()); + char *ex_cs = const_cast(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> result) +{ + if (arguments) + { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char *operationID_cs = const_cast(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> 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(operationID.c_str()); + char *userID_cs = const_cast(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> 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(operationID.c_str()); + char *userIDList_cs = const_cast(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> 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(operationID.c_str()); + char *userID_cs = const_cast(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> 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(operationID.c_str()); + char *applicationInfo_cs = const_cast(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> 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(operationID.c_str()); + char *applicationInfo_cs = const_cast(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> 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(operationID.c_str()); + char *searchParam_cs = const_cast(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> 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(operationID.c_str()); + char *req_cs = const_cast(req.c_str()); + + update_friends(NewBaseCallBack(result), operationID_cs, req_cs); + } + else + { + result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); + } +} \ No newline at end of file diff --git a/windows/src/common/services/FriendManager.h b/windows/src/common/services/FriendManager.h new file mode 100644 index 0000000..0ebaaa5 --- /dev/null +++ b/windows/src/common/services/FriendManager.h @@ -0,0 +1,74 @@ +#ifndef FRIENDSHIP_MANAGER_SERVICE_H +#define FRIENDSHIP_MANAGER_SERVICE_H + +#include "../FLTService.h" +#include "Listen.h" +#include +#include +#include + +class FriendshipManagerService : public FLTService +{ +public: + FriendshipManagerService(); + + void onMethodCalled( + const std::string &method, + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + + // Method handlers + void setFriendListener( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getFriendsInfo( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void addFriend( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getFriendApplicationListAsRecipient( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getFriendApplicationListAsApplicant( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getFriendList( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getFriendListPage( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void addBlacklist( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getBlacklist( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void removeBlacklist( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void checkFriend( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void deleteFriend( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void acceptFriendApplication( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void refuseFriendApplication( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void searchFriends( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void updateFriends( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + +private: + std::string m_serviceName; +}; + +#endif // FRIENDSHIP_MANAGER_SERVICE_H \ No newline at end of file diff --git a/windows/src/common/services/GroupManager.cpp b/windows/src/common/services/GroupManager.cpp new file mode 100644 index 0000000..f5e1f3c --- /dev/null +++ b/windows/src/common/services/GroupManager.cpp @@ -0,0 +1,508 @@ +#include "GroupManager.h" +#include +#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> 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> 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> 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(operationID.c_str()); + char* groupID_cs = const_cast(groupID.c_str()); + char* reason_cs = const_cast(reason.c_str()); + char* userIDList_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(groupID.c_str()); + char* reason_cs = const_cast(reason.c_str()); + char* userIDList_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(groupID.c_str()); + char* userIDList_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(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> result) { + if (arguments) { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char* operationID_cs = const_cast(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> 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(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> 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(operationID.c_str()); + char* groupInfo_cs = const_cast(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> 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(operationID.c_str()); + char* groupInfo_cs = const_cast(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> 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(operationID.c_str()); + char* groupIDList_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(groupID.c_str()); + char* reason_cs = const_cast(reason.c_str()); + char* ex_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(groupID.c_str()); + char* userID_cs = const_cast(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> result) { + if (arguments) { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char* operationID_cs = const_cast(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> result) { + if (arguments) { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char* operationID_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(groupID.c_str()); + char* userID_cs = const_cast(userID.c_str()); + char* handleMsg_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(groupID.c_str()); + char* userID_cs = const_cast(userID.c_str()); + char* handleMsg_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(groupID.c_str()); + char* userID_cs = const_cast(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> 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(operationID.c_str()); + char* searchParam_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(groupID.c_str()); + char* excludeUserIDList_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(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> 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(operationID.c_str()); + char* searchParam_cs = const_cast(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> 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(operationID.c_str()); + char* info_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(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> 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(operationID.c_str()); + char* groupID_cs = const_cast(groupID.c_str()); + char* userIDs_cs = const_cast(userIDs.c_str()); + + get_users_in_group(NewBaseCallBack(result), operationID_cs, groupID_cs, userIDs_cs); + } else { + result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); + } +} \ No newline at end of file diff --git a/windows/src/common/services/GroupManager.h b/windows/src/common/services/GroupManager.h new file mode 100644 index 0000000..4c546df --- /dev/null +++ b/windows/src/common/services/GroupManager.h @@ -0,0 +1,107 @@ +#ifndef GROUP_MANAGER_SERVICE_H +#define GROUP_MANAGER_SERVICE_H + +#include "../FLTService.h" +#include "Listen.h" +#include +#include +#include + +class GroupManagerService : public FLTService +{ +public: + GroupManagerService(); + + void onMethodCalled( + const std::string &method, + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + + // Method handlers + void setGroupListener( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void inviteUserToGroup( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void kickGroupMember( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getGroupMembersInfo( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getGroupMemberList( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getJoinedGroupList( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getJoinedGroupListPage( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void createGroup( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void setGroupInfo( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getGroupsInfo( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void joinGroup( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void quitGroup( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void transferGroupOwner( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getGroupApplicationListAsRecipient( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getGroupApplicationListAsApplicant( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void acceptGroupApplication( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void refuseGroupApplication( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void dismissGroup( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void changeGroupMute( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void changeGroupMemberMute( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void searchGroups( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getGroupMemberListByJoinTimeFilter( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getGroupMemberOwnerAndAdmin( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void searchGroupMembers( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void setGroupMemberInfo( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void isJoinGroup( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + void getUsersInGroup( + const flutter::EncodableMap *arguments, + std::shared_ptr> result); + +private: + std::string m_serviceName; +}; + +#endif // GROUP_MANAGER_SERVICE_H \ No newline at end of file diff --git a/windows/src/common/services/IMManager.cpp b/windows/src/common/services/IMManager.cpp index d36945b..e6c527c 100644 --- a/windows/src/common/services/IMManager.cpp +++ b/windows/src/common/services/IMManager.cpp @@ -12,90 +12,14 @@ #include #include "../ZegoDataUtils.h" #include "ConstDefine.h" +#include "Listen.h" IMManagerService::IMManagerService() { 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( const std::string &method, const flutter::EncodableMap *arguments, std::shared_ptr> result) { @@ -138,7 +62,7 @@ void IMManagerService::initializeSDK( char *config_cs = const_cast(config.c_str()); - auto error = init_sdk(_im_manager_listener.onInitSdk, + auto error = init_sdk(NewInitListenCallBack(), operationID_cs, config_cs); if (error == 0) { @@ -181,9 +105,7 @@ void IMManagerService::login( char *userID_cs = const_cast(userID.c_str()); char *token_cs = const_cast(token.c_str()); - NewBaseCallBack(operationID, result); - - ::login(_im_manager_listener.baseCallBack, operationID_cs, userID_cs, token_cs); + ::login(NewBaseCallBack(result), operationID_cs, userID_cs, token_cs); } else { result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); @@ -197,8 +119,8 @@ void IMManagerService::logout( auto operationID = zego_value_get_string( arguments->at(flutter::EncodableValue("operationID"))); char *operationID_cs = const_cast(operationID.c_str()); - NewBaseCallBack(operationID, result); - ::logout(_im_manager_listener.baseCallBack, operationID_cs); + + ::logout(NewBaseCallBack(result), operationID_cs); } else { result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); @@ -225,67 +147,61 @@ void IMManagerService::getLoginStatus( void IMManagerService::uploadFile( const flutter::EncodableMap *arguments, std::shared_ptr> result) { - // if (arguments) { - // auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); - // auto id = zego_value_get_string(arguments->at(flutter::EncodableValue("id"))); - // auto fileInfo = map_2_json(*arguments); - // char* operationID_cs = const_cast(operationID.c_str()); - // char* fileInfo_cs = const_cast(fileInfo.c_str()); - // uploadFileResult = result; - // upload_file(_im_manager_listener.onUploadFile, operationID_cs, fileInfo_cs, _im_manager_listener.uploadCallback); - // } - // else { - // result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); - // } + if (arguments) { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + auto id = zego_value_get_string(arguments->at(flutter::EncodableValue("id"))); + auto fileInfo = map_2_json(*arguments); + char* operationID_cs = const_cast(operationID.c_str()); + char* fileInfo_cs = const_cast(fileInfo.c_str()); + + upload_file(NewBaseCallBack(result), operationID_cs, fileInfo_cs, NewUploadFileListenCallBack(id)); + } + else { + result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); + } } void IMManagerService::uploadLogs( const flutter::EncodableMap *arguments, std::shared_ptr> result) { -// if (arguments) { -// auto operationID = zego_value_get_string( -// arguments->at(flutter::EncodableValue("operationID"))); -// auto line = zego_value_get_int(arguments->at(flutter::EncodableValue("line"))); -// auto ex = zego_value_get_string(arguments->at(flutter::EncodableValue("ex"))); -// char *operationID_cs = const_cast(operationID.c_str()); -// char *ex_cs = const_cast(ex.c_str()); -// -// upload_logs(_im_manager_listener.onUploadLogs, operationID_cs, line, ex_cs); -// -// } else { -// result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); -// } + if (arguments) { + auto operationID = zego_value_get_string( + arguments->at(flutter::EncodableValue("operationID"))); + auto line = zego_value_get_int(arguments->at(flutter::EncodableValue("line"))); + auto ex = zego_value_get_string(arguments->at(flutter::EncodableValue("ex"))); + char *operationID_cs = const_cast(operationID.c_str()); + char *ex_cs = const_cast(ex.c_str()); + + ::upload_logs(NewBaseCallBack(result), operationID_cs, line, ex_cs, NewUploadLogsListenCallBack()); + + } else { + result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); + } } void IMManagerService::logs( const flutter::EncodableMap *arguments, std::shared_ptr> result) { - // if (arguments) { - // auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); - // auto logLevel = zego_value_get_int(arguments->at(flutter::EncodableValue("logLevel"))); - // auto file = zego_value_get_string(arguments->at(flutter::EncodableValue("file"))); - // auto line = zego_value_get_int(arguments->at(flutter::EncodableValue("line"))); - // auto msgs = zego_value_get_string(arguments->at(flutter::EncodableValue("msgs"))); - // auto err = zego_value_get_string(arguments->at(flutter::EncodableValue("err"))); - // auto keyAndValue = zego_value_get_string(arguments->at(flutter::EncodableValue("keyAndValue"))); - // char* operationID_cs = const_cast(operationID.c_str()); - // char* file_cs = const_cast(file.c_str()); - // char* msgs_cs = const_cast(msgs.c_str()); - // char* err_cs = const_cast(err.c_str()); - // char* keyAndValue_cs = const_cast(keyAndValue.c_str()); - // - // auto error = logs(_im_manager_listener.onLogs, 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->Success(NimResult::getSuccessResult()); - // } - // } - // else { - // result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); - // } + if (arguments) { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + auto logLevel = zego_value_get_int(arguments->at(flutter::EncodableValue("logLevel"))); + auto file = zego_value_get_string(arguments->at(flutter::EncodableValue("file"))); + auto line = zego_value_get_int(arguments->at(flutter::EncodableValue("line"))); + auto msgs = zego_value_get_string(arguments->at(flutter::EncodableValue("msgs"))); + auto err = zego_value_get_string(arguments->at(flutter::EncodableValue("err"))); + auto keyAndValue = zego_value_get_string(arguments->at(flutter::EncodableValue("keyAndValue"))); + char* operationID_cs = const_cast(operationID.c_str()); + char* file_cs = const_cast(file.c_str()); + char* msgs_cs = const_cast(msgs.c_str()); + char* err_cs = const_cast(err.c_str()); + char* keyAndValue_cs = const_cast(keyAndValue.c_str()); + + ::logs(NewBaseCallBack(result), operationID_cs, logLevel, file_cs, line, msgs_cs, err_cs, keyAndValue_cs); + + } + else { + result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); + } } void IMManagerService::updateFcmToken( @@ -298,8 +214,8 @@ void IMManagerService::updateFcmToken( auto expireTime = zego_value_get_int(arguments->at(flutter::EncodableValue("expireTime"))); char *operationID_cs = const_cast(operationID.c_str()); char *fcmToken_cs = const_cast(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); } else { result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); @@ -309,31 +225,31 @@ void IMManagerService::updateFcmToken( void IMManagerService::setAppBackgroundStatus( const flutter::EncodableMap *arguments, std::shared_ptr> result) { - if (arguments) { - auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); - auto isBackground = zego_value_get_bool(arguments->at(flutter::EncodableValue("isBackground"))); - char* operationID_cs = const_cast(operationID.c_str()); - NewBaseCallBack(operationID, result); - set_app_background_status(_im_manager_listener.baseCallBack, operationID_cs, isBackground); + if (arguments) { + auto operationID = zego_value_get_string( + arguments->at(flutter::EncodableValue("operationID"))); + auto isBackground = zego_value_get_bool( + arguments->at(flutter::EncodableValue("isBackground"))); + char *operationID_cs = const_cast(operationID.c_str()); - } - else { - result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); - } + set_app_background_status(NewBaseCallBack(result), operationID_cs, isBackground); + + } else { + result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); + } } void IMManagerService::networkStatusChanged( const flutter::EncodableMap *arguments, std::shared_ptr> result) { - if (arguments) { - auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); - char* operationID_cs = const_cast(operationID.c_str()); - NewBaseCallBack(operationID, result); - network_status_changed(_im_manager_listener.baseCallBack, operationID_cs); + if (arguments) { + auto operationID = zego_value_get_string( + arguments->at(flutter::EncodableValue("operationID"))); + char *operationID_cs = const_cast(operationID.c_str()); + network_status_changed(NewBaseCallBack(result), operationID_cs); - } - else { - result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); - } + } else { + result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); + } } diff --git a/windows/src/common/services/IMManager.h b/windows/src/common/services/IMManager.h index 88853b1..8cf9035 100644 --- a/windows/src/common/services/IMManager.h +++ b/windows/src/common/services/IMManager.h @@ -8,11 +8,7 @@ #include "../FLTService.h" #include "Listen.h" -struct IMManagerServiceListener { - CB_I_S onInitSdk; - CB_S_I_S_S baseCallBack; - CB_I_S uploadCallback; -}; + class IMManagerService : public FLTService { public: @@ -67,7 +63,6 @@ class IMManagerService : public FLTService { const flutter::EncodableMap* arguments, std::shared_ptr> result); - IMManagerServiceListener _im_manager_listener; }; diff --git a/windows/src/common/services/Listen.cpp b/windows/src/common/services/Listen.cpp index a8a7b6f..eeb1d83 100644 --- a/windows/src/common/services/Listen.cpp +++ b/windows/src/common/services/Listen.cpp @@ -1,20 +1,621 @@ #include "Listen.h" -#include -std::unordered_map > g_baseCallBackMap; -std::mutex g_baseCallBackMapMutex; +#include "wrapp_cpp_function.inc" +#include "ConstDefine.h" +#include "../FLTService.h" +#include "../ThreadUtil.h" +#include "../json.hpp" +using json = nlohmann::json; -void NewBaseCallBack(std::string opid, - std::shared_ptr > result) { - std::lock_guard lock(g_baseCallBackMapMutex); - g_baseCallBackMap[opid] = std::make_unique(result); +CB_S_I_S_S NewBaseCallBack(std::shared_ptr> result) +{ + + auto t = std::make_shared(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(); + 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())); + data.insert(std::make_pair("num", j.at("num").get())); + 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())); + data.insert(std::make_pair("size", j.at("size").get())); + data.insert(std::make_pair("partHash", j.at("partHash").get())); + 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())); + data.insert(std::make_pair("fileHash", j.at("fileHash").get())); + 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())); + data.insert(std::make_pair("partSize", j.at("partSize").get())); + data.insert(std::make_pair("partHash", j.at("partHash").get())); + 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())); + data.insert(std::make_pair("streamSize", j.at("streamSize").get())); + data.insert(std::make_pair("storageSize", j.at("storageSize").get())); + 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())); + data.insert(std::make_pair("url", j.at("url").get())); + data.insert(std::make_pair("type", j.at("fileSize").get())); + 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(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())); + data.insert(std::make_pair("size", j.at("size").get())); + 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(); + 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) { - std::lock_guard lock(g_baseCallBackMapMutex); - auto it = g_baseCallBackMap.find(std::string(opid)); - if (it != g_baseCallBackMap.end()) { - auto ctx = std::move(it->second); //unique_ptr - ctx->HandleCallback(opid, errCode, errMsg, msg); + arguments.insert(std::make_pair("type", "onSelfInfoUpdated")); + arguments.insert(std::make_pair("data", msg)); + break; + case ConstDefine::USER_STATUS_CHANGED: + arguments.insert(std::make_pair("type", "onUserStatusChanged")); + arguments.insert(std::make_pair("data", msg)); + break; } -} \ No newline at end of file + notifyEvent("userListener", arguments); +} + +CB_I_S NewUserListenCallBack() +{ + auto t = std::make_shared(); + 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(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(msg); + auto errCodeCopy = state; + auto errMsgCopy = std::make_shared(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> result, std::string clientMsgID) +{ + auto t = std::make_shared(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(); + 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(); + 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())); + 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())); + 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())); + 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())); + 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())); + break; + } + notifyEvent("conversationListener", arguments); +} + +CB_I_S NewConversationListenerCallBack() +{ + auto t = std::make_shared(); + 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(); + 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(); + auto f = [t](int state, const std::string &msg) + { + t->HandleCallback(state, msg); + }; + + return _wrapper_cpp_function(f); +} diff --git a/windows/src/common/services/Listen.h b/windows/src/common/services/Listen.h index a66323c..3de6d56 100644 --- a/windows/src/common/services/Listen.h +++ b/windows/src/common/services/Listen.h @@ -1,58 +1,203 @@ #ifndef LISTEN_H #define LISTEN_H -#include #include "flutter/encodable_value.h" #include "flutter/method_result.h" +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../ThreadUtil.h" + +class BaseCallBack +{ +public: + BaseCallBack(std::shared_ptr> result_ptr) + : result(result_ptr) + { + } + std::shared_ptr> 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(data); + auto errCodeCopy = errCode; + auto errMsgCopy = std::make_shared(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> result); -class BaseCallBack { +///////////////////////////////////////////////////////////////////////////////////////////////// +class InitListenCallBack +{ public: - BaseCallBack(std::shared_ptr> result) { - this->result = result; - } + InitListenCallBack() + { + } + + void HandleCallback(int state, const std::string &msg); +}; - std::shared_ptr> result = nullptr; +CB_I_S NewInitListenCallBack(); +///////////////////////////////////////////////////////////////////////////////////////////////// - void HandleCallback(char* opid, int errCode, char* errMsg, char* msg) { - if (result == nullptr) { - return; - } +class UploadFileListenCallBack +{ +public: + UploadFileListenCallBack(std::string id) : id(id) + { + } + std::string id = ""; - if (errCode == 0) { - result->Success(flutter::EncodableValue(std::string(msg))); - } - else { - result->Error(std::to_string(errCode), std::string(errMsg), flutter::EncodableValue(std::string(msg))); - } - } + void HandleCallback(int state, const std::string &msg); }; -// 全局映射表 -extern std::unordered_map> g_baseCallBackMap; -extern std::mutex g_baseCallBackMapMutex; +CB_I_S NewUploadFileListenCallBack(std::string id); + +///////////////////////////////////////////////////////////////////////////////////////////////// +class UploadLogsListenCallBack +{ +public: + UploadLogsListenCallBack() + { + } -void NewBaseCallBack(std::string opid, std::shared_ptr> result); -void CallBaseCallBack(char* opid, int errCode, char* errMsg, char* msg); + void HandleCallback(int state, const std::string &msg); +}; +CB_I_S NewUploadLogsListenCallBack(); +///////////////////////////////////////////////////////////////////////////////////////////////// -//todo 没想好怎么实现 -class uploadFileCallBack { +class UserListenCallBack +{ public: - uploadFileCallBack(std::string id) { - this->id = id; + UserListenCallBack() + { } + void HandleCallback(int state, const std::string &msg); +}; + +CB_I_S NewUserListenCallBack(); +///////////////////////////////////////////////////////////////////////////////////////////////// + +class AdvancedMsgListenCallBack +{ +public: + AdvancedMsgListenCallBack(std::string id) : id(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> result_ptr, std::string clientMsgID) : result(result_ptr), clientMsgID(clientMsgID) + { + } + std::string clientMsgID = ""; + std::shared_ptr> 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> 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 \ No newline at end of file diff --git a/windows/src/common/services/MessageManager.cpp b/windows/src/common/services/MessageManager.cpp index e69de29..62cc449 100644 --- a/windows/src/common/services/MessageManager.cpp +++ b/windows/src/common/services/MessageManager.cpp @@ -0,0 +1,894 @@ +#include "MessageManager.h" +#include +#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> 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> 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> 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(operationID.c_str()); + char* message_cs = const_cast(message.c_str()); + char* userID_cs = const_cast(userID.c_str()); + char* groupID_cs = const_cast(groupID.c_str()); + char* channelID_cs = const_cast(channelID.c_str()); + char* offlinePushInfo_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(conversationID.c_str()); + char* clientMsgID_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(conversationID.c_str()); + char* clientMsgID_cs = const_cast(clientMsgID.c_str()); + char* message_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(conversationID.c_str()); + char* clientMsgID_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(conversationID.c_str()); + char* clientMsgID_cs = const_cast(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> result) { + if (arguments) { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char* operationID_cs = const_cast(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> result) { + if (arguments) { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char* operationID_cs = const_cast(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> 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(operationID.c_str()); + char* message_cs = const_cast(message.c_str()); + char* receiverID_cs = const_cast(receiverID.c_str()); + char* senderID_cs = const_cast(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> 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(operationID.c_str()); + char* message_cs = const_cast(message.c_str()); + char* groupID_cs = const_cast(groupID.c_str()); + char* channelID_cs = const_cast(channelID.c_str()); + char* senderID_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(conversationID.c_str()); + char* messageIDList_cs = const_cast(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> 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(operationID.c_str()); + char* userID_cs = const_cast(userID.c_str()); + char* msgTip_cs = const_cast(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> 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(operationID.c_str()); + char* text_cs = const_cast(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> 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(operationID.c_str()); + char* text_cs = const_cast(text.c_str()); + char* atUserIDList_cs = const_cast(atUserIDList.c_str()); + char* atUserInfoList_cs = const_cast(atUserInfoList.c_str()); + char* quoteMessage_cs = const_cast(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> 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(operationID.c_str()); + char* imagePath_cs = const_cast(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> 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(operationID.c_str()); + char* imagePath_cs = const_cast(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> 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(operationID.c_str()); + char* soundPath_cs = const_cast(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> 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(operationID.c_str()); + char* soundPath_cs = const_cast(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> 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(operationID.c_str()); + char* videoPath_cs = const_cast(videoPath.c_str()); + char* videoType_cs = const_cast(videoType.c_str()); + char* snapshotPath_cs = const_cast(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> 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(operationID.c_str()); + char* videoPath_cs = const_cast(videoPath.c_str()); + char* videoType_cs = const_cast(videoType.c_str()); + char* snapshotPath_cs = const_cast(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> 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(operationID.c_str()); + char* filePath_cs = const_cast(filePath.c_str()); + char* fileName_cs = const_cast(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> 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(operationID.c_str()); + char* filePath_cs = const_cast(filePath.c_str()); + char* fileName_cs = const_cast(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> 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(operationID.c_str()); + char* messageList_cs = const_cast(messageList.c_str()); + char* title_cs = const_cast(title.c_str()); + char* summaryList_cs = const_cast(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> 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(operationID.c_str()); + char* message_cs = const_cast(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> 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(operationID.c_str()); + char* description_cs = const_cast(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> 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(operationID.c_str()); + char* data_cs = const_cast(data.c_str()); + char* extension_cs = const_cast(extension.c_str()); + char* description_cs = const_cast(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> 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(operationID.c_str()); + char* quoteText_cs = const_cast(quoteText.c_str()); + char* quoteMessage_cs = const_cast(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> 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(operationID.c_str()); + char* cardMessage_cs = const_cast(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> 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(operationID.c_str()); + char* data_cs = const_cast(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> 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(operationID.c_str()); + char* text_cs = const_cast(text.c_str()); + char* richMessageInfoList_cs = const_cast(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> 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(operationID.c_str()); + char* quoteText_cs = const_cast(quoteText.c_str()); + char* quoteMessage_cs = const_cast(quoteMessage.c_str()); + char* richMessageInfoList_cs = const_cast(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> 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(operationID.c_str()); + char* filter_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(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> 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(operationID.c_str()); + char* params_cs = const_cast(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> 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(operationID.c_str()); + char* params_cs = const_cast(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> 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(operationID.c_str()); + char* searchParams_cs = const_cast(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> 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(operationID.c_str()); + char* conversationID_cs = const_cast(conversationID.c_str()); + char* clientMsgID_cs = const_cast(clientMsgID.c_str()); + char* localEx_cs = const_cast(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> 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(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> 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(operationID.c_str()); + char* message_cs = const_cast(message.c_str()); + char* userID_cs = const_cast(userID.c_str()); + char* groupID_cs = const_cast(groupID.c_str()); + char* channelId_cs = const_cast(channelId.c_str()); + char* offlinePushInfo_cs = const_cast(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> 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(operationID.c_str()); + char* sourcePath_cs = const_cast(sourcePath.c_str()); + char* sourcePicture_cs = const_cast(sourcePicture.c_str()); + char* bigPicture_cs = const_cast(bigPicture.c_str()); + char* snapshotPicture_cs = const_cast(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> 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(operationID.c_str()); + char* soundElem_cs = const_cast(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> 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(operationID.c_str()); + char* videoElem_cs = const_cast(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> 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(operationID.c_str()); + char* fileElem_cs = const_cast(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> 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(operationID.c_str()); + char* message_cs = const_cast(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> result) { + if (arguments) { + set_custom_business_listener(NewCustomBusinessListenCallBack()); + result->Success(flutter::EncodableValue()); + } else { + result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); + } +} \ No newline at end of file diff --git a/windows/src/common/services/MessageManager.h b/windows/src/common/services/MessageManager.h index e69de29..9115ff1 100644 --- a/windows/src/common/services/MessageManager.h +++ b/windows/src/common/services/MessageManager.h @@ -0,0 +1,159 @@ +#ifndef MESSAGE_MANAGER_SERVICE_H +#define MESSAGE_MANAGER_SERVICE_H +#include "../FLTService.h" +#include "Listen.h" +#include +#include +#include + +class MessageManagerService : public FLTService { +public: + MessageManagerService(); + + void onMethodCalled( + const std::string& method, + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + + // Method handlers + void setAdvancedMsgListener( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void sendMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void revokeMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void editMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void deleteMessageFromLocalStorage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void deleteMessageFromLocalAndSvr( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void deleteAllMsgFromLocal( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void deleteAllMsgFromLocalAndSvr( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void insertSingleMessageToLocalStorage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void insertGroupMessageToLocalStorage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void markMessagesAsReadByMsgID( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void typingStatusUpdate( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createTextMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createTextAtMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createImageMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createImageMessageFromFullPath( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createSoundMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createSoundMessageFromFullPath( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createVideoMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createVideoMessageFromFullPath( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createFileMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createFileMessageFromFullPath( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createMergerMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createForwardMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createLocationMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createCustomMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createQuoteMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createCardMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createFaceMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createAdvancedTextMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createAdvancedQuoteMessage( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void searchLocalMessages( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void clearConversationAndDeleteAllMsg( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getAdvancedHistoryMessageList( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getAdvancedHistoryMessageListReverse( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void findMessageList( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void setMessageLocalEx( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void setAppBadge( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void sendMessageNotOss( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createImageMessageByURL( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createSoundMessageByURL( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createVideoMessageByURL( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void createFileMessageByURL( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void fetchSurroundingMessages( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void setCustomBusinessListener( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + +private: + std::string m_serviceName; +}; + +#endif // MESSAGE_MANAGER_SERVICE_H \ No newline at end of file diff --git a/windows/src/common/services/UserManager.cpp b/windows/src/common/services/UserManager.cpp new file mode 100644 index 0000000..005137a --- /dev/null +++ b/windows/src/common/services/UserManager.cpp @@ -0,0 +1,150 @@ +#include "UserManager.h" +#include +#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> 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> 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> 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(operationID.c_str()); + char* userIDList_cs = const_cast(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> 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(operationID.c_str()); + char* userInfo_cs = const_cast(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> result) { + if (arguments) { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char* operationID_cs = const_cast(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> 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(operationID.c_str()); + char* userIDs_cs = const_cast(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> 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(operationID.c_str()); + char* userIDs_cs = const_cast(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> result) { + if (arguments) { + auto operationID = zego_value_get_string(arguments->at(flutter::EncodableValue("operationID"))); + char* operationID_cs = const_cast(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> 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(operationID.c_str()); + char* userIDs_cs = const_cast(userIDs.c_str()); + + get_user_status(NewBaseCallBack(result), operationID_cs, userIDs_cs); + } else { + result->Error("INVALID_ARGUMENT", "Arguments cannot be null"); + } +} + + + diff --git a/windows/src/common/services/UserManager.h b/windows/src/common/services/UserManager.h new file mode 100644 index 0000000..14d5c76 --- /dev/null +++ b/windows/src/common/services/UserManager.h @@ -0,0 +1,49 @@ +#ifndef USER_MANAGER_SERVICE_H +#define USER_MANAGER_SERVICE_H + +#include "../FLTService.h" +#include "Listen.h" +#include +#include +#include + +class UserManagerService : public FLTService { +public: + UserManagerService(); + + void onMethodCalled( + const std::string& method, + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + + // Method handlers + void setUserListener( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getUsersInfo( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void setSelfInfo( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getSelfUserInfo( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void subscribeUsersStatus( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void unsubscribeUsersStatus( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getSubscribeUsersStatus( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + void getUserStatus( + const flutter::EncodableMap* arguments, + std::shared_ptr> result); + +private: + std::string m_serviceName; +}; + +#endif // USER_MANAGER_SERVICE_H \ No newline at end of file