Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d643b58

Browse files
author
mengyaoyao
committed
新增语音发送部分
1 parent f56f283 commit d643b58

File tree

16 files changed

+546
-175
lines changed

16 files changed

+546
-175
lines changed

‎CocoaAsyncSocket_TCP/ChatHandler/ChatUtil.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@
1515
//消息高度计算
1616
+ (CGFloat)heightForMessage:(ChatModel *)currentChatmodel premodel:(ChatModel *)premodel;
1717

18-
//创建消息模型
19-
+ (ChatModel *)creatMessageModel:(ChatModel *)config;
20-
21-
//创建本地资源缓存 , 图片写入本地
22-
+ (void)creatLocalCacheSource:(ChatAlbumModel *)albumModel chat:(ChatModel *)chatModel;
18+
//初始化文本消息模型
19+
+ (ChatModel *)initTextMessage:(NSString *)text config:(ChatModel *)config;
20+
//初始化语音消息模型
21+
+ (ChatModel *)initAudioMessage:(ChatAlbumModel *)audio config:(ChatModel *)config;
22+
//初始化图片消息模型
23+
+ (NSArray<ChatModel *> *)initPicMessage:(NSArray<ChatAlbumModel *> *)pics config:(ChatModel *)config;
24+
//初始化视频消息模型
25+
+ (ChatModel *)initVideoMessage:(ChatAlbumModel *)video config:(ChatModel *)config;
2326

2427
@end

‎CocoaAsyncSocket_TCP/ChatHandler/ChatUtil.m

Lines changed: 129 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ + (CGFloat)heightForMessage:(ChatModel *)currentChatmodel premodel:(ChatModel *)
5151
//语音
5252
}else if (hashEqual(currentChatmodel.contenType, Content_Audio)){
5353

54+
height = 50;
55+
//验证是否群聊
56+
[self groupChatConfig:currentChatmodel];
5457
return currentChatmodel.messageHeight += currentChatmodel.shouldShowTime ? height + 50 : height + 15;
5558
//图片
5659
}else if (hashEqual(currentChatmodel.contenType, Content_Picture)){
@@ -74,6 +77,8 @@ + (CGFloat)heightForMessage:(ChatModel *)currentChatmodel premodel:(ChatModel *)
7477
}else{
7578
height = 120;
7679
}
80+
//验证是否群聊
81+
[self groupChatConfig:currentChatmodel];
7782
return currentChatmodel.messageHeight += currentChatmodel.shouldShowTime ? height + 50 : height + 15;
7883
//视频
7984
}else if (hashEqual(currentChatmodel.contenType, Content_Video)){
@@ -102,90 +107,150 @@ + (void)groupChatConfig:(ChatModel *)chatModel
102107
#pragma marl - 创建发送消息模型
103108
+ (ChatModel *)creatMessageModel:(ChatModel *)config
104109
{
105-
ChatModel *messageModel = [[ChatModel alloc]init];
106-
ChatContentModel *content = [[ChatContentModel alloc]init];
107-
messageModel.content = content;
108-
messageModel.fromUserID = [Account account].myUserID;
109-
messageModel.toUserID = config.toUserID;
110-
messageModel.messageType = @"normal";
111-
messageModel.chatType = config.chatType;
112-
messageModel.deviceType = @"iOS";
113-
messageModel.versionCode = TCP_VersionCode;
114-
messageModel.byMyself = @1;
115-
messageModel.isSend = @0;
116-
messageModel.isRead = @0;
117-
messageModel.beatID = TCP_beatBody;
118-
messageModel.fromPortrait = [Account account].portrait;
119-
messageModel.toNickName = config.toNickName;
120-
messageModel.groupID = config.groupID;
121-
messageModel.noDisturb = config.noDisturb;
122-
return messageModel;
110+
ChatModel * chatModel = [[ChatModel alloc]init];
111+
ChatContentModel *content = [[ChatContentModel alloc]init];
112+
chatModel.content = content;
113+
chatModel.fromUserID = [Account account].myUserID;
114+
chatModel.toUserID = config.toUserID;
115+
chatModel.messageType = @"normal";
116+
chatModel.chatType = config.chatType;
117+
chatModel.deviceType = @"iOS";
118+
chatModel.versionCode = TCP_VersionCode;
119+
chatModel.byMyself = @1;
120+
chatModel.isSend = @0;
121+
chatModel.isRead = @0;
122+
chatModel.isSending = @1;
123+
chatModel.beatID = TCP_beatBody;
124+
chatModel.fromPortrait = [Account account].portrait;
125+
chatModel.toPortrait = config.toPortrait;
126+
chatModel.toNickName = config.toNickName;
127+
chatModel.groupID = config.groupID;
128+
chatModel.groupName = config.groupName;
129+
chatModel.noDisturb = config.noDisturb;
130+
131+
return chatModel;
123132
}
124133

125-
#pragma mark - 创建聊天资源缓存
126-
+ (void)creatLocalCacheSource:(ChatAlbumModel *)albumModel chat:(ChatModel *)chatModel
134+
//初始化文本消息模型
135+
+ (ChatModel *)initTextMessage:(NSString *)text config:(ChatModel *)config
136+
{
137+
ChatModel *textModel = [self creatMessageModel:config];
138+
textModel.contenType = Content_Text;
139+
textModel.content.text = text;
140+
return textModel;
141+
}
142+
//初始化语音消息模型
143+
+ (ChatModel *)initAudioMessage:(ChatAlbumModel *)audio config:(ChatModel *)config
127144
{
145+
ChatModel *audioModel = [self creatMessageModel:config];
146+
audioModel.contenType = Content_Audio;
147+
audioModel.content.seconds = audio.duration;
148+
128149
NSString *basePath = nil;
129-
if (hashEqual(chatModel.chatType, @"userChat")) {
130-
basePath = [ChatCache_Path stringByAppendingPathComponent:chatModel.toUserID];
150+
if (hashEqual(config.chatType, @"userChat")) {
151+
basePath = [ChatCache_Path stringByAppendingPathComponent:config.toUserID];
131152
}else{
132-
basePath = [ChatCache_Path stringByAppendingPathComponent:chatModel.groupID];
153+
basePath = [ChatCache_Path stringByAppendingPathComponent:config.groupID];
133154
}
134155

135156
NSFileManager *manager = [NSFileManager defaultManager];
136157
BOOL exist = [manager fileExistsAtPath:basePath];
137158
if (!exist) {
138159
[manager createDirectoryAtPath:basePath withIntermediateDirectories:YES attributes:nil error:NULL];
139160
}
140-
141-
//////////////////资源缓存
142-
//压缩比
143-
CGFloat compressScale = 1;
144-
NSData *smallAlbumData = nil;
145-
NSData *albumData = nil;
146-
//用户选择了原图
147-
if (albumModel.isOrignal) {
161+
//语音写入缓存
162+
NSString *name = [NSString stringWithFormat:@"ChatAudio_%@.mp3",audioModel.sendTime];
163+
[audio.audioData writeToFile:[basePath stringByAppendingPathComponent:name] atomically:YES];
164+
return audioModel;
165+
}
166+
//初始化图片消息模型
167+
+ (NSArray<ChatModel *> *)initPicMessage:(NSArray<ChatAlbumModel *> *)pics config:(ChatModel *)config
168+
{
169+
NSMutableArray *tmpArray = [NSMutableArray array];
170+
for (ChatAlbumModel *pic in pics) {
148171

149-
//压缩过的小图缓存 (用户界面展示,节省资源)
150-
if (albumModel.orignalData.length/1024.0) { //小于3M的
151-
152-
compressScale = 0.1; //压缩10倍
153-
}else{ //大于3M
154-
155-
compressScale = 0.05; //压缩20倍
172+
//创建图片模型
173+
ChatModel *picModel = [self creatMessageModel:config];
174+
picModel.contenType = Content_Picture;
175+
picModel.content.picSize = pic.picSize;
176+
picModel.content.fileName = pic.name;
177+
[tmpArray addObject:picModel];
178+
179+
NSString *basePath = nil;
180+
if (hashEqual(config.chatType, @"userChat")) {
181+
basePath = [ChatCache_Path stringByAppendingPathComponent:config.toUserID];
182+
}else{
183+
basePath = [ChatCache_Path stringByAppendingPathComponent:config.groupID];
156184
}
157-
UIImage *image = [UIImage imageWithData:albumModel.orignalData];
158-
//小图data
159-
smallAlbumData = UIImageJPEGRepresentation(image, compressScale);
160-
//原图data
161-
albumData = albumModel.orignalData;
162185

163-
//默认选择,未选择原图
164-
}else{
186+
NSFileManager *manager = [NSFileManager defaultManager];
187+
BOOL exist = [manager fileExistsAtPath:basePath];
188+
if (!exist) {
189+
[manager createDirectoryAtPath:basePath withIntermediateDirectories:YES attributes:nil error:NULL];
190+
}
165191

166-
//压缩过的小图缓存 (用户界面展示,节省资源)
167-
if (albumModel.normalData.length/1024.0) { //小于3M的
192+
//////////////////资源缓存
193+
//压缩比
194+
CGFloat compressScale = 1;
195+
NSData *smallAlbumData = nil;
196+
NSData *albumData = nil;
197+
//用户选择了原图
198+
if (pic.isOrignal) {
199+
200+
//压缩过的小图缓存 (用户界面展示,节省资源)
201+
if (pic.orignalPicData.length/1024.0/1024.0 < 3) { //小于3M的
202+
203+
compressScale = 0.1; //压缩10倍
204+
}else{ //大于3M
205+
206+
compressScale = 0.05; //压缩20倍
207+
}
208+
UIImage *image = [UIImage imageWithData:pic.orignalPicData];
209+
//小图data
210+
smallAlbumData = UIImageJPEGRepresentation(image, compressScale);
211+
//原图data
212+
albumData = pic.orignalPicData;
213+
214+
//默认选择,未选择原图
215+
}else{
168216

169-
compressScale = 0.1; //压缩10倍
170-
}else{ //大于3M
217+
//压缩过的小图缓存 (用户界面展示,节省资源)
218+
if (pic.normalPicData.length/1024.0/1024.0 < 3) { //小于3M的
219+
220+
compressScale = 0.1; //压缩10倍
221+
}else{ //大于3M
222+
223+
compressScale = 0.05; //压缩20倍
224+
}
171225

172-
compressScale = 0.05; //压缩20倍
226+
UIImage *image = [UIImage imageWithData:pic.normalPicData];
227+
//小图data
228+
smallAlbumData = UIImageJPEGRepresentation(image, compressScale);
229+
//原图data
230+
albumData = pic.normalPicData;
173231
}
174-
175-
UIImage *image = [UIImage imageWithData:albumModel.normalData];
176-
//小图data
177-
smallAlbumData = UIImageJPEGRepresentation(image, compressScale);
178-
//原图data
179-
albumData = albumModel.normalData;
232+
//小图缓存路径
233+
NSString *smallDetailPath = [basePath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%@",@"small",pic.name]];
234+
//原图缓存路径
235+
NSString *detailPath = [basePath stringByAppendingPathComponent:pic.name];
236+
//小图写入缓存
237+
[smallAlbumData writeToFile:smallDetailPath atomically:YES];
238+
//原图写入缓存
239+
[albumData writeToFile:detailPath atomically:YES];
180240
}
181-
//小图缓存路径
182-
NSString *smallDetailPath = [basePath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%@",@"small",albumModel.name]];
183-
//原图缓存路径
184-
NSString *detailPath = [basePath stringByAppendingPathComponent:albumModel.name];
185-
//小图写入缓存
186-
[smallAlbumData writeToFile:smallDetailPath atomically:YES];
187-
//原图写入缓存
188-
[albumData writeToFile:detailPath atomically:YES];
241+
return tmpArray;
242+
}
243+
//初始化视频消息模型
244+
+ (ChatModel *)initVideoMessage:(ChatAlbumModel *)video config:(ChatModel *)config
245+
{
246+
return nil;
189247
}
190248

249+
250+
251+
252+
253+
254+
255+
191256
@end

‎CocoaAsyncSocket_TCP/ChatModel/ChatAlbumModel.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,18 @@
1717
//大小
1818
@property (nonatomic, copy) NSString *size;
1919
//图片压缩过的data
20-
@property (nonatomic, strong) NSData *normalData;
20+
@property (nonatomic, strong) NSData *normalPicData;
2121
//图片无压缩data
22-
@property (nonatomic, strong) NSData *orignalData;
22+
@property (nonatomic, strong) NSData *orignalPicData;
23+
//音频data
24+
@property (nonatomic, strong) NSData *audioData;
2325
//图片尺寸
2426
@property (nonatomic, assign) CGSize picSize;
2527
//视频缓存地址
2628
@property (nonatomic, copy) NSString *videoCachePath;
2729
//视频缩略图
2830
@property (nonatomic, strong) UIImage *videoCoverImg;
29-
//视频时长
30-
@property (nonatomic, copy) NSString *videoDuration;
31+
//视频 , 语音时长
32+
@property (nonatomic, copy) NSString *duration;
3133

3234
@end

‎CocoaAsyncSocket_TCP/ChatModel/ChatModel.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ typedef NS_ENUM(NSInteger){
128128

129129
@property (nonatomic, assign) CGSize picSize; //图片尺寸
130130

131+
@property (nonatomic, strong) NSString *seconds; //时长
132+
131133
@property (nonatomic, copy) NSString *fileName; //文件名
132134

133135
@property (nonatomic, strong) NSNumber *videoDuration; //语音时长

‎CocoaAsyncSocket_TCP/Comon/Category/UIImage+photoPicker.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ + (void)getVideoPathFromPHAsset:(PHAsset *)asset cachePath:(NSString *)basePath
8181
//缓存路径
8282
videoModel.videoCachePath = PATH_MOVIE_FILE;
8383
//视频时长
84-
videoModel.videoDuration = [@(asset.duration)stringValue];
84+
videoModel.duration = [@(asset.duration)stringValue];
8585

8686
//异步存储
8787
dispatch_async(dispatch_get_global_queue(0, 0), ^{
@@ -239,7 +239,7 @@ + (void)openPhotoPickerGetImages:(photoPickerImagesCallback)imagesCallback targe
239239

240240
NSString *name = [[info[@"PHImageFileSandboxExtensionTokenKey"]componentsSeparatedByString:@"/"]lastObject];
241241
imageModel.name = [NSString stringWithFormat:@"chatPicture_%@%@",getCurrentTime(),name];
242-
imageModel.orignalData = data;
242+
imageModel.orignalPicData = data;
243243
imageModel.picSize = photo.size;
244244
imageModel.size = [@(data.length)stringValue];
245245

@@ -278,7 +278,7 @@ + (void)openPhotoPickerGetImages:(photoPickerImagesCallback)imagesCallback targe
278278
UIImage *orignalImg = orignalImageArray[idx];
279279
NSString *name = [[info[@"PHImageFileSandboxExtensionTokenKey"]componentsSeparatedByString:@"/"]lastObject];
280280
imageModel.name = [NSString stringWithFormat:@"chatPicture_%@%@",getCurrentTime(),name];
281-
imageModel.normalData = normalData;
281+
imageModel.normalPicData = normalData;
282282
imageModel.picSize = orignalImg.size;
283283
imageModel.size = [@(normalData.length)stringValue];
284284
//回调数据 2

‎CocoaAsyncSocket_TCP/Comon/Constant.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,10 @@ static NSString *defaulUserIcon = @"userhead"; //文本,表情消息
5151
*/
5252
static NSString *ChatlistTitle = @"聊天列表"; //聊天列表标题
5353

54-
55-
54+
/*
55+
聊天通知
56+
*/
57+
static NSString *ChatKeyboardResign = @"ChatKeyboardShouldResignFirstResponder"; //键盘失去第一响应者
5658

5759

5860

‎CocoaAsyncSocket_TCP/Comon/Helper/MYCoreTextLabel/MYCoreTextLabel.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ - (void)layoutSubviews
139139
#pragma mark - 添加链接,公共接口
140140
- (void)setText:(NSString *)text customLinks:(NSArray<NSString *> *)customLinks keywords:(NSArray<NSString *> *)keywords
141141
{
142+
if (!text.length) text = @" ";
142143
_text = text;
143144
_customLinks = customLinks;
144145
_keywords = keywords;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /