默认
发表评论 12
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
这是我的粘包处理部分. 添加了头和尾部 _mutalbeData 是一个全局的NSMutableData. 因为是异步的加了锁. 看看是否能帮到你
- (NSInteger)packData:(NSData *)datas {
    if (datas.length < kDSPersonHeaderString.length + 4 + 4) {
        return 1;
    }
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    [self.mutalbeData appendData:datas];
    dispatch_semaphore_signal(semaphore);
    NSString *string = [[NSString alloc] initWithData:_mutalbeData encoding:NSUTF8StringEncoding];
    NSArray *stringArr = [string componentsSeparatedByString:kDSpersonEndString];
    NSMutableArray *usefulStringArr = [NSMutableArray new];
    int count = 0;//用来判断此次是否读取完毕
    for (NSString *str in stringArr) {
        if ([str hasPrefix:kDSPersonHeaderString] && [str hasSuffix:@"}"]) {//判读他是json类型,
            NSString *new = [str substringWithRange:NSMakeRange(kDSPersonHeaderString.length + 4, str.length - (kDSPersonHeaderString.length + 4))];
            NSData *data = [new dataUsingEncoding:NSUTF8StringEncoding];
            id content = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
            if (content) {
                //dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
                [DSpersonToolKits unpackWithDic:content waitToSendArray:_allData lengthData:[datas subdataWithRange:NSMakeRange(kDSPersonHeaderString.length, 4)]];
               // dispatch_semaphore_signal(semaphore);
                
            }
            [usefulStringArr addObject:new];
        }else if (str.length != 0){
            NSData *strData = [str dataUsingEncoding:NSUTF8StringEncoding];
            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
            _mutalbeData = strData.mutableCopy;
            dispatch_semaphore_signal(semaphore);
            count ++;
        }
    }
    if (count == 0) {
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
        _mutalbeData = [NSMutableData data];
        dispatch_semaphore_signal(semaphore);
    }
    
    return count;
}
评论 12
居然有表情  第一个表情改为(
第二个表情删除
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部