Skip to content

Commit 2451a27

Browse files
KenChoiKenChoi
authored andcommitted
add ChatRoom API
1 parent 506f73d commit 2451a27

File tree

8 files changed

+327
-8
lines changed

8 files changed

+327
-8
lines changed
-1.33 MB
Binary file not shown.
1.43 MB
Binary file not shown.

android/src/io/jchat/android/Constant.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ public class Constant {
88
public static final String OLD_PWD = "oldPwd";
99
public static final String NEW_PWD = "newPwd";
1010
public static final String APP_KEY = "appKey";
11+
12+
/**
13+
* UserInfo
14+
*/
1115
public static final String NICKNAME = "nickname";
1216
public static final String GENDER = "gender";
1317
public static final String AVATAR_THUMB_PATH = "avatarThumbPath";
@@ -20,6 +24,10 @@ public class Constant {
2024
public static final String IS_NO_DISTURB = "isNoDisturb";
2125
public static final String IS_IN_BLACKLIST = "isInBlackList";
2226
public static final String IS_FRIEND = "isFriend";
27+
28+
/**
29+
* Conversation
30+
*/
2331
public static final String TYPE_USER = "user";
2432
public static final String TYPE_GROUP = "group";
2533
public static final String TYPE_SINGLE = "single";
@@ -38,6 +46,10 @@ public class Constant {
3846
public static final String LATEST_MESSAGE = "latestMessage";
3947
public static final String UNREAD_COUNT = "unreadCount";
4048
public static final String CONVERSATION_TYPE = "conversationType";
49+
50+
/**
51+
* Message
52+
*/
4153
public static final String TARGET = "target";
4254
public static final String TYPE = "type";
4355
static final String MESSAGE_TYPE = "messageType";
@@ -78,4 +90,12 @@ public class Constant {
7890
static final String RETRACT_MESSAGE = "retractedMessage";
7991
static final String MESSAGE_ARRAY = "messageArray";
8092
static final String PROGRESS = "progress";
93+
public static final String UNRECEIPT_COUNT = "unreceiptCount";
94+
/**
95+
* ChatRoom
96+
*/
97+
public static final String ROOM_ID = "roomId";
98+
public static final String ROOM_IDS = "roomIds";
99+
public static final String ROOM_NAME = "roomName";
100+
public static final String TOTAL_MEMBER_COUNT = "totalMemberCount";
81101
}

android/src/io/jchat/android/JMessageModule.java

Lines changed: 150 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,12 @@
2525
import java.io.File;
2626
import java.io.FileNotFoundException;
2727
import java.util.ArrayList;
28+
import java.util.HashSet;
2829
import java.util.List;
30+
import java.util.Set;
2931

3032

33+
import cn.jpush.im.android.api.ChatRoomManager;
3134
import cn.jpush.im.android.api.ContactManager;
3235
import cn.jpush.im.android.api.JMessageClient;
3336
import cn.jpush.im.android.api.callback.CreateGroupCallback;
@@ -43,6 +46,7 @@
4346
import cn.jpush.im.android.api.callback.GetUserInfoListCallback;
4447
import cn.jpush.im.android.api.callback.IntegerCallback;
4548
import cn.jpush.im.android.api.callback.ProgressUpdateCallback;
49+
import cn.jpush.im.android.api.callback.RequestCallback;
4650
import cn.jpush.im.android.api.content.CustomContent;
4751
import cn.jpush.im.android.api.content.FileContent;
4852
import cn.jpush.im.android.api.content.ImageContent;
@@ -51,13 +55,15 @@
5155
import cn.jpush.im.android.api.content.TextContent;
5256
import cn.jpush.im.android.api.content.VoiceContent;
5357
import cn.jpush.im.android.api.enums.ContentType;
58+
import cn.jpush.im.android.api.event.ChatRoomMessageEvent;
5459
import cn.jpush.im.android.api.event.ContactNotifyEvent;
5560
import cn.jpush.im.android.api.event.ConversationRefreshEvent;
5661
import cn.jpush.im.android.api.event.LoginStateChangeEvent;
5762
import cn.jpush.im.android.api.event.MessageEvent;
5863
import cn.jpush.im.android.api.event.MessageRetractEvent;
5964
import cn.jpush.im.android.api.event.NotificationClickEvent;
6065
import cn.jpush.im.android.api.event.OfflineMessageEvent;
66+
import cn.jpush.im.android.api.model.ChatRoomInfo;
6167
import cn.jpush.im.android.api.model.Conversation;
6268
import cn.jpush.im.android.api.model.GroupInfo;
6369
import 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
}

android/src/io/jchat/android/utils/ResultUtils.java

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.text.TextUtils;
66

77
import com.facebook.react.bridge.Arguments;
8+
import com.facebook.react.bridge.Callback;
89
import com.facebook.react.bridge.ReadableMap;
910
import com.facebook.react.bridge.ReadableMapKeySetIterator;
1011
import com.facebook.react.bridge.WritableArray;
@@ -22,6 +23,7 @@
2223
import java.util.Map;
2324

2425
import cn.jpush.im.android.api.JMessageClient;
26+
import cn.jpush.im.android.api.callback.GetUserInfoCallback;
2527
import cn.jpush.im.android.api.content.CustomContent;
2628
import cn.jpush.im.android.api.content.EventNotificationContent;
2729
import cn.jpush.im.android.api.content.FileContent;
@@ -32,6 +34,7 @@
3234
import cn.jpush.im.android.api.content.VoiceContent;
3335
import cn.jpush.im.android.api.enums.ConversationType;
3436
import cn.jpush.im.android.api.enums.MessageDirect;
37+
import cn.jpush.im.android.api.model.ChatRoomInfo;
3538
import cn.jpush.im.android.api.model.Conversation;
3639
import cn.jpush.im.android.api.model.GroupInfo;
3740
import cn.jpush.im.android.api.model.Message;
@@ -140,7 +143,7 @@ public static WritableMap toJSObject(Message msg) {
140143
}
141144

142145
result.putDouble(Constant.CREATE_TIME, msg.getCreateTime());
143-
146+
result.putInt(Constant.UNRECEIPT_COUNT, msg.getUnreceiptCnt());
144147
switch (msg.getContentType()) {
145148
case text:
146149
result.putString(Constant.TYPE, Constant.TEXT);
@@ -240,6 +243,35 @@ public static WritableMap toJSObject(Conversation conversation) {
240243
return map;
241244
}
242245

246+
public static WritableMap toJSObject(ChatRoomInfo chatRoomInfo, final Callback fail) {
247+
final WritableMap map = Arguments.createMap();
248+
try {
249+
map.putDouble(Constant.ROOM_ID, chatRoomInfo.getRoomID());
250+
map.putString(Constant.ROOM_NAME, chatRoomInfo.getName());
251+
map.putString(Constant.APP_KEY, chatRoomInfo.getAppkey());
252+
chatRoomInfo.getOwnerInfo(new GetUserInfoCallback() {
253+
@Override
254+
public void gotResult(int status, String desc, UserInfo userInfo) {
255+
if (status == 0) {
256+
map.putMap(Constant.OWNER, toJSObject(userInfo));
257+
} else {
258+
WritableMap result = Arguments.createMap();
259+
result.putInt(Constant.CODE, status);
260+
result.putString(Constant.DESCRIPTION, desc);
261+
fail.invoke(result);
262+
}
263+
}
264+
});
265+
map.putInt(Constant.MAX_MEMBER_COUNT, chatRoomInfo.getMaxMemberCount());
266+
map.putString(Constant.DESCRIPTION, chatRoomInfo.getDescription());
267+
map.putInt(Constant.TOTAL_MEMBER_COUNT, chatRoomInfo.getTotalMemberCount());
268+
map.putInt(Constant.CREATE_TIME, chatRoomInfo.getCreateTime());
269+
} catch (Exception e) {
270+
e.printStackTrace();
271+
}
272+
return map;
273+
}
274+
243275
public static WritableArray toJSArray(List list) {
244276
WritableArray array = Arguments.createArray();
245277

@@ -260,6 +292,14 @@ public static WritableArray toJSArray(List list) {
260292
return array;
261293
}
262294

295+
public static WritableArray toJSArray(List<ChatRoomInfo> list, Callback fail) {
296+
WritableArray array = Arguments.createArray();
297+
for (ChatRoomInfo chatRoomInfo : list) {
298+
array.pushMap(toJSObject(chatRoomInfo, fail));
299+
}
300+
return array;
301+
}
302+
263303
public static JSONObject toJSObject(String eventName, JSONObject value) {
264304
JSONObject result = new JSONObject();
265305
try {
@@ -270,4 +310,5 @@ public static JSONObject toJSObject(String eventName, JSONObject value) {
270310
}
271311
return result;
272312
}
313+
273314
}

example/android/app/app.iml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,18 +91,17 @@
9191
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
9292
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" />
9393
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
94-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
9594
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
9695
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
9796
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
9897
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
9998
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
100-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/sourceFolderJavaResources" />
10199
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/splits-support" />
102100
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
103101
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/tmp" />
104102
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
105103
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
104+
<excludeFolder url="file://$MODULE_DIR$/build/reports" />
106105
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
107106
</content>
108107
<orderEntry type="jdk" jdkName="Android API 25 Platform (1)" jdkType="Android SDK" />
@@ -115,10 +114,10 @@
115114
<orderEntry type="library" name="com.android.support:support-core-ui-25.3.1" level="project" />
116115
<orderEntry type="library" name="com.android.support:support-compat-25.3.1" level="project" />
117116
<orderEntry type="library" name="com.facebook.fresco:imagepipeline-base-1.3.0" level="project" />
117+
<orderEntry type="library" name="__local_aars__:/Users/caiyg/Desktop/github/jmessage-react-plugin/example/node_modules/jmessage-react-plugin/android/libs/jmessage-android_v2.4.1.jar:unspecified@jar" level="project" />
118118
<orderEntry type="library" name="com.parse.bolts:bolts-tasks:1.4.0@jar" level="project" />
119119
<orderEntry type="library" name="com.google.code.findbugs:jsr305:3.0.0@jar" level="project" />
120120
<orderEntry type="library" name="com.squareup.okhttp3:okhttp-urlconnection:3.6.0@jar" level="project" />
121-
<orderEntry type="library" name="__local_aars__:/Users/caiyg/Desktop/github/jmessage-react-plugin/example/node_modules/jcore-react-native/android/libs/jcore-android-1.1.7.jar:unspecified@jar" level="project" />
122121
<orderEntry type="library" name="cn.jiguang.imui:messagelist-0.5.8" level="project" />
123122
<orderEntry type="library" name="com.facebook.soloader:soloader-0.1.0" level="project" />
124123
<orderEntry type="library" name="com.android.support:support-core-utils-25.3.1" level="project" />
@@ -131,13 +130,13 @@
131130
<orderEntry type="library" name="com.android.support:animated-vector-drawable-25.3.1" level="project" />
132131
<orderEntry type="library" name="com.squareup.okhttp3:okhttp:3.6.0@jar" level="project" />
133132
<orderEntry type="library" name="com.facebook.fresco:fbcore-1.3.0" level="project" />
134-
<orderEntry type="library" name="__local_aars__:/Users/caiyg/Desktop/github/jmessage-react-plugin/example/node_modules/jmessage-react-plugin/android/libs/jmessage-android_v2.3.0.jar:unspecified@jar" level="project" />
135133
<orderEntry type="library" name="com.android.support:transition-25.3.1" level="project" />
136134
<orderEntry type="library" name="com.android.support:design-25.3.1" level="project" />
137135
<orderEntry type="library" name="com.facebook.fresco:drawee-1.3.0" level="project" />
138136
<orderEntry type="library" name="com.facebook.react:react-native-0.51.0" level="project" />
139137
<orderEntry type="library" name="com.facebook.fbui.textlayoutbuilder:staticlayout-proxy:1.0@jar" level="project" />
140138
<orderEntry type="library" name="com.android.support:appcompat-v7-25.3.1" level="project" />
139+
<orderEntry type="library" name="__local_aars__:/Users/caiyg/Desktop/github/jmessage-react-plugin/example/node_modules/jcore-react-native/android/libs/jcore-android-1.1.8.jar:unspecified@jar" level="project" />
141140
<orderEntry type="library" name="org.greenrobot:eventbus:3.0.0@jar" level="project" />
142141
<orderEntry type="library" name="com.android.support:support-vector-drawable-25.3.1" level="project" />
143142
<orderEntry type="library" name="com.facebook.fbui.textlayoutbuilder:textlayoutbuilder-1.0.0" level="project" />

0 commit comments

Comments
 (0)