2525import java .io .File ;
2626import java .io .FileNotFoundException ;
2727import java .util .ArrayList ;
28+ import java .util .HashSet ;
2829import java .util .List ;
30+ import java .util .Set ;
2931
3032
33+ import cn .jpush .im .android .api .ChatRoomManager ;
3134import cn .jpush .im .android .api .ContactManager ;
3235import cn .jpush .im .android .api .JMessageClient ;
3336import cn .jpush .im .android .api .callback .CreateGroupCallback ;
4346import cn .jpush .im .android .api .callback .GetUserInfoListCallback ;
4447import cn .jpush .im .android .api .callback .IntegerCallback ;
4548import cn .jpush .im .android .api .callback .ProgressUpdateCallback ;
49+ import cn .jpush .im .android .api .callback .RequestCallback ;
4650import cn .jpush .im .android .api .content .CustomContent ;
4751import cn .jpush .im .android .api .content .FileContent ;
4852import cn .jpush .im .android .api .content .ImageContent ;
5155import cn .jpush .im .android .api .content .TextContent ;
5256import cn .jpush .im .android .api .content .VoiceContent ;
5357import cn .jpush .im .android .api .enums .ContentType ;
58+ import cn .jpush .im .android .api .event .ChatRoomMessageEvent ;
5459import cn .jpush .im .android .api .event .ContactNotifyEvent ;
5560import cn .jpush .im .android .api .event .ConversationRefreshEvent ;
5661import cn .jpush .im .android .api .event .LoginStateChangeEvent ;
5762import cn .jpush .im .android .api .event .MessageEvent ;
5863import cn .jpush .im .android .api .event .MessageRetractEvent ;
5964import cn .jpush .im .android .api .event .NotificationClickEvent ;
6065import cn .jpush .im .android .api .event .OfflineMessageEvent ;
66+ import cn .jpush .im .android .api .model .ChatRoomInfo ;
6167import cn .jpush .im .android .api .model .Conversation ;
6268import cn .jpush .im .android .api .model .GroupInfo ;
6369import cn .jpush .im .android .api .model .Message ;
@@ -78,6 +84,7 @@ public class JMessageModule extends ReactContextBaseJavaModule {
7884 private static final String RETRACT_MESSAGE_EVENT = "JMessage.MessageRetract" ; // 消息撤回事件
7985 private static final String CONTACT_NOTIFY_EVENT = "JMessage.ContactNotify" ; // 收到好友请求消息事件
8086 private static final String UPLOAD_PROGRESS_EVENT = "JMessage.UploadProgress" ; // 上传(图片,文件等)进度事件
87+ private static final String RECEIVE_CHAT_ROOM_MSG_EVENT = "JMessage.ReceiveChatRoomMsgEvent" ; // 收到聊天室消息事件
8188 private static final int ERR_CODE_PARAMETER = 1 ;
8289 private static final int ERR_CODE_CONVERSATION = 2 ;
8390 private static final int ERR_CODE_MESSAGE = 3 ;
@@ -1382,7 +1389,7 @@ public void setConversationExtras(ReadableMap map, Callback success, Callback fa
13821389 ReadableMap extraMap = map .getMap (Constant .EXTRAS );
13831390 ReadableMapKeySetIterator iterator = extraMap .keySetIterator ();
13841391 JsonObject jsonObject = new JsonObject ();
1385- while (iterator .hasNextKey ()) {
1392+ while (iterator .hasNextKey ()) {
13861393 String key = iterator .nextKey ();
13871394 jsonObject .addProperty (key , extraMap .getString (key ));
13881395 }
@@ -1447,6 +1454,137 @@ public void gotResult(int status, String desc) {
14471454 }
14481455 }
14491456
1457+ /**
1458+ * 查询当前应用 AppKey 下的聊天室信息
1459+ *
1460+ * @param param 包含起始位置,获取个数
1461+ * @param success 成功回调
1462+ * @param fail 失败回调
1463+ */
1464+ @ ReactMethod
1465+ public void getChatRoomListByApp (ReadableMap param , final Callback success , final Callback fail ) {
1466+ try {
1467+ int start = param .getInt ("start" );
1468+ int count = param .getInt ("count" );
1469+ ChatRoomManager .getChatRoomListByApp (start , count , new RequestCallback <List <ChatRoomInfo >>() {
1470+ @ Override
1471+ public void gotResult (int status , String desc , List <ChatRoomInfo > chatRoomInfos ) {
1472+ mJMessageUtils .handleCallbackWithArray (status , desc , success , fail ,
1473+ ResultUtils .toJSArray (chatRoomInfos , fail ));
1474+ }
1475+ });
1476+ } catch (Exception e ) {
1477+ e .printStackTrace ();
1478+ mJMessageUtils .handleError (fail , ERR_CODE_PARAMETER , ERR_MSG_PARAMETER );
1479+ }
1480+ }
1481+
1482+ /**
1483+ * 获取当前用户所加入的所有聊天室信息
1484+ *
1485+ * @param success 成功回调
1486+ * @param fail 失败回调
1487+ */
1488+ @ ReactMethod
1489+ public void getChatRoomListByUser (final Callback success , final Callback fail ) {
1490+ ChatRoomManager .getChatRoomListByUser (new RequestCallback <List <ChatRoomInfo >>() {
1491+ @ Override
1492+ public void gotResult (int status , String desc , List <ChatRoomInfo > list ) {
1493+ mJMessageUtils .handleCallbackWithArray (status , desc , success , fail , ResultUtils .toJSArray (list , fail ));
1494+ }
1495+ });
1496+ }
1497+
1498+ /**
1499+ * 查询指定 roomId 聊天室信息
1500+ * @param map 包含待查询 roomId
1501+ * @param success 成功回调
1502+ * @param fail 失败回调
1503+ */
1504+ @ ReactMethod
1505+ public void getChatRoomInfos (ReadableMap map , final Callback success , final Callback fail ) {
1506+ try {
1507+ ReadableArray array = map .getArray (Constant .ROOM_IDS );
1508+ Set <Long > idSet = new HashSet <>();
1509+ for (int i =0 ; i < array .size () -1 ; i ++) {
1510+ long id = Double .valueOf (array .getDouble (i )).longValue ();
1511+ idSet .add (id );
1512+ }
1513+ ChatRoomManager .getChatRoomInfos (idSet , new RequestCallback <List <ChatRoomInfo >>() {
1514+ @ Override
1515+ public void gotResult (int status , String desc , List <ChatRoomInfo > list ) {
1516+ mJMessageUtils .handleCallbackWithArray (status , desc , success , fail , ResultUtils .toJSArray (list , fail ));
1517+ }
1518+ });
1519+ } catch (Exception e ) {
1520+ e .printStackTrace ();
1521+ mJMessageUtils .handleError (fail , ERR_CODE_PARAMETER , ERR_MSG_PARAMETER );
1522+ }
1523+ }
1524+
1525+ /**
1526+ * 进入聊天室,进入后才能收到聊天室信息及发言
1527+ * @param roomId 聊天室 id
1528+ * @param success 成功回调
1529+ * @param fail 失败回调
1530+ */
1531+ @ ReactMethod
1532+ public void enterChatRoom (long roomId , final Callback success , final Callback fail ) {
1533+ ChatRoomManager .enterChatRoom (roomId , new RequestCallback <Conversation >() {
1534+ @ Override
1535+ public void gotResult (int status , String desc , Conversation conversation ) {
1536+ mJMessageUtils .handleCallbackWithObject (status , desc , success , fail , ResultUtils .toJSObject (conversation ));
1537+ }
1538+ });
1539+ }
1540+
1541+ /**
1542+ * 离开聊天室
1543+ * @param roomId 聊天室 id
1544+ * @param success 成功回调
1545+ * @param fail 失败回调
1546+ */
1547+ @ ReactMethod
1548+ public void leaveChatRoom (long roomId , final Callback success , final Callback fail ) {
1549+ ChatRoomManager .leaveChatRoom (roomId , new BasicCallback () {
1550+ @ Override
1551+ public void gotResult (int i , String s ) {
1552+ mJMessageUtils .handleCallback (i , s , success , fail );
1553+ }
1554+ });
1555+ }
1556+
1557+ /**
1558+ * 从本地获取用户的聊天室会话列表,没有则返回为空的列表
1559+ * @param success 成功回调
1560+ */
1561+ @ ReactMethod
1562+ public void getChatRoomConversationList (Callback success ) {
1563+ List <Conversation > list = JMessageClient .getChatRoomConversationList ();
1564+ success .invoke (ResultUtils .toJSArray (list ));
1565+ }
1566+
1567+ /**
1568+ * 删除聊天室会话,同时删除本地相关缓存文件。成功返回 true,失败返回 false
1569+ * @param roomId 聊天室 id
1570+ */
1571+ @ ReactMethod
1572+ public void deleteChatRoomConversation (long roomId , Callback success ) {
1573+ success .invoke (JMessageClient .deleteChatRoomConversation (roomId ));
1574+ }
1575+
1576+ /**
1577+ * 创建聊天室会话,如果本地已存在,则不会重新创建,直接返回该会话
1578+ * @param roomId 聊天室 id
1579+ */
1580+ @ ReactMethod
1581+ public void createChatRoomConversation (long roomId , Callback success ) {
1582+ Conversation conversation = Conversation .createChatRoomConversation (roomId );
1583+ success .invoke (ResultUtils .toJSObject (conversation ));
1584+ }
1585+
1586+
1587+
14501588 public void onEvent (LoginStateChangeEvent event ) {
14511589 Log .d (TAG , "登录状态改变事件:event = " + event .toString ());
14521590 WritableMap map = Arguments .createMap ();
@@ -1576,4 +1714,15 @@ public void onComplete(int status, String desc, File file) {
15761714 }
15771715 }
15781716 }
1717+
1718+ /**
1719+ * 聊天室消息事件
1720+ * @param event {@link ChatRoomMessageEvent}
1721+ */
1722+ public void onEventMainThread (ChatRoomMessageEvent event ) {
1723+ List <Message > list = event .getMessages ();
1724+ Log .d (TAG , "收到聊天室消息" );
1725+ getReactApplicationContext ().getJSModule (DeviceEventManagerModule .RCTDeviceEventEmitter .class )
1726+ .emit (RECEIVE_MSG_EVENT , ResultUtils .toJSArray (list ));
1727+ }
15791728}
0 commit comments