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 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..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,25 +3,31 @@ 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; import io.rong.message.ImageMessage; +import io.rong.message.RichContentMessage; import io.rong.message.TextMessage; import io.rong.message.VoiceMessage; /** * Created by tdzl2003 on 4/13/16. + * Updated by mot */ public class Utils { @@ -59,10 +65,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"); } @@ -97,6 +110,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; } @@ -128,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; + } } diff --git a/ios/RCTRongCloud/RCTRongCloud.m b/ios/RCTRongCloud/RCTRongCloud.m index a74241b..8b4043d 100644 --- a/ios/RCTRongCloud/RCTRongCloud.m +++ b/ios/RCTRongCloud/RCTRongCloud.m @@ -42,17 +42,21 @@ - (instancetype)init { self = [super init]; if (self) { - [[RCIMClient sharedRCIMClient] setReceiveMessageDelegate:self object:nil]; + [[self shareClient] setReceiveMessageDelegate:self object:nil]; _voiceManager = [RCTRongCloudVoiceManager new]; } + [[NSNotificationCenter defaultCenter] addObserver:RCLibDispatchReadReceiptNotification selector:@selector(dispatchReadReceiptNotification:) name:@"dispatchReadReceiptNotification" object:nil]; + + //监听融云网络状态 + + return self; } - (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 @@ -63,6 +67,7 @@ + (void)registerAPI:(NSString *)aString }); } + + (void)setDeviceToken:(NSData *)aToken { NSString *token = @@ -76,9 +81,19 @@ + (void)setDeviceToken:(NSData *)aToken [[RCIMClient sharedRCIMClient] setDeviceToken:token]; } ++ (void)dispatchReadReceiptNotification:(NSNotification *) notification +{ +// NSLog(@"%@", notification); +} + +-(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) { + //[[self shareClient] setRCConnectionStatusChangeDelegate:self]; // Connect 成功 resolve(userId); } error:^(RCConnectErrorCode status) { @@ -91,31 +106,57 @@ + (void)setDeviceToken:(NSData *)aToken }]; } +RCT_EXPORT_METHOD(getConnectionStatus:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) +{ + RCConnectionStatus status = [[self shareClient] getConnectionStatus]; + resolve([self.class _convertConnectionSatus: status]); +} + // 断开与融云服务器的连接,并不再接收远程推送 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) +//未读消息总数 +RCT_EXPORT_METHOD(getTotalUnreadCount:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { - NSArray *array = [[RCIMClient sharedRCIMClient] getConversationList:@[@(ConversationType_PRIVATE), - @(ConversationType_DISCUSSION), - @(ConversationType_GROUP), - @(ConversationType_CHATROOM), - @(ConversationType_CUSTOMERSERVICE), - @(ConversationType_SYSTEM), - @(ConversationType_APPSERVICE), - @(ConversationType_PUBLICSERVICE), - @(ConversationType_PUSHSERVICE)]]; + 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]; + 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]; @@ -124,36 +165,133 @@ + (void)setDeviceToken:(NSData *)aToken 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 resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) +{ + 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) { - 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) { + NSLog(@"%@", msg); NSDictionary* convDic = [self.class _convertMessage:msg]; [newArray addObject:convDic]; } 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) { - 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)]; + [_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]); } +//删除消息 +RCT_EXPORT_METHOD(deleteMessages:(NSArray *)messageIds) +{ + [[self shareClient] deleteMessages:messageIds]; +} +//清除消息未读状态 +RCT_EXPORT_METHOD(clearMessagesUnreadStatus:(NSString *)conversationType targetId:(NSString *)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:^() { + 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); + }]; +} + +//讨论组加人,将用户加入讨论组 +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) { @@ -210,7 +348,12 @@ - (void)onReceived:(RCMessage *)message left:(int)nLeft object:(id)object { - [_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 @@ -219,7 +362,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]; @@ -232,7 +375,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; } @@ -288,10 +431,168 @@ + (NSDictionary *)_converMessageContent:(RCMessageContent *)messageContent dic[@"name"] = message.name; dic[@"data"] = message.data; } - else { + 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 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"; + } else if (type == ConversationType_PRIVATE) { + return @"private"; + } else if (type == ConversationType_DISCUSSION) { + return @"discussion"; + } else if (type == ConversationType_GROUP) { + return @"group"; + } else if (type == ConversationType_CHATROOM) { + return @"chatroom"; + } else if (type == ConversationType_CUSTOMERSERVICE) { + return @"customer_service"; + } else if (type == ConversationType_SYSTEM) { + return @"system"; + } else if (type == ConversationType_APPSERVICE) { + return @"app_service"; + } else if (type == ConversationType_PUBLICSERVICE) { + return @"public_service"; + } 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) { + RCConversationType type = [self.class _converConversationTypeString:typeName]; + [ret addObject:@(type)]; + } + 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 diff --git a/src/index.js b/src/index.js index 3d745ea..a48d20a 100644 --- a/src/index.js +++ b/src/index.js @@ -2,23 +2,51 @@ * Created by tdzl2003 on 4/13/16. */ -import {NativeModules, DeviceEventEmitter} from 'react-native'; -import EventEmitter from 'react-native/Libraries/vendor/emitter/EventEmitter'; +import {Alert, NativeModules, NativeAppEventEmitter} from 'react-native'; +import EventEmitter from 'react-native/Libraries/EventEmitter/EventEmitter'; -const RongIMLib = NativeModules.RongIMLib; +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', +}; +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); +exports.removeListener = eventEmitter.removeListener.bind(eventEmitter); 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(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); +});