TUIChatService.m 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. // Created by Tencent on 2023/06/09.
  2. // Copyright © 2023 Tencent. All rights reserved.
  3. #import "TUIChatService.h"
  4. #import <TUICore/NSDictionary+TUISafe.h>
  5. #import <TUICore/TUILogin.h>
  6. #import <TUICore/TUIThemeManager.h>
  7. #import "TUIChatConfig.h"
  8. #import "TUIChatDefine.h"
  9. #import "TUIMessageCellConfig.h"
  10. #import "TUIBaseMessageController.h"
  11. @interface TUIChatService () <TUINotificationProtocol, TUIExtensionProtocol>
  12. @end
  13. @implementation TUIChatService
  14. + (void)load {
  15. [TUICore registerService:TUICore_TUIChatService object:[TUIChatService shareInstance]];
  16. TUIRegisterThemeResourcePath(TUIChatThemePath, TUIThemeModuleChat);
  17. }
  18. + (TUIChatService *)shareInstance {
  19. static dispatch_once_t onceToken;
  20. static TUIChatService *g_sharedInstance = nil;
  21. dispatch_once(&onceToken, ^{
  22. g_sharedInstance = [[TUIChatService alloc] init];
  23. });
  24. return g_sharedInstance;
  25. }
  26. - (instancetype)init {
  27. if (self = [super init]) {
  28. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginSuccessNotification) name:TUILoginSuccessNotification object:nil];
  29. }
  30. return self;
  31. }
  32. - (void)loginSuccessNotification {
  33. [TUICore callService:TUICore_TUICallingService
  34. method:TUICore_TUICallingService_EnableFloatWindowMethod
  35. param:@{TUICore_TUICallingService_EnableFloatWindowMethod_EnableFloatWindow : @(TUIChatConfig.defaultConfig.enableFloatWindowForCall)}];
  36. [TUICore
  37. callService:TUICore_TUICallingService
  38. method:TUICore_TUICallingService_EnableMultiDeviceAbilityMethod
  39. param:@{
  40. TUICore_TUICallingService_EnableMultiDeviceAbilityMethod_EnableMultiDeviceAbility : @(TUIChatConfig.defaultConfig.enableMultiDeviceForCall)
  41. }];
  42. [TUICore
  43. callService:TUICore_TUICallingService
  44. method:TUICore_TUICallingService_EnableIncomingBannerMethod
  45. param:@{
  46. TUICore_TUICallingService_EnableIncomingBannerMethod_EnableIncomingBanner : @(TUIChatConfig.defaultConfig.enableIncomingBanner)
  47. }];
  48. [TUICore
  49. callService:TUICore_TUICallingService
  50. method:TUICore_TUICallingService_EnableVirtualBackgroundForCallMethod
  51. param:@{
  52. TUICore_TUICallingService_EnableVirtualBackgroundForCallMethod_EnableVirtualBackgroundForCall
  53. : @(TUIChatConfig.defaultConfig.enableVirtualBackgroundForCall)
  54. }];
  55. }
  56. - (NSString *)getDisplayString:(V2TIMMessage *)message {
  57. return [TUIBaseMessageController getDisplayString:message];
  58. }
  59. - (void)asyncGetDisplayString:(NSArray<V2TIMMessage *> *)messageList callback:(TUICallServiceResultCallback)resultCallback {
  60. if (resultCallback == nil) {
  61. return;
  62. }
  63. [TUIBaseMessageController asyncGetDisplayString:messageList callback:^(NSDictionary<NSString *,NSString *> * result) {
  64. resultCallback(0, @"", result);
  65. }];
  66. }
  67. #pragma mark - TUIServiceProtocol
  68. - (id)onCall:(NSString *)method param:(nullable NSDictionary *)param {
  69. if ([method isEqualToString:TUICore_TUIChatService_GetDisplayStringMethod]) {
  70. return [self getDisplayString:param[TUICore_TUIChatService_GetDisplayStringMethod_MsgKey]];
  71. } else if ([method isEqualToString:TUICore_TUIChatService_SendMessageMethod]) {
  72. V2TIMMessage *message = [param tui_objectForKey:TUICore_TUIChatService_SendMessageMethod_MsgKey asClass:V2TIMMessage.class];
  73. TUIMessageCellData *cellData = [param tui_objectForKey:TUICore_TUIChatService_SendMessageMethod_PlaceHolderUIMsgKey asClass:TUIMessageCellData.class];
  74. if (!message && !cellData) {
  75. return nil;
  76. }
  77. NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
  78. if (message) {
  79. [userInfo setObject:message forKey:TUICore_TUIChatService_SendMessageMethod_MsgKey];
  80. }
  81. if (cellData) {
  82. [userInfo setObject:cellData forKey:TUICore_TUIChatService_SendMessageMethod_PlaceHolderUIMsgKey];
  83. }
  84. [[NSNotificationCenter defaultCenter] postNotificationName:TUIChatSendMessageNotification object:nil userInfo:userInfo];
  85. } else if ([method isEqualToString:TUICore_TUIChatService_SendMessageMethodWithoutUpdateUI]) {
  86. V2TIMMessage *message = [param tui_objectForKey:TUICore_TUIChatService_SendMessageMethodWithoutUpdateUI_MsgKey asClass:V2TIMMessage.class];
  87. if (message == nil) {
  88. return nil;
  89. }
  90. NSDictionary *userInfo = @{TUICore_TUIChatService_SendMessageMethodWithoutUpdateUI_MsgKey : message};
  91. [[NSNotificationCenter defaultCenter] postNotificationName:TUIChatSendMessageWithoutUpdateUINotification object:nil userInfo:userInfo];
  92. } else if ([method isEqualToString:TUICore_TUIChatService_SetChatExtensionMethod]) {
  93. [param enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSNumber *obj, BOOL *_Nonnull stop) {
  94. if (![key isKindOfClass:NSString.class] || ![obj isKindOfClass:NSNumber.class]) {
  95. return;
  96. }
  97. }];
  98. } else if ([method isEqualToString:TUICore_TUIChatService_AppendCustomMessageMethod]) {
  99. if ([param isKindOfClass:NSDictionary.class]) {
  100. NSString *businessID = param[BussinessID];
  101. NSString *cellName = param[TMessageCell_Name];
  102. NSString *cellDataName = param[TMessageCell_Data_Name];
  103. [TUIMessageCellConfig registerCustomMessageCell:cellName messageCellData:cellDataName forBusinessID:businessID isPlugin:YES];
  104. }
  105. }
  106. else if ([method isEqualToString:TUICore_TUIChatService_SetMaxTextSize]) {
  107. if ([param isKindOfClass:NSDictionary.class]) {
  108. CGSize sizeVa = [param[@"maxsize"] CGSizeValue];
  109. [TUIMessageCellConfig setMaxTextSize:sizeVa];
  110. }
  111. }
  112. return nil;
  113. }
  114. - (id)onCall:(NSString *)method param:(NSDictionary *)param resultCallback:(TUICallServiceResultCallback)resultCallback {
  115. if ([method isEqualToString:TUICore_TUIChatService_AsyncGetDisplayStringMethod]) {
  116. NSArray *messageList = param[TUICore_TUIChatService_AsyncGetDisplayStringMethod_MsgListKey];
  117. [self asyncGetDisplayString:messageList callback:resultCallback];
  118. return nil;
  119. }
  120. return nil;
  121. }
  122. @end