diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/listener/AdvancedMsgListener.java b/android/src/main/java/io/openim/flutter_openim_sdk/listener/AdvancedMsgListener.java index 2fdd9c8..92f1ee4 100644 --- a/android/src/main/java/io/openim/flutter_openim_sdk/listener/AdvancedMsgListener.java +++ b/android/src/main/java/io/openim/flutter_openim_sdk/listener/AdvancedMsgListener.java @@ -15,7 +15,6 @@ public class AdvancedMsgListener implements OnAdvancedMsgListener { @Override public void onRecvC2CReadReceipt(String s) { - System.out.println("native onRecvC2CReadReceipt:"+ s); values.put("message", s); CommonUtil.emitEvent("advancedMsgListener", "onRecvC2CReadReceipt", values); } diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java b/android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java index 8a64f05..a6a3c74 100644 --- a/android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java +++ b/android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java @@ -1,7 +1,9 @@ package io.openim.flutter_openim_sdk.manager; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @@ -15,7 +17,51 @@ import open_im_sdk.Open_im_sdk; public class MessageManager { private final static String KEY_ID = "id"; - private final static Map listeners = new HashMap<>(); + // private final static Map listeners = new HashMap<>(); + private static boolean initializedListener = false; + private final static Map listeners = new ConcurrentHashMap<>(); + + private final static OnAdvancedMsgListener sdkMsgListener = new OnAdvancedMsgListener() { + @Override + public void onRecvC2CReadReceipt(String s) { + for (AdvancedMsgListener l : listeners.values()) { + l.onRecvC2CReadReceipt(s); + } + } + + @Override + public void onRecvMessageRevoked(String s) { + for (AdvancedMsgListener l : listeners.values()) { + l.onRecvMessageRevoked(s); + } + } + + @Override + public void onRecvNewMessage(String s) { + for (AdvancedMsgListener l : listeners.values()) { + l.onRecvNewMessage(s); + } + } + }; + + public void addAdvancedMsgListener(MethodCall methodCall, MethodChannel.Result result) { + String key = methodCall.argument(KEY_ID); + listeners.put(key, new AdvancedMsgListener(key)); + if (!initializedListener) { + initializedListener = true; + Open_im_sdk.addAdvancedMsgListener(sdkMsgListener); + } + } + + public void removeAdvancedMsgListener(MethodCall methodCall, MethodChannel.Result result) { + String key = methodCall.argument(KEY_ID); + listeners.remove(key); + if (listeners.isEmpty()) { + initializedListener = false; + Open_im_sdk.removeAdvancedMsgListener(sdkMsgListener); + } + } +/* public void addAdvancedMsgListener(MethodCall methodCall, MethodChannel.Result result) { String key = methodCall.argument(KEY_ID); @@ -32,6 +78,8 @@ public class MessageManager { Open_im_sdk.removeAdvancedMsgListener(listener); } +*/ + public void sendMessage(MethodCall methodCall, MethodChannel.Result result) { MsgSendProgressListener listener = new MsgSendProgressListener(result, methodCall); Open_im_sdk.sendMessage(listener,