Files
2026-07-13 12:35:01 +08:00

159 lines
5.8 KiB
Objective-C

//
// TLMessageManager.m
// TLChat
//
// Created by 李伯坤 on 16/3/13.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import "TLMessageManager.h"
#import "TLMessageManager+ConversationRecord.h"
#import "TLUserHelper.h"
#import "TLNetwork.h"
#import "TLFriendHelper.h"
#import "TLTextMessage.h"
#import "TLImageMessage.h"
static TLMessageManager *messageManager;
@implementation TLMessageManager
+ (TLMessageManager *)sharedInstance
{
static dispatch_once_t once;
dispatch_once(&once, ^{
messageManager = [[TLMessageManager alloc] init];
});
return messageManager;
}
- (void)sendMessage:(TLMessage *)message
progress:(void (^)(TLMessage *, CGFloat))progress
success:(void (^)(TLMessage *))success
failure:(void (^)(TLMessage *))failure
{
// 图灵机器人
[self p_sendMessageToReboot:message];
BOOL ok = [self.messageStore addMessage:message];
if (!ok) {
DDLogError(@"存储Message到DB失败");
}
else { // 存储到conversation
ok = [self addConversationByMessage:message];
if (!ok) {
DDLogError(@"存储Conversation到DB失败");
}
}
}
#pragma mark - # Private
- (void)p_sendMessageToReboot:(TLMessage *)message
{
if (message.messageType == TLMessageTypeText) {
// 聊天的用户
TLUser *user;
if (message.partnerType == TLPartnerTypeGroup) {
TLGroup *group = [[TLFriendHelper sharedFriendHelper] getGroupInfoByGroupID:message.groupID];
NSInteger index = arc4random() % group.count;
user = group.users[index];
}
else {
user = [[TLFriendHelper sharedFriendHelper] getFriendInfoByUserID:message.friendID];
}
NSString *text = [message.content objectForKey:@"text"];
NSString *apiKey = ({
NSString *key;
if ([user.userID isEqualToString:@"1001"]) { // 曾小贤
key = @"00916307c7b24533a23d6115224540f3";
}
else if ([user.userID isEqualToString:@"1002"]) { // 陈美嘉
key = @"5f5f8d7d613f4d81a6ff354cb428ccbc";
}
else {
key = @"44eb0b4ab0a640f192bd469551a7c03e";
}
key;
});
NSDictionary *json = @{@"reqType" : @"0",
@"userInfo" : @{
@"apiKey" : apiKey,
@"userId" : @"100454",
},
@"perception" : @{
@"inputText" : @{
@"text" : text,
}
},
};
NSString *url = @"http://openapi.tuling123.com/openapi/api/v2";
TLBaseRequest *request = [TLBaseRequest requestWithMethod:TLRequestMethodPOST url:url parameters:json];
[request startRequestWithSuccessAction:^(TLResponse *response) {
NSDictionary *json = response.responseObject;
NSArray *results = [json objectForKey:@"results"];
for (NSDictionary *item in results) {
NSDictionary *values = [item objectForKey:@"values"];
if (values[@"text"]) {
NSString *text = values[@"text"];
TLTextMessage *textMessage = [[TLTextMessage alloc] init];
textMessage.partnerType = message.partnerType;
textMessage.text = text;
textMessage.ownerTyper = TLMessageOwnerTypeFriend;
textMessage.userID = message.userID;
textMessage.date = [NSDate date];
textMessage.friendID = user.userID;
textMessage.fromUser = (id <TLChatUserProtocol>)user;
textMessage.groupID = message.groupID;
[self.messageStore addMessage:textMessage];
if (self.messageDelegate && [self.messageDelegate respondsToSelector:@selector(didReceivedMessage:)]) {
[self.messageDelegate didReceivedMessage:textMessage];
}
}
else if (values[@"image"]) {
NSString *imageURL = values[@"image"];
TLImageMessage *imageMessage = [[TLImageMessage alloc] init];
imageMessage.partnerType = message.partnerType;
imageMessage.imageURL = imageURL;
imageMessage.ownerTyper = TLMessageOwnerTypeFriend;
imageMessage.userID = message.userID;
imageMessage.friendID = user.userID;
imageMessage.date = [NSDate date];
imageMessage.fromUser = (id <TLChatUserProtocol>)user;
imageMessage.imageSize = CGSizeMake(120, 120);
imageMessage.groupID = message.groupID;
[self.messageStore addMessage:imageMessage];
if (self.messageDelegate && [self.messageDelegate respondsToSelector:@selector(didReceivedMessage:)]) {
[self.messageDelegate didReceivedMessage:imageMessage];
}
}
}
} failureAction:nil];
}
}
#pragma mark - # Getters
- (TLDBMessageStore *)messageStore
{
if (_messageStore == nil) {
_messageStore = [[TLDBMessageStore alloc] init];
}
return _messageStore;
}
- (TLDBConversationStore *)conversationStore
{
if (_conversationStore == nil) {
_conversationStore = [[TLDBConversationStore alloc] init];
}
return _conversationStore;
}
- (NSString *)userID
{
return [TLUserHelper sharedHelper].userID;
}
@end