From 745defb5c3e325072d64274cb7dfe99dc8becb3c Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Wed, 1 Jun 2016 14:56:53 +0800 Subject: [PATCH 01/15] Add delete methods --- ios/RCTRongCloud/RCTRongCloud.m | 39 +++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/ios/RCTRongCloud/RCTRongCloud.m b/ios/RCTRongCloud/RCTRongCloud.m index a74241b..995a5fd 100644 --- a/ios/RCTRongCloud/RCTRongCloud.m +++ b/ios/RCTRongCloud/RCTRongCloud.m @@ -42,7 +42,7 @@ - (instancetype)init { self = [super init]; if (self) { - [[RCIMClient sharedRCIMClient] setReceiveMessageDelegate:self object:nil]; + [[self shareClient] setReceiveMessageDelegate:self object:nil]; _voiceManager = [RCTRongCloudVoiceManager new]; } return self; @@ -50,9 +50,8 @@ - (instancetype)init - (void)dealloc { - RCIMClient* client = [RCIMClient sharedRCIMClient]; - [client disconnect]; - [client setReceiveMessageDelegate:nil object:nil]; + [[self shareClient] disconnect]; + [[self shareClient] setReceiveMessageDelegate:nil object:nil]; } + (void)registerAPI:(NSString *)aString @@ -76,9 +75,13 @@ + (void)setDeviceToken:(NSData *)aToken [[RCIMClient sharedRCIMClient] setDeviceToken:token]; } +-(RCIMClient *) shareClient { + return [RCIMClient sharedRCIMClient]; +} + RCT_EXPORT_METHOD(connect:(NSString *)token resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { - [[RCIMClient sharedRCIMClient] connectWithToken:token success:^(NSString *userId) { + [[self shareClient] connectWithToken:token success:^(NSString *userId) { // Connect 成功 resolve(userId); } error:^(RCConnectErrorCode status) { @@ -94,20 +97,20 @@ + (void)setDeviceToken:(NSData *)aToken // 断开与融云服务器的连接,并不再接收远程推送 RCT_EXPORT_METHOD(logout:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { - [[RCIMClient sharedRCIMClient] logout]; + [[self shareClient] logout]; resolve(nil); } // 断开与融云服务器的连接,但仍然接收远程推送 RCT_EXPORT_METHOD(disconnect:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { - [[RCIMClient sharedRCIMClient] disconnect]; + [[self shareClient] disconnect]; resolve(nil); } RCT_EXPORT_METHOD(getConversationList:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { - NSArray *array = [[RCIMClient sharedRCIMClient] getConversationList:@[@(ConversationType_PRIVATE), + NSArray *array = [[self shareClient] getConversationList:@[@(ConversationType_PRIVATE), @(ConversationType_DISCUSSION), @(ConversationType_GROUP), @(ConversationType_CHATROOM), @@ -124,10 +127,20 @@ + (void)setDeviceToken:(NSData *)aToken resolve(newArray); } +RCT_EXPORT_METHOD(clearConversations: (NSArray *)conversationTypeList) +{ + [[self shareClient] clearConversations:conversationTypeList]; +} + +RCT_EXPORT_METHOD(removeConversation: (RCConversationType)conversationType targetId:(NSString *)targetId) +{ + [[self shareClient] removeConversation:conversationType targetId:targetId]; +} + RCT_EXPORT_METHOD(getLatestMessages: (RCConversationType) type targetId:(NSString*) targetId count:(int) count resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { - NSArray* array = [[RCIMClient sharedRCIMClient] getLatestMessages:type targetId:targetId count:count]; + NSArray* array = [[self shareClient] getLatestMessages:type targetId:targetId count:count]; NSMutableArray* newArray = [NSMutableArray new]; for (RCMessage* msg in array) { @@ -141,8 +154,7 @@ + (void)setDeviceToken:(NSData *)aToken pushContent: (NSString*) pushContent pushData:(NSString*) pushData resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { - RCIMClient* client = [RCIMClient sharedRCIMClient]; - RCMessage* msg = [client sendMessage:type targetId:targetId content:content pushContent:pushContent + RCMessage* msg = [[self shareClient] sendMessage:type targetId:targetId content:content pushContent:pushContent success:^(long messageId){ [_bridge.eventDispatcher sendAppEventWithName:@"msgSendOk" body:@(messageId)]; } error:^(RCErrorCode code, long messageId){ @@ -154,6 +166,11 @@ + (void)setDeviceToken:(NSData *)aToken resolve([self.class _convertMessage:msg]); } +RCT_EXPORT_METHOD(deleteMessages:(NSArray *)messageIds) +{ + [[self shareClient] deleteMessages:messageIds]; +} + RCT_EXPORT_METHOD(canRecordVoice:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { [_voiceManager canRecordVoice:^(NSError *error, NSDictionary *result) { From d40f191cec08fa6036d56ff47cc0dd4ef21db23a Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Thu, 2 Jun 2016 11:28:47 +0800 Subject: [PATCH 02/15] Update index.js --- src/index.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/index.js b/src/index.js index 3d745ea..9e415e7 100644 --- a/src/index.js +++ b/src/index.js @@ -2,7 +2,7 @@ * Created by tdzl2003 on 4/13/16. */ -import {NativeModules, DeviceEventEmitter} from 'react-native'; +import {Alert, NativeModules, NativeAppEventEmitter} from 'react-native'; import EventEmitter from 'react-native/Libraries/vendor/emitter/EventEmitter'; const RongIMLib = NativeModules.RongIMLib; @@ -16,9 +16,6 @@ exports.once = eventEmitter.once.bind(eventEmitter); exports.removeAllListeners = eventEmitter.removeAllListeners.bind(eventEmitter); exports.removeCurrentListener = eventEmitter.removeCurrentListener.bind(eventEmitter); -DeviceEventEmitter.addListener('rongIMMsgRecved', msg => { - if (__DEV__){ - console.log(msg); - } +NativeAppEventEmitter.addListener('rongIMMsgRecved', msg => { eventEmitter.emit('msgRecved', msg); }); From 804ee026fdcc50217e91be9268c875692b750f04 Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Fri, 3 Jun 2016 15:38:45 +0800 Subject: [PATCH 03/15] Update RCTRongCloud.m --- ios/RCTRongCloud/RCTRongCloud.m | 44 +++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/ios/RCTRongCloud/RCTRongCloud.m b/ios/RCTRongCloud/RCTRongCloud.m index 995a5fd..79cd3ac 100644 --- a/ios/RCTRongCloud/RCTRongCloud.m +++ b/ios/RCTRongCloud/RCTRongCloud.m @@ -45,6 +45,9 @@ - (instancetype)init [[self shareClient] setReceiveMessageDelegate:self object:nil]; _voiceManager = [RCTRongCloudVoiceManager new]; } + + [[NSNotificationCenter defaultCenter] addObserver:RCLibDispatchReadReceiptNotification selector:@selector(dispatchReadReceiptNotification:) name:@"dispatchReadReceiptNotification" object:nil]; + return self; } @@ -75,6 +78,11 @@ + (void)setDeviceToken:(NSData *)aToken [[RCIMClient sharedRCIMClient] setDeviceToken:token]; } ++ (void)dispatchReadReceiptNotification:(NSNotification *) notification +{ +// NSLog(@"%@", notification); +} + -(RCIMClient *) shareClient { return [RCIMClient sharedRCIMClient]; } @@ -94,6 +102,13 @@ -(RCIMClient *) shareClient { }]; } +RCT_EXPORT_METHOD(getConnectionStatus:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) +{ + RCConnectionStatus status = [[self shareClient] getConnectionStatus]; + NSLog(@"status: %@", status); + resolve(nil); +} + // 断开与融云服务器的连接,并不再接收远程推送 RCT_EXPORT_METHOD(logout:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { @@ -108,6 +123,12 @@ -(RCIMClient *) shareClient { resolve(nil); } +RCT_EXPORT_METHOD(getTotalUnreadCount:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) +{ + int totalUnreadCount = [[self shareClient] getTotalUnreadCount]; + resolve([NSString stringWithFormat:@"%d", totalUnreadCount]); +} + RCT_EXPORT_METHOD(getConversationList:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { NSArray *array = [[self shareClient] getConversationList:@[@(ConversationType_PRIVATE), @@ -127,6 +148,18 @@ -(RCIMClient *) shareClient { resolve(newArray); } +RCT_EXPORT_METHOD(getConversation:(RCConversationType)conversationType targetId:(NSString *)targetId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) +{ + RCConversation *conv = [[self shareClient] getConversation:conversationType targetId:targetId]; + resolve([self.class _convertConversation:conv]); +} + +RCT_EXPORT_METHOD(sendReadReceiptMessage:(RCConversationType)conversationType targetId:(NSString *)targetId time:(nonnull NSNumber *)time) +{ + //NSLog(@"Long long timestamp %ld", time); + [[self shareClient] sendReadReceiptMessage:conversationType targetId:targetId time:(long long)time]; +} + RCT_EXPORT_METHOD(clearConversations: (NSArray *)conversationTypeList) { [[self shareClient] clearConversations:conversationTypeList]; @@ -137,6 +170,11 @@ -(RCIMClient *) shareClient { [[self shareClient] removeConversation:conversationType targetId:targetId]; } +RCT_EXPORT_METHOD(setMessageReceivedStatus:(long)messageId receivedStatus:(RCReceivedStatus)receivedStatus) +{ + [[self shareClient] setMessageReceivedStatus:messageId receivedStatus:receivedStatus]; +} + RCT_EXPORT_METHOD(getLatestMessages: (RCConversationType) type targetId:(NSString*) targetId count:(int) count resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { @@ -171,6 +209,11 @@ -(RCIMClient *) shareClient { [[self shareClient] deleteMessages:messageIds]; } +RCT_EXPORT_METHOD(clearMessagesUnreadStatus:(RCConversationType)conversationType targetId:(NSString *)targetId) +{ + [[self shareClient] clearMessagesUnreadStatus:conversationType targetId:targetId]; +} + RCT_EXPORT_METHOD(canRecordVoice:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { [_voiceManager canRecordVoice:^(NSError *error, NSDictionary *result) { @@ -227,6 +270,7 @@ - (void)onReceived:(RCMessage *)message left:(int)nLeft object:(id)object { + NSLog(@"onReceived : %@", [self.class _convertMessage:message]); [_bridge.eventDispatcher sendAppEventWithName:@"rongIMMsgRecved" body:[self.class _convertMessage:message]]; } From e635f62f6a688eb10c215a7c1ffb5df25a6a1192 Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Fri, 23 Sep 2016 15:52:10 +0800 Subject: [PATCH 04/15] Update index.js --- src/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/index.js b/src/index.js index 9e415e7..a380bf6 100644 --- a/src/index.js +++ b/src/index.js @@ -5,6 +5,17 @@ import {Alert, NativeModules, NativeAppEventEmitter} from 'react-native'; import EventEmitter from 'react-native/Libraries/vendor/emitter/EventEmitter'; +const ConversationType = { + APP_SERVICE: 'appService', + CHATROOM: 'chatroom', + CUSTOM_SERVICE: 'customerService', + DISCUSSION: 'discussion', + GROUP: 'group', + PRIVATE: 'private', + PUBLISH_SERVICE: 'publishService', + PUSH_SERVICE: 'pushService', + SYSTEM: 'system', +}; const RongIMLib = NativeModules.RongIMLib; const eventEmitter = new EventEmitter(); From 158d337a943d95ac40533a912ca99fd6c6b175d3 Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Fri, 23 Sep 2016 15:53:12 +0800 Subject: [PATCH 05/15] Fix some bug and lib path --- src/index.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/index.js b/src/index.js index a380bf6..bbc8667 100644 --- a/src/index.js +++ b/src/index.js @@ -3,7 +3,7 @@ */ import {Alert, NativeModules, NativeAppEventEmitter} from 'react-native'; -import EventEmitter from 'react-native/Libraries/vendor/emitter/EventEmitter'; +import EventEmitter from 'react-native/Libraries/EventEmitter/EventEmitter'; const ConversationType = { APP_SERVICE: 'appService', @@ -11,15 +11,16 @@ const ConversationType = { CUSTOM_SERVICE: 'customerService', DISCUSSION: 'discussion', GROUP: 'group', - PRIVATE: 'private', - PUBLISH_SERVICE: 'publishService', - PUSH_SERVICE: 'pushService', - SYSTEM: 'system', + PRIVATE: 'private', + PUBLISH_SERVICE: 'publishService', + PUSH_SERVICE: 'pushService', + SYSTEM: 'system', }; const RongIMLib = NativeModules.RongIMLib; const eventEmitter = new EventEmitter(); -Object.assign(exports, RongIMLib); + +export default Object.assign(exports, RongIMLib, ConversationType); exports.eventEmitter = eventEmitter; exports.addListener = eventEmitter.addListener.bind(eventEmitter); From 3a8bff7baa727e52ab43bd1bcafc3ba4774aeda5 Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Tue, 27 Sep 2016 10:24:27 +0800 Subject: [PATCH 06/15] Add more column to conversation data structure --- .../src/main/java/io/rong/imlib/ipc/Utils.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/io/rong/imlib/ipc/Utils.java b/android/src/main/java/io/rong/imlib/ipc/Utils.java index 07f5310..a7d279d 100644 --- a/android/src/main/java/io/rong/imlib/ipc/Utils.java +++ b/android/src/main/java/io/rong/imlib/ipc/Utils.java @@ -8,10 +8,9 @@ import com.facebook.react.bridge.WritableMap; import org.w3c.dom.Text; - import java.util.List; - import io.rong.imlib.RongIMClient; + import io.rong.imlib.model.Conversation; import io.rong.imlib.model.Message; import io.rong.imlib.model.MessageContent; @@ -22,6 +21,7 @@ /** * Created by tdzl2003 on 4/13/16. + * Updated by mot */ public class Utils { @@ -97,6 +97,17 @@ private static WritableMap convertConversation(Conversation conv) { ret.putString("targetId", conv.getTargetId()); ret.putInt("unreadCount", conv.getUnreadMessageCount()); ret.putMap("lastMessage", convertMessageContent(conv.getLatestMessage())); + + ret.putBoolean("isTop", conv.isTop()); + ret.putInt("receivedStatus", conv.getReceivedStatus().getFlag()); + ret.putInt("sentStatus", conv.getSentStatus().getValue()); + ret.putDouble("receivedTime", conv.getReceivedTime()); + ret.putDouble("sentTime", conv.getSentTime()); + ret.putString("draft", conv.getDraft()); + ret.putString("objectName", conv.getObjectName()); + + ret.putString("senderUserId", conv.getSenderUserId()); + ret.putInt("lastestMessageId", conv.getLatestMessageId()); return ret; } From 43e92150098d5f1a7063ed99ab8d748c9eb29085 Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Tue, 27 Sep 2016 14:25:28 +0800 Subject: [PATCH 07/15] Patch ios message/conversation --- ios/RCTRongCloud/RCTRongCloud.m | 39 +++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/ios/RCTRongCloud/RCTRongCloud.m b/ios/RCTRongCloud/RCTRongCloud.m index 79cd3ac..6e18c68 100644 --- a/ios/RCTRongCloud/RCTRongCloud.m +++ b/ios/RCTRongCloud/RCTRongCloud.m @@ -182,6 +182,7 @@ -(RCIMClient *) shareClient { NSMutableArray* newArray = [NSMutableArray new]; for (RCMessage* msg in array) { + NSLog(@"%@", msg); NSDictionary* convDic = [self.class _convertMessage:msg]; [newArray addObject:convDic]; } @@ -280,7 +281,7 @@ + (NSDictionary *)_convertConversation:(RCConversation *)conversation { NSMutableDictionary *dic = [NSMutableDictionary new]; dic[@"title"] = conversation.conversationTitle; - dic[@"type"] = @(conversation.conversationType); + dic[@"type"] = [self _converConversationType:conversation.conversationType]; dic[@"targetId"] = conversation.targetId; dic[@"unreadCount"] = @(conversation.unreadMessageCount); dic[@"lastMessage"] = [self _converMessageContent:conversation.lastestMessage]; @@ -293,7 +294,7 @@ + (NSDictionary *)_convertConversation:(RCConversation *)conversation dic[@"draft"] = conversation.draft; dic[@"objectName"] = conversation.objectName; dic[@"senderUserId"] = conversation.senderUserId; - dic[@"jsonDict"] = conversation.jsonDict; + //dic[@"jsonDict"] = conversation.jsonDict; dic[@"lastestMessageId"] = @(conversation.lastestMessageId); return dic; } @@ -349,10 +350,44 @@ + (NSDictionary *)_converMessageContent:(RCMessageContent *)messageContent dic[@"name"] = message.name; dic[@"data"] = message.data; } + else if ([messageContent isKindOfClass:[RCRichContentMessage class]]) { + RCRichContentMessage * message = (RCRichContentMessage*)messageContent; + dic[@"type"] = @"rich"; + dic[@"title"] = message.title; + dic[@"digest"] = message.digest; + dic[@"image"] = message.imageURL; + dic[@"url"] = message.url; + dic[@"extra"] = message.extra; + } else { dic[@"type"] = @"unknown"; } return dic; } ++ (NSString *)_converConversationType:(RCConversationType *)type { + if (type == 0) { + return @"none"; + } else if (type == 1) { + return @"private"; + } else if (type == 2) { + return @"discussion"; + } else if (type == 3) { + return @"group"; + } else if (type == 4) { + return @"chatroom"; + } else if (type == 5) { + return @"customer_service"; + } else if (type == 6) { + return @"system"; + } else if (type == 7) { + return @"app_public_service"; + } else if (type == 8) { + return @"public_service"; + } else if (type == 9) { + return @"push_service"; + } + return @""; +} + @end From e8db3f5a9087e693e95caafa38352de7f3ec1722 Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Tue, 27 Sep 2016 14:30:35 +0800 Subject: [PATCH 08/15] Update RCTRongCloud.m --- ios/RCTRongCloud/RCTRongCloud.m | 1 - 1 file changed, 1 deletion(-) diff --git a/ios/RCTRongCloud/RCTRongCloud.m b/ios/RCTRongCloud/RCTRongCloud.m index 6e18c68..628e304 100644 --- a/ios/RCTRongCloud/RCTRongCloud.m +++ b/ios/RCTRongCloud/RCTRongCloud.m @@ -354,7 +354,6 @@ + (NSDictionary *)_converMessageContent:(RCMessageContent *)messageContent RCRichContentMessage * message = (RCRichContentMessage*)messageContent; dic[@"type"] = @"rich"; dic[@"title"] = message.title; - dic[@"digest"] = message.digest; dic[@"image"] = message.imageURL; dic[@"url"] = message.url; dic[@"extra"] = message.extra; From 2f33f4ab4512654714572af529c933cc900d1b79 Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Tue, 27 Sep 2016 14:31:12 +0800 Subject: [PATCH 09/15] patch java code --- android/src/main/java/io/rong/imlib/ipc/Utils.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/io/rong/imlib/ipc/Utils.java b/android/src/main/java/io/rong/imlib/ipc/Utils.java index a7d279d..7e44fba 100644 --- a/android/src/main/java/io/rong/imlib/ipc/Utils.java +++ b/android/src/main/java/io/rong/imlib/ipc/Utils.java @@ -16,6 +16,7 @@ import io.rong.imlib.model.MessageContent; import io.rong.message.CommandNotificationMessage; import io.rong.message.ImageMessage; +import io.rong.message.RichContentMessage; import io.rong.message.TextMessage; import io.rong.message.VoiceMessage; @@ -59,10 +60,17 @@ private static WritableMap convertMessageContent(MessageContent content) { ret.putString("thumb", imageContent.getThumUri().toString()); ret.putString("extra", imageContent.getExtra()); } else if (content instanceof CommandNotificationMessage) { - CommandNotificationMessage notifyContent = (CommandNotificationMessage)content; + CommandNotificationMessage notifyContent = (CommandNotificationMessage) content; ret.putString("type", "notify"); ret.putString("name", notifyContent.getName()); ret.putString("data", notifyContent.getData()); + } else if (content instanceof RichContentMessage) { + RichContentMessage richContent = (RichContentMessage) content; + ret.putString("type", "rich"); + ret.putString("title", richContent.getTitle()); + ret.putString("image", richContent.getImgUrl()); + ret.putString("url", richContent.getUrl()); + ret.putString("extra", richContent.getExtra()); } else { ret.putString("type", "unknown"); } From 5a14c195c6a738ff1327e99637ebcfebb321bcf5 Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Tue, 27 Sep 2016 18:00:34 +0800 Subject: [PATCH 10/15] Can load conversation list with types --- ios/RCTRongCloud/RCTRongCloud.m | 88 ++++++++++++++++++++++++--------- 1 file changed, 66 insertions(+), 22 deletions(-) diff --git a/ios/RCTRongCloud/RCTRongCloud.m b/ios/RCTRongCloud/RCTRongCloud.m index 628e304..e70589d 100644 --- a/ios/RCTRongCloud/RCTRongCloud.m +++ b/ios/RCTRongCloud/RCTRongCloud.m @@ -45,7 +45,6 @@ - (instancetype)init [[self shareClient] setReceiveMessageDelegate:self object:nil]; _voiceManager = [RCTRongCloudVoiceManager new]; } - [[NSNotificationCenter defaultCenter] addObserver:RCLibDispatchReadReceiptNotification selector:@selector(dispatchReadReceiptNotification:) name:@"dispatchReadReceiptNotification" object:nil]; return self; @@ -129,17 +128,24 @@ -(RCIMClient *) shareClient { resolve([NSString stringWithFormat:@"%d", totalUnreadCount]); } -RCT_EXPORT_METHOD(getConversationList:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) -{ - NSArray *array = [[self shareClient] getConversationList:@[@(ConversationType_PRIVATE), - @(ConversationType_DISCUSSION), - @(ConversationType_GROUP), - @(ConversationType_CHATROOM), - @(ConversationType_CUSTOMERSERVICE), - @(ConversationType_SYSTEM), - @(ConversationType_APPSERVICE), - @(ConversationType_PUBLICSERVICE), - @(ConversationType_PUSHSERVICE)]]; +RCT_EXPORT_METHOD(getConversationList:(NSArray *)conversationTypeList resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) +{ + NSArray *array = [NSArray alloc]; + if ([conversationTypeList count] > 0) { + NSArray * typeList = [self.class _convertConversationTypeArray: conversationTypeList]; + array = [[self shareClient] getConversationList:typeList]; + } else { + array = [[self shareClient] getConversationList:@[@(ConversationType_PRIVATE), + @(ConversationType_DISCUSSION), + @(ConversationType_GROUP), + @(ConversationType_CHATROOM), + @(ConversationType_CUSTOMERSERVICE), + @(ConversationType_SYSTEM), + @(ConversationType_APPSERVICE), + @(ConversationType_PUBLICSERVICE), + @(ConversationType_PUSHSERVICE)]]; + } + NSMutableArray *newArray = [NSMutableArray new]; for (RCConversation *conv in array) { NSDictionary *convDic = [self.class _convertConversation:conv]; @@ -354,6 +360,7 @@ + (NSDictionary *)_converMessageContent:(RCMessageContent *)messageContent RCRichContentMessage * message = (RCRichContentMessage*)messageContent; dic[@"type"] = @"rich"; dic[@"title"] = message.title; + dic[@"digest"] = message.digest; dic[@"image"] = message.imageURL; dic[@"url"] = message.url; dic[@"extra"] = message.extra; @@ -367,26 +374,63 @@ + (NSDictionary *)_converMessageContent:(RCMessageContent *)messageContent + (NSString *)_converConversationType:(RCConversationType *)type { if (type == 0) { return @"none"; - } else if (type == 1) { + } else if (type == ConversationType_PRIVATE) { return @"private"; - } else if (type == 2) { + } else if (type == ConversationType_DISCUSSION) { return @"discussion"; - } else if (type == 3) { + } else if (type == ConversationType_GROUP) { return @"group"; - } else if (type == 4) { + } else if (type == ConversationType_CHATROOM) { return @"chatroom"; - } else if (type == 5) { + } else if (type == ConversationType_CUSTOMERSERVICE) { return @"customer_service"; - } else if (type == 6) { + } else if (type == ConversationType_SYSTEM) { return @"system"; - } else if (type == 7) { - return @"app_public_service"; - } else if (type == 8) { + } else if (type == ConversationType_APPSERVICE) { + return @"app_service"; + } else if (type == ConversationType_PUBLICSERVICE) { return @"public_service"; - } else if (type == 9) { + } else if (type == ConversationType_PUSHSERVICE) { return @"push_service"; } return @""; } ++ (RCConversationType *)_converConversationTypeString:(NSString *)type { + if ([type isEqualToString: @"private"]) { + return ConversationType_PRIVATE; + } else if ([type isEqualToString:@"discussion"]) { + return ConversationType_DISCUSSION; + } else if ([type isEqualToString:@"group"]) { + return ConversationType_GROUP; + } else if ([type isEqualToString: @"chatroom"]) { + return ConversationType_CHATROOM; + } else if ([type isEqualToString: @"customer_service"]) { + return ConversationType_CUSTOMERSERVICE; + } else if ([type isEqualToString: @"system"]) { + return ConversationType_SYSTEM; + } else if ([type isEqualToString: @"app_service"]) { + return ConversationType_APPSERVICE; + } else if ([type isEqualToString: @"public_service"]) { + return ConversationType_PUBLICSERVICE; + } else if ([type isEqualToString: @"push_service"]) { + return ConversationType_PUSHSERVICE; + } else { + return ConversationType_PRIVATE; + } +} + ++ (NSArray *) _convertConversationTypeArray: (NSArray *)array { + NSMutableArray * ret = [[NSMutableArray alloc] init]; + + for(NSString *typeName in array) { + NSLog(@"typeName: %@", typeName); + RCConversationType type = [self.class _converConversationTypeString:typeName]; + [ret addObject:@(type)]; + } + NSLog(@"ret: %@", ret); + return (NSArray *)ret; +} + + @end From c88e0764b4726590dc4b8b87afc1ed29e7477dcd Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Wed, 28 Sep 2016 14:22:36 +0800 Subject: [PATCH 11/15] Add string to enum convert ( ConversationType ) --- .../main/java/io/rong/imlib/ipc/Utils.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/android/src/main/java/io/rong/imlib/ipc/Utils.java b/android/src/main/java/io/rong/imlib/ipc/Utils.java index 7e44fba..a933e4f 100644 --- a/android/src/main/java/io/rong/imlib/ipc/Utils.java +++ b/android/src/main/java/io/rong/imlib/ipc/Utils.java @@ -3,15 +3,20 @@ import android.net.Uri; import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.WritableArray; import com.facebook.react.bridge.WritableMap; import org.w3c.dom.Text; + +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import io.rong.imlib.RongIMClient; import io.rong.imlib.model.Conversation; +import io.rong.imlib.model.Conversation.ConversationType; import io.rong.imlib.model.Message; import io.rong.imlib.model.MessageContent; import io.rong.message.CommandNotificationMessage; @@ -147,4 +152,47 @@ public static MessageContent convertToMessageContent(ReadableMap map) { } return TextMessage.obtain("[未知消息]"); } + + public static ArrayList conversationTypeToEnumArray(ReadableArray conversationTypes) { + ArrayList collection = new ArrayList<>(); + for(int key = 0 ; key < conversationTypes.size(); key++) { + String type = conversationTypes.getString(key); + ConversationType t; + switch(type) { + case "private" : + t = ConversationType.PRIVATE; + break; + case "discussion" : + t = ConversationType.DISCUSSION; + break; + case "group" : + t = ConversationType.GROUP; + break; + case "chatroom" : + t = ConversationType.CHATROOM; + break; + case "customer_service" : + t = ConversationType.CUSTOMER_SERVICE; + break; + case "system" : + t = ConversationType.SYSTEM; + break; + case "app_public_service" : + t = ConversationType.APP_PUBLIC_SERVICE; + break; + case "public_service" : + t = ConversationType.PUBLIC_SERVICE; + break; + case "push_service" : + t = ConversationType.PUSH_SERVICE; + break; + default: + t = ConversationType.PRIVATE; + break; + } + collection.add(t); + } + + return collection; + } } From a467c2bbbe200f6157b203b352470ddfc46c1e2a Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Wed, 28 Sep 2016 14:24:19 +0800 Subject: [PATCH 12/15] Add conversation type params in getConversation... --- .../java/io/rong/imlib/ipc/IMLibModule.java | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/android/src/main/java/io/rong/imlib/ipc/IMLibModule.java b/android/src/main/java/io/rong/imlib/ipc/IMLibModule.java index 57b0ec4..ce2ee1a 100644 --- a/android/src/main/java/io/rong/imlib/ipc/IMLibModule.java +++ b/android/src/main/java/io/rong/imlib/ipc/IMLibModule.java @@ -13,6 +13,9 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.bridge.WritableArray; +import com.facebook.react.bridge.ReadableNativeArray; import com.facebook.react.bridge.WritableMap; import com.facebook.react.modules.core.DeviceEventManagerModule; @@ -20,11 +23,14 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; import io.rong.imlib.RongIMClient; import io.rong.imlib.model.Conversation; +import io.rong.imlib.model.Conversation.ConversationType; import io.rong.imlib.model.Message; /** @@ -109,23 +115,35 @@ public void onError(RongIMClient.ErrorCode errorCode) { } @ReactMethod - public void getConversationList(final Promise promise){ + public void getConversationList(ReadableArray types, final Promise promise) { if (client == null) { promise.reject("NotLogined", "Must call connect first."); return; } + ConversationType[] conversationTypes = { + ConversationType.PRIVATE, + ConversationType.DISCUSSION, + ConversationType.GROUP, + ConversationType.CHATROOM, + ConversationType.CUSTOMER_SERVICE, + ConversationType.SYSTEM, + ConversationType.APP_PUBLIC_SERVICE, + ConversationType.PUBLIC_SERVICE, + ConversationType.PUSH_SERVICE + }; + if (types.size() > 0) { + conversationTypes = Utils.conversationTypeToEnumArray(types).toArray(new ConversationType[0]); + } client.getConversationList(new RongIMClient.ResultCallback>() { - @Override public void onSuccess(List conversations) { promise.resolve(Utils.convertConversationList(conversations)); } - @Override public void onError(RongIMClient.ErrorCode errorCode) { promise.reject("" + errorCode.getValue(), errorCode.getMessage()); } - }); + }, conversationTypes); } @ReactMethod From 2e6d4b0897e0d0e7e5e70a3e863c72ca0e099f9e Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Wed, 28 Sep 2016 18:04:31 +0800 Subject: [PATCH 13/15] Update RCTRongCloud.m --- ios/RCTRongCloud/RCTRongCloud.m | 74 +++++++++++++++++++++++++++++---- 1 file changed, 67 insertions(+), 7 deletions(-) diff --git a/ios/RCTRongCloud/RCTRongCloud.m b/ios/RCTRongCloud/RCTRongCloud.m index e70589d..9302509 100644 --- a/ios/RCTRongCloud/RCTRongCloud.m +++ b/ios/RCTRongCloud/RCTRongCloud.m @@ -122,12 +122,19 @@ -(RCIMClient *) shareClient { resolve(nil); } +//未读消息总数 RCT_EXPORT_METHOD(getTotalUnreadCount:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { int totalUnreadCount = [[self shareClient] getTotalUnreadCount]; resolve([NSString stringWithFormat:@"%d", totalUnreadCount]); } +//设置会话是否置顶 +RCT_EXPORT_METHOD(setConversationToTop:(NSString *)conversationType targetId:(NSString *)targetId isTop:(BOOL)isTop) { + [[self shareClient] setConversationToTop:[self.class _converConversationTypeString:conversationType] targetId:targetId isTop:isTop]; +} + +//获取会话列表 RCT_EXPORT_METHOD(getConversationList:(NSArray *)conversationTypeList resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { NSArray *array = [NSArray alloc]; @@ -154,33 +161,41 @@ -(RCIMClient *) shareClient { resolve(newArray); } +//获取会话 RCT_EXPORT_METHOD(getConversation:(RCConversationType)conversationType targetId:(NSString *)targetId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { RCConversation *conv = [[self shareClient] getConversation:conversationType targetId:targetId]; resolve([self.class _convertConversation:conv]); } +//发送已读回执 RCT_EXPORT_METHOD(sendReadReceiptMessage:(RCConversationType)conversationType targetId:(NSString *)targetId time:(nonnull NSNumber *)time) { //NSLog(@"Long long timestamp %ld", time); [[self shareClient] sendReadReceiptMessage:conversationType targetId:targetId time:(long long)time]; } -RCT_EXPORT_METHOD(clearConversations: (NSArray *)conversationTypeList) +//清除会话列表 +RCT_EXPORT_METHOD(clearConversations: (NSArray *)conversationTypeList resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { - [[self shareClient] clearConversations:conversationTypeList]; + NSArray * typeList = [self.class _convertConversationTypeArray: conversationTypeList]; + BOOL result = [[self shareClient] clearConversations:typeList]; + resolve(@(result)); } +//清除会话 RCT_EXPORT_METHOD(removeConversation: (RCConversationType)conversationType targetId:(NSString *)targetId) { [[self shareClient] removeConversation:conversationType targetId:targetId]; } +// 设置消息的接收状态 RCT_EXPORT_METHOD(setMessageReceivedStatus:(long)messageId receivedStatus:(RCReceivedStatus)receivedStatus) { [[self shareClient] setMessageReceivedStatus:messageId receivedStatus:receivedStatus]; } +//获取最新的消息 RCT_EXPORT_METHOD(getLatestMessages: (RCConversationType) type targetId:(NSString*) targetId count:(int) count resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { @@ -194,7 +209,7 @@ -(RCIMClient *) shareClient { } resolve(newArray); } - +//发送消息 RCT_EXPORT_METHOD(sendMessage: (RCConversationType) type targetId:(NSString*) targetId content:(RCMessageContent*) content pushContent: (NSString*) pushContent pushData:(NSString*) pushData resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) @@ -210,17 +225,62 @@ -(RCIMClient *) shareClient { }]; resolve([self.class _convertMessage:msg]); } - +//删除消息 RCT_EXPORT_METHOD(deleteMessages:(NSArray *)messageIds) { [[self shareClient] deleteMessages:messageIds]; } - -RCT_EXPORT_METHOD(clearMessagesUnreadStatus:(RCConversationType)conversationType targetId:(NSString *)targetId) +//清除消息未读状态 +RCT_EXPORT_METHOD(clearMessagesUnreadStatus:(NSString *)conversationType targetId:(NSString *)targetId) { - [[self shareClient] clearMessagesUnreadStatus:conversationType targetId:targetId]; + [[self shareClient] clearMessagesUnreadStatus:[self.class _converConversationTypeString:conversationType] targetId:targetId]; +} +//加入聊天室 +RCT_EXPORT_METHOD(joinChatRoom: (NSString *)targetId messageCount:(int)messageCount resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + + [[self shareClient] joinChatRoom:targetId messageCount:messageCount success:^() { + + } error:^(RCErrorCode code){ + + }]; +} + +//创建讨论组 +RCT_EXPORT_METHOD(createDiscussion:(NSString *)name userIdList:(NSArray *)userIdList resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + +} + +//讨论组加人,将用户加入讨论组 +RCT_EXPORT_METHOD(addMemberToDiscussion:(NSString *)discussionId userIdList:(NSArray *)userIdList resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + +} + +//讨论组踢人,将用户移出讨论组 +RCT_EXPORT_METHOD(removeMemberFromDiscussion:(NSString *)discussionId userId:(NSString *)userId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + +} + +//退出当前讨论组 +RCT_EXPORT_METHOD(quitDiscussion:(NSString *)discussionId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + +} + +//获取讨论组的信息 +RCT_EXPORT_METHOD(getDiscussion:(NSString *)discussionId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + +} + +//设置讨论组名称 +RCT_EXPORT_METHOD(setDiscussionName:(NSString *)discussionId name:(NSString *)discussionName resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + +} + +//设置讨论组是否开放加人权限 +RCT_EXPORT_METHOD(setDiscussionInviteStatus:(NSString *)targetId isOpen:(BOOL)isOpen resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { + } +//是否可以录音 RCT_EXPORT_METHOD(canRecordVoice:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { [_voiceManager canRecordVoice:^(NSError *error, NSDictionary *result) { From 9ac8e60017907564e0f3f99ed44f4d8b030f29d2 Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Sat, 8 Oct 2016 11:46:23 +0800 Subject: [PATCH 14/15] Update RCTRongCloud.m --- ios/RCTRongCloud/RCTRongCloud.m | 128 ++++++++++++++++++++++++++++---- 1 file changed, 115 insertions(+), 13 deletions(-) diff --git a/ios/RCTRongCloud/RCTRongCloud.m b/ios/RCTRongCloud/RCTRongCloud.m index 9302509..8b4043d 100644 --- a/ios/RCTRongCloud/RCTRongCloud.m +++ b/ios/RCTRongCloud/RCTRongCloud.m @@ -46,6 +46,9 @@ - (instancetype)init _voiceManager = [RCTRongCloudVoiceManager new]; } [[NSNotificationCenter defaultCenter] addObserver:RCLibDispatchReadReceiptNotification selector:@selector(dispatchReadReceiptNotification:) name:@"dispatchReadReceiptNotification" object:nil]; + + //监听融云网络状态 + return self; } @@ -64,6 +67,7 @@ + (void)registerAPI:(NSString *)aString }); } + + (void)setDeviceToken:(NSData *)aToken { NSString *token = @@ -89,6 +93,7 @@ -(RCIMClient *) shareClient { RCT_EXPORT_METHOD(connect:(NSString *)token resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { [[self shareClient] connectWithToken:token success:^(NSString *userId) { + //[[self shareClient] setRCConnectionStatusChangeDelegate:self]; // Connect 成功 resolve(userId); } error:^(RCConnectErrorCode status) { @@ -104,8 +109,7 @@ -(RCIMClient *) shareClient { RCT_EXPORT_METHOD(getConnectionStatus:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { RCConnectionStatus status = [[self shareClient] getConnectionStatus]; - NSLog(@"status: %@", status); - resolve(nil); + resolve([self.class _convertConnectionSatus: status]); } // 断开与融云服务器的连接,并不再接收远程推送 @@ -216,12 +220,12 @@ -(RCIMClient *) shareClient { { RCMessage* msg = [[self shareClient] sendMessage:type targetId:targetId content:content pushContent:pushContent success:^(long messageId){ - [_bridge.eventDispatcher sendAppEventWithName:@"msgSendOk" body:@(messageId)]; + [_bridge.eventDispatcher sendAppEventWithName:@"RCMsgSendOk" body:@(messageId)]; } error:^(RCErrorCode code, long messageId){ NSMutableDictionary* dic = [NSMutableDictionary new]; dic[@"messageId"] = @(messageId); dic[@"errCode"] = @((int)code); - [_bridge.eventDispatcher sendAppEventWithName:@"msgSendFailed" body:dic]; + [_bridge.eventDispatcher sendAppEventWithName:@"RCMsgSendFailed" body:dic]; }]; resolve([self.class _convertMessage:msg]); } @@ -239,15 +243,22 @@ -(RCIMClient *) shareClient { RCT_EXPORT_METHOD(joinChatRoom: (NSString *)targetId messageCount:(int)messageCount resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { [[self shareClient] joinChatRoom:targetId messageCount:messageCount success:^() { - + resolve(@"success"); } error:^(RCErrorCode code){ - + //reject(@"failed"); }]; } //创建讨论组 RCT_EXPORT_METHOD(createDiscussion:(NSString *)name userIdList:(NSArray *)userIdList resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { - + [[self shareClient] createDiscussion:name userIdList:userIdList success:^(RCDiscussion * discussion) { + + resolve([self.class _convertDiscussion: discussion]); + + + } error:^(RCErrorCode status) { + NSLog(@"%d", status); + }]; } //讨论组加人,将用户加入讨论组 @@ -337,8 +348,12 @@ - (void)onReceived:(RCMessage *)message left:(int)nLeft object:(id)object { - NSLog(@"onReceived : %@", [self.class _convertMessage:message]); - [_bridge.eventDispatcher sendAppEventWithName:@"rongIMMsgRecved" body:[self.class _convertMessage:message]]; + [_bridge.eventDispatcher sendAppEventWithName:@"RCMsgRecved" body:[self.class _convertMessage:message]]; +} + +- (void)onConnectionStatusChanged:(RCConnectionStatus)status { + NSLog(@"onConnectionStatusChanged: %d", status); + [_bridge.eventDispatcher sendAppEventWithName:@"RCConnStatusChanged" body:@{ @"status": [self.class _convertConnectionSatus:status]}]; } #pragma mark - private @@ -424,13 +439,27 @@ + (NSDictionary *)_converMessageContent:(RCMessageContent *)messageContent dic[@"image"] = message.imageURL; dic[@"url"] = message.url; dic[@"extra"] = message.extra; - } - else { + } else if ([messageContent isKindOfClass:[RCDiscussionNotificationMessage class]]) { + RCDiscussionNotificationMessage *message = (RCDiscussionNotificationMessage *)messageContent; + dic[@"type"] = @(message.type); + dic[@"operatorId"] = message.operatorId; + dic[@"senderUserInfo"] = [self.class _convertUserInfo: message.senderUserInfo]; + }else { dic[@"type"] = @"unknown"; } return dic; } ++ (NSDictionary *)_convertDiscussion: (RCDiscussion *)discussion { + NSMutableDictionary *dic = [NSMutableDictionary new]; + dic[@"name"] = discussion.discussionName; + dic[@"discussionId"] = discussion.discussionId; + dic[@"creatorId"] = discussion.creatorId; + dic[@"memberIdList"] = discussion.memberIdList; + dic[@"inviteStatus"] = @(discussion.inviteStatus); + return dic; +} + + (NSString *)_converConversationType:(RCConversationType *)type { if (type == 0) { return @"none"; @@ -484,13 +513,86 @@ + (NSArray *) _convertConversationTypeArray: (NSArray *)array { NSMutableArray * ret = [[NSMutableArray alloc] init]; for(NSString *typeName in array) { - NSLog(@"typeName: %@", typeName); RCConversationType type = [self.class _converConversationTypeString:typeName]; [ret addObject:@(type)]; } - NSLog(@"ret: %@", ret); return (NSArray *)ret; } ++ (NSArray *)_jsArrayToObjectArray: (NSArray *)array { + NSMutableArray * ret = [[NSMutableArray alloc] init]; + for(NSString * str in array) { + [ret addObject: str]; + } + return (NSArray *)ret; +} + ++ (NSDictionary *)_convertUserInfo: (RCUserInfo *)user { + NSMutableDictionary * ret = [[NSMutableArray alloc] init]; + [ret setValue:[user name] forKeyPath:@"name"]; + [ret setValue:[user userId] forKeyPath:@"userId"]; + [ret setValue:[user portraitUri] forKeyPath:@"portraitUri"]; + return ret; +} + ++ (NSString *)_convertConnectionSatus: (RCConnectionStatus)status { + + NSString * ret; + switch (status) { + case ConnectionStatus_UNKNOWN: + ret = @"UNKNOWN"; + break; + case ConnectionStatus_Connected: + ret = @"Connected"; + break; + case ConnectionStatus_NETWORK_UNAVAILABLE: + ret = @"NETWORK_UNAVAILABLE"; + break; + case ConnectionStatus_AIRPLANE_MODE: + ret = @"AIRPLANE_MODE"; + break; + case ConnectionStatus_Cellular_2G: + ret = @"Cellular_2G"; + break; + case ConnectionStatus_Cellular_3G_4G: + ret = @"Cellular_3G_4G"; + break; + case ConnectionStatus_WIFI: + ret = @"WIFI"; + break; + case ConnectionStatus_KICKED_OFFLINE_BY_OTHER_CLIENT: + ret = @"KICKED_OFFLINE_BY_OTHER_CLIENT"; + break; + case ConnectionStatus_LOGIN_ON_WEB: + ret = @"KICKED_OFFLINE_BY_OTHER_CLIENT"; + break; + case ConnectionStatus_SERVER_INVALID: + ret = @"SERVER_INVALID"; + break; + case ConnectionStatus_VALIDATE_INVALID: + ret = @"VALIDATE_INVALID"; + break; + case ConnectionStatus_Connecting: + ret = @"Connecting"; + break; + case ConnectionStatus_Unconnected: + ret = @"Unconnected"; + break; + case ConnectionStatus_SignUp: + ret = @"SignUp"; + break; + case ConnectionStatus_TOKEN_INCORRECT: + ret = @"TOKEN_INCORRECT"; + break; + case ConnectionStatus_DISCONN_EXCEPTION: + ret = @"DISCONN_EXCEPTION"; + break; + default: + ret = @"UNKNOWN"; + break; + } + + return ret; +} @end From 167529fe918a3c80459f5ce1ca0bccecc87f5706 Mon Sep 17 00:00:00 2001 From: Jiayao Wu Date: Sat, 8 Oct 2016 11:47:27 +0800 Subject: [PATCH 15/15] Update index.js --- src/index.js | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/index.js b/src/index.js index bbc8667..a48d20a 100644 --- a/src/index.js +++ b/src/index.js @@ -5,29 +5,48 @@ import {Alert, NativeModules, NativeAppEventEmitter} from 'react-native'; import EventEmitter from 'react-native/Libraries/EventEmitter/EventEmitter'; +const RCEventName = { + RCMsgRecved: "RCMsgRecved", + RCMsgSendOk: "RCMsgSendOk", + RCMsgSendFailed: "RCMsgSendFailed", + RCConnStatusChanged: "RCConnStatusChanged", +}; + const ConversationType = { APP_SERVICE: 'appService', CHATROOM: 'chatroom', CUSTOM_SERVICE: 'customerService', DISCUSSION: 'discussion', GROUP: 'group', - PRIVATE: 'private', - PUBLISH_SERVICE: 'publishService', - PUSH_SERVICE: 'pushService', - SYSTEM: 'system', + PRIVATE: 'private', + PUBLISH_SERVICE: 'publishService', + PUSH_SERVICE: 'pushService', + SYSTEM: 'system', }; -const RongIMLib = NativeModules.RongIMLib; +const RongIMLib = NativeModules.RongIMLib; const eventEmitter = new EventEmitter(); - export default Object.assign(exports, RongIMLib, ConversationType); exports.eventEmitter = eventEmitter; exports.addListener = eventEmitter.addListener.bind(eventEmitter); +exports.removeListener = eventEmitter.removeListener.bind(eventEmitter); exports.once = eventEmitter.once.bind(eventEmitter); exports.removeAllListeners = eventEmitter.removeAllListeners.bind(eventEmitter); exports.removeCurrentListener = eventEmitter.removeCurrentListener.bind(eventEmitter); -NativeAppEventEmitter.addListener('rongIMMsgRecved', msg => { +NativeAppEventEmitter.addListener(RCEventName.RCMsgRecved, msg => { eventEmitter.emit('msgRecved', msg); }); + +NativeAppEventEmitter.addListener(RCEventName.RCMsgSendOk, msg => { + eventEmitter.emit('msgSendOk', msg); +}); + +NativeAppEventEmitter.addListener(RCEventName.RCMsgSendFailed, msg => { + eventEmitter.emit('msgSendFailed', msg); +}); + +NativeAppEventEmitter.addListener(RCEventName.RCConnStatusChanged, msg => { + eventEmitter.emit('msgConnStatusChanged', msg); +});