commit 7b0c1bc7433ba03d53bac6a045fb25a91d916f98 Author: tangtaoit <tangtaoit@githubim.com> Date: Thu May 25 10:32:00 2023 +0800 init diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/.DS_Store differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..e1ef005 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ + +LiMaoIM 即时通讯的iOS SDK 详细使用请参考 + +http://docs.limaoim.cn/ + + +pod spec lint --verbose + +pod trunk push LiMaoIMSDK.podspec --allow-warnings diff --git a/WuKongIMSDK.podspec b/WuKongIMSDK.podspec new file mode 100644 index 0000000..4bc61d8 --- /dev/null +++ b/WuKongIMSDK.podspec @@ -0,0 +1,27 @@ +Pod::Spec.new do |s| + s.name = 'WuKongIMSDK' + s.version = '1.0.0' + s.summary = '悟空IM是一款简单,高效,支持完全私有化的即时通讯.' + s.license = {"type"=>"MIT", "file"=>"ios/LICENSE"} + s.authors = {"tangtaoit"=>"tt@tgo.ai"} + s.homepage = 'https://githubim.com' + s.description = '悟空IM是一款简单,高效,支持完全私有化的即时通讯,提供群聊,点对点通讯解决方案' + s.frameworks = ["UIKit", "MapKit","AVFoundation"] + # s.libraries = ["opencore-amrnb", "opencore-amrwb", "vo-amrwbenc"] + s.ios.libraries = ['c++','sqlite3','z'] + s.source = { :git => "https://gitee.com/WuKongIM/WuKongIMiOSSDK-Framework.git",:tag => "#{s.version}" } + s.requires_arc = true + s.ios.deployment_target = '12.0' + s.platform = :ios, '12.0' + s.resource = 'ios/WuKongIMSDK.framework/WuKongIMSDK.bundle' + s.vendored_frameworks = 'ios/WuKongIMSDK.framework' + s.xcconfig = { + 'OTHER_LDFLAGS' => '-ObjC', + "LIBRARY_SEARCH_PATHS"=>"${PODS_ROOT}/../../WuKongIMiOSSDK-Framework/ios/lib", + 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64', + + } + s.dependency 'CocoaAsyncSocket', '~> 7.6.4' + s.dependency 'FMDB/SQLCipher', '~>2.7.5' + s.dependency '25519', '~>2.0.2' +end diff --git a/ios/.DS_Store b/ios/.DS_Store new file mode 100644 index 0000000..a24a4ae Binary files /dev/null and b/ios/.DS_Store differ diff --git a/ios/LICENSE b/ios/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/ios/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/ios/WuKongIMSDK.framework/Headers/WKAESUtil.h b/ios/WuKongIMSDK.framework/Headers/WKAESUtil.h new file mode 100644 index 0000000..817f186 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKAESUtil.h @@ -0,0 +1,27 @@ +// +// WKAESUtil.h +// WuKongIMSDK +// +// Created by tt on 2021/2/25. +// + +#import <UIKit/UIKit.h> +#import <CommonCrypto/CommonDigest.h> +#import <CommonCrypto/CommonCryptor.h> + +/** + * AES工具类 + */ +@interface WKAESUtil : NSObject + +/** + * AES加密 + */ ++ (NSString *)aesEncrypt:(NSString *)sourceStr key:(NSString*)key iv:(NSString*)iv; + +/** + * AES解密 + */ ++ (NSString *)aesDecrypt:(NSString *)secretStr key:(NSString*)key iv:(NSString*)iv; + +@end diff --git a/ios/WuKongIMSDK.framework/Headers/WKBaseTask.h b/ios/WuKongIMSDK.framework/Headers/WKBaseTask.h new file mode 100644 index 0000000..e392bb2 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKBaseTask.h @@ -0,0 +1,26 @@ +// +// WKBaseTask.h +// WuKongIMSDK +// +// Created by tt on 2020/1/16. +// + +#import <Foundation/Foundation.h> +#import "WKTaskProto.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKBaseTask : NSObject<WKTaskProto> + +/** + 错误 如果任务下载失败,则有值 + */ +@property(nullable,nonatomic,strong) NSError *error; + +/** + 下载进度 + */ +@property(nonatomic,assign) CGFloat progress; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKCMDContent.h b/ios/WuKongIMSDK.framework/Headers/WKCMDContent.h new file mode 100644 index 0000000..af1f9e0 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKCMDContent.h @@ -0,0 +1,30 @@ +// +// WKCMDContent.h +// WuKongIMSDK +// +// Created by tt on 2020/1/31. +// + +#import "WKMediaMessageContent.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface WKCMDContent : WKMessageContent + + +/** + cmd + */ +@property(nonatomic,copy) NSString *cmd; + +/** + cmd参数 + */ +@property(nonatomic,copy) id param; + +// cmd验证字段 ,校验是否是服务端下发 +@property(nonatomic,copy) NSString *sign; // 签名字符串签出来的sign + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKCMDDB.h b/ios/WuKongIMSDK.framework/Headers/WKCMDDB.h new file mode 100644 index 0000000..da2d248 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKCMDDB.h @@ -0,0 +1,50 @@ +// +// WKCMDDB.h +// WuKongIMSDK-WuKongIMSDK +// +// Created by tt on 2020/11/21. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKCMDMessage : NSObject + +@property(nonatomic,assign) NSInteger mid; + +/// 客户端消息唯一编号(相同clientMsgNo被认为是重复消息) +@property(nonatomic,copy) NSString *clientMsgNo; +// 消息ID(全局唯一) +@property(nonatomic,assign) uint64_t messageId; +// 消息序列号(用户唯一,有序) +@property(nonatomic,assign) uint32_t messageSeq; +// 消息时间(服务器时间,单位秒) +@property(nonatomic,assign) NSInteger timestamp; + +@property(nonatomic,copy) NSString *cmd; + +@property(nonatomic,copy) NSString *param; + +// 是否为系统cmd消息 +-(BOOL) same:(WKCMDMessage*)cmdMessage; + + + +@end + +@interface WKCMDDB : NSObject + ++ (WKCMDDB *)shared; + +-(uint32_t) getMaxMessageSeq; + +-(void) replaceCMDMessages:(NSArray<WKCMDMessage*>*)messages; + +-(NSArray<WKCMDMessage*>*) queryAllCMDMessages; + +-(void) deleteCMDMessagesWithIDs:(NSArray<NSNumber*>*) ids; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKCMDManager.h b/ios/WuKongIMSDK.framework/Headers/WKCMDManager.h new file mode 100644 index 0000000..6602232 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKCMDManager.h @@ -0,0 +1,56 @@ +// +// WKCMDManager.h +// WuKongIMSDK +// +// Created by tt on 2020/10/7. +// + +#import <Foundation/Foundation.h> +#import "WKSyncConversationModel.h" +@class WKCMDManager; +NS_ASSUME_NONNULL_BEGIN + +@protocol WKCMDManagerDelegate <NSObject> + +@optional + + +/// 收到命令 +/// @param manager <#manager description#> +/// @param model <#model description#> +-(void) cmdManager:(WKCMDManager*)manager onCMD:(WKCMDModel*)model; + +@end + +@interface WKCMDManager : NSObject + +// 设置验证cmd的公钥 +@property(nonatomic,copy) NSString *pubKey; + + +/** + 添加媒体委托 + + @param delegate <#delegate description#> + */ +-(void) addDelegate:(id<WKCMDManagerDelegate>) delegate; + + +/** + 移除媒体委托 + + @param delegate <#delegate description#> + */ +-(void)removeDelegate:(id<WKCMDManagerDelegate>) delegate; + + +/// 调用接受命令委托 +/// @param model <#model description#> +-(void) callOnCMDDelegate:(WKCMDModel*)model; + +// 拉取cmd消息 +-(void) pullCMDMessages; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKChannel.h b/ios/WuKongIMSDK.framework/Headers/WKChannel.h new file mode 100644 index 0000000..d6d2745 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKChannel.h @@ -0,0 +1,33 @@ +// +// WKChannel.h +// WuKongIMSDK +// +// Created by tt on 2019/11/27. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKChannel : NSObject<NSCopying> +// 频道ID +@property(nonatomic,copy) NSString *channelId; +// 频道类型 +@property(nonatomic,assign) uint8_t channelType; + +-(instancetype) initWith:(NSString*)channelId channelType:(uint8_t)channelType; + ++(instancetype) channelID:(NSString*)channelId channelType:(uint8_t)channelType; +// 群频道 ++(instancetype) groupWithChannelID:(NSString*)channelID; +// 个人频道 ++(instancetype) personWithChannelID:(NSString*)channelID; + +// 转换为map +-(NSDictionary*) toMap; +// 从map初始化 ++(WKChannel*) fromMap:(NSDictionary*)dict; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKChannelInfo.h b/ios/WuKongIMSDK.framework/Headers/WKChannelInfo.h new file mode 100644 index 0000000..687a7a8 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKChannelInfo.h @@ -0,0 +1,147 @@ +// +// WKChannelInfo.h +// WuKongIMSDK +// +// Created by tt on 2019/12/23. +// + +#import <Foundation/Foundation.h> +#import "WKChannel.h" +#import "WKConst.h" +NS_ASSUME_NONNULL_BEGIN + +typedef enum : NSUInteger { + WKChannelInfoFollowStrange = 0, // 未关注 + WKChannelInfoFollowFriend = 1, // 已关注 + WKChannelInfoFollowAll = 2, +} WKChannelInfoFollow; + +// 扩展字段的key +typedef NSString *WKChannelExtraKey NS_STRING_ENUM; + +@interface WKChannelInfo : NSObject<NSCopying> + +// 频道 +@property(nonatomic,strong) WKChannel *channel; + +// 父类频道 +@property(nonatomic,strong,nullable) WKChannel *parentChannel; +/** + 是否已关注 0.未关注(陌生人) 1.已关注(好友) + */ +@property(nonatomic,assign) WKChannelInfoFollow follow; + +@property(nonatomic,assign) BOOL beDeleted; // 是否被对方删除 (好友单向删除) + +@property(nonatomic,assign) BOOL beBlacklist; // 是否被对方拉入黑名单 + +/** + 频道名字 + */ +@property(nonatomic,copy) NSString *name; + +/** + 频道备注 + */ +@property(nonatomic,copy) NSString *remark; + + +/// 展示的名字(如果remark为空则显示name,如果remark有值则显示remark) +@property(nonatomic,copy) NSString *displayName; + + +/** +频道公告 + */ +@property(nonatomic,copy) NSString *notice; + + +/** + 频道logo + */ +@property(nonatomic,copy) NSString *logo; + +/** + 是否置顶 + */ +@property(nonatomic,assign) BOOL stick; + + +/** + 是否免打扰 + */ +@property(nonatomic,assign) BOOL mute; + + +/** + 是否显示昵称 + */ +@property(nonatomic,assign) BOOL showNick; + + +/** + 是否保存 + */ +@property(nonatomic,assign) BOOL save; + + +/// 是否全员禁言 +@property(nonatomic,assign) BOOL forbidden; + + +/// 群聊邀请确认 +@property(nonatomic,assign) BOOL invite; + +/** + 频道版本号 + */ +@property(nonatomic,assign) long long version; + + +/// 频道状态 0.正常 2.黑名单 +@property(nonatomic,assign) NSInteger status; + + + + +/// 是否开启已读回执 +@property(nonatomic,assign) BOOL receipt; + +/// 是否开启了阅后即焚 +@property(nonatomic,assign) BOOL flame; +@property(nonatomic,assign) NSInteger flameSecond; // 开启阅后即焚的秒数 + +/// 是否是机器人 +@property(nonatomic,assign) BOOL robot; + + +/// 频道类别 +@property(nonatomic,copy) NSString *category; + +/// 是否在线 +@property(nonatomic,assign) BOOL online; +// 在线的主设备 +@property(nonatomic,assign) WKDeviceFlagEnum deviceFlag; +/// 最后一次离线时间 +@property(nonatomic,assign) NSTimeInterval lastOffline; + + +/** + 扩展字段 + */ +@property(nonatomic,strong) NSMutableDictionary<WKChannelExtraKey,id> *extra; + +/// 获取扩展字段内的值 +/// @param key <#key description#> +-(id) extraValueForKey:(WKChannelExtraKey)key; + +-(id) extraValueForKey:(WKChannelExtraKey)key defaultValue:(id _Nullable)value; + +-(void) setExtraValue:(id)value forKey:(WKChannelExtraKey)key; + +-(BOOL) settingForKey:(WKChannelExtraKey)key defaultValue:(BOOL)on; + +-(void) setSettingValue:(BOOL)on forKey:(WKChannelExtraKey)key; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKChannelInfoDB.h b/ios/WuKongIMSDK.framework/Headers/WKChannelInfoDB.h new file mode 100644 index 0000000..0cdb799 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKChannelInfoDB.h @@ -0,0 +1,135 @@ +// +// WKChannelInfoDB.h +// WuKongIMSDK +// +// Created by tt on 2019/12/23. +// + +#import <Foundation/Foundation.h> +#import "WKChannelInfo.h" +#import "WKDB.h" +#import "WKChannelInfoSearchResult.h" +#import "WKChannelMessageSearchResult.h" +NS_ASSUME_NONNULL_BEGIN + +// 频道在线状态 +typedef enum : NSUInteger { + WKOnlineStatusOffline, // 离线 + WKOnlineStatusOnline, // 在线 +} WKOnlineStatus; + +// 频道状态 +typedef enum : NSUInteger { + WKChannelStatusUnkown, + WKChannelStatusNormal, + WKChannelStatusBlacklist, +} WKChannelStatus; + +@interface WKChannelInfoDB : NSObject ++ (WKChannelInfoDB *)shared; + +/** + 保存频道信息 + + @param channelInfo 频道信息 + @return <#return value description#> + */ +-(BOOL) saveChannelInfo:(WKChannelInfo*)channelInfo; + + +/** + 批量修改或添加频道信息 + + @param channelInfos <#channelInfos description#> + @return 已存在的旧的频道信息集合 + */ +-(NSArray<WKChannelInfo*>*) addOrUpdateChannelInfos:(NSArray<WKChannelInfo*>*)channelInfos; + +/** + 更新频道信息 + + @param channelInfo <#channelInfo description#> + */ +-(void) updateChannelInfo:(WKChannelInfo*)channelInfo; + + + + +/// 更新在线状态 +/// @param channel 指定的频道 +/// @param status 在线状态 +/// @param lastOffline 最后一次离线时间 +-(void) updateChannelOnlineStatus:(WKChannel*)channel status:(WKOnlineStatus)status lastOffline:(NSTimeInterval)lastOffline; + +/** + 更新在线状态 + @param channel 指定的频道 + @param status 在线状态 + @param lastOffline 最后一次离线时间 + @param mainDeviceFlag 在线的主设备 + */ +-(void) updateChannelOnlineStatus:(WKChannel*)channel status:(WKOnlineStatus)status lastOffline:(NSTimeInterval)lastOffline mainDeviceFlag:(WKDeviceFlagEnum)mainDeviceFlag; + + +/// 删除频道信息 +/// @param channel <#channel description#> +-(void) deleteChannelInfo:(WKChannel*)channel; + +/** + 获取频道信息 + + @param channel 频道 + @return <#return value description#> + */ +-(WKChannelInfo*) queryChannelInfo:(WKChannel*)channel; +-(WKChannelInfo*) queryChannelInfo:(WKChannel*)channel db:(FMDatabase*)db; + + +/// 通过状态查询频道信息 +/// @param status 0.正常 2.黑明单 +-(NSArray<WKChannelInfo*>*) queryChannelInfosWithStatus:(WKChannelStatus)status; + + +/// 通过状态和关注类型查询频道集合 +/// @param status 状态 +/// @param follow <#follow description#> +-(NSArray<WKChannelInfo*>*) queryChannelInfosWithStatusAndFollow:(WKChannelStatus)status follow:(WKChannelInfoFollow)follow; + + +/// 获取跟我好友关系的频道数据 +/// @param keyword 关键字 +/// @param limit 数量限制 +-(NSArray<WKChannelInfo*>*) queryChannelInfoWithFriend:(NSString*)keyword limit:(NSInteger)limit; + + + +/// 查询所有在线的频道 +-(NSArray<WKChannelInfo*>*) queryChannelOnlines; + +/// 搜索频道信息 +/// @param keyword 频道关键字 +/// @param channelType 频道类型 +/// @param limit 数量限制 +-(NSArray<WKChannelInfoSearchResult*>*) searchChannelInfoWithKeyword:(NSString*)keyword channelType:(uint8_t)channelType limit:(NSInteger)limit; + + +/// 搜索频道信息 +/// @param keyword 频道关键字 +/// @param limit 数量限制 + +-(NSArray<WKChannelMessageSearchResult*>*) searchChannelMessageWithKeyword:(NSString*)keyword limit:(NSInteger)limit; + +/// 查询频道 +/// @param keyword 关键字 +/// @param channelType 频道类型 +/// @param limit 数量限制 +-(NSArray<WKChannelInfo*>*) queryChannelInfoWithType:(NSString*)keyword channelType:(uint8_t)channelType limit:(NSInteger)limit; + + +/** + 查询最近会话的频道 + */ +-(NSArray<WKChannelInfo*>*) queryAllConversationChannelInfos; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKChannelInfoSearchResult.h b/ios/WuKongIMSDK.framework/Headers/WKChannelInfoSearchResult.h new file mode 100644 index 0000000..1a6ac3e --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKChannelInfoSearchResult.h @@ -0,0 +1,28 @@ +// +// WKChannelInfoSearchResult.h +// WuKongIMSDK +// +// Created by tt on 2020/5/8. +// + +/** + select t.*,cm.member_name,cm.member_remark from ( + select channel.*,max(channel_member.id) mid from channel,channel_member where channel.channel_id=channel_member.channel_id and channel.channel_type=channel_member.channel_type and (channel.name like '%Zz%' or channel.remark like '%Zz%' or channel_member.member_name like '%Zz%' or channel_member.member_remark like '%Zz%') + group by channel.channel_id,channel.channel_type + ) t,channel_member cm where t.channel_id=cm.channel_id and t.channel_type=cm.channel_type and t.mid=cm.id + */ + +#import <Foundation/Foundation.h> +#import "WKChannelInfo.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKChannelInfoSearchResult : NSObject + +// 频道信息 +@property(nonatomic,strong) WKChannelInfo *channelInfo; + +@property(nonatomic,strong) NSString *containMemberName; // 包含的成员名字,如果有 + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKChannelManager.h b/ios/WuKongIMSDK.framework/Headers/WKChannelManager.h new file mode 100644 index 0000000..65f8c12 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKChannelManager.h @@ -0,0 +1,255 @@ +// +// WKChannelManager.h +// WuKongIMSDK +// +// Created by tt on 2019/12/23. +// + +#import <Foundation/Foundation.h> +#import "WKChannel.h" +#import "WKChannelInfo.h" +#import "WKChannelMemberDB.h" +#import "WKTaskOperator.h" + + +NS_ASSUME_NONNULL_BEGIN + + +@protocol WKChannelManagerDelegate <NSObject> + +@optional + + +/** + 频道信息更新 + + @param channelInfo <#channelInfo description#> + */ +-(void) channelInfoUpdate:(WKChannelInfo*)channelInfo; + +-(void) channelInfoUpdate:(WKChannelInfo*)channelInfo oldChannelInfo:(WKChannelInfo* __nullable)oldChannelInfo; + + +/// 频道数据移除 +/// @param channel <#channel description#> +-(void) channelInfoDelete:(WKChannel*)channel oldChannelInfo:(WKChannelInfo * __nullable )oldChannelInfo; + +@end + + +typedef void (^WKChannelInfoBlock)(WKChannelInfo*); + +@interface WKChannelManager : NSObject + ++ (WKChannelManager *)shared; + +/** + 获取频道信息 + + @param channel 频道 + @param channelInfoBlock 获取到频道信息回调 + */ +-(WKTaskOperator*) fetchChannelInfo:(WKChannel*) channel completion:(_Nullable WKChannelInfoBlock)channelInfoBlock; + +-(void) fetchChannelInfo:(WKChannel*) channel; + +/** + 添加频道请求(此方法时候大量cell获取频道数据) + */ +-(void) addChannelRequest:(WKChannel*)channel complete:(void(^_Nullable)(NSError *error,bool notifyBefore))complete; + +/** + 取消请求 + */ +-(void) cancelRequest:(WKChannel*)channel; + +/** + 获取频道信息 + + @param channel 频道 + @return <#return value description#> + */ +-(WKChannelInfo*) getChannelInfo:(WKChannel*)channel; + +/** + 获取用户频道信息 + */ +-(WKChannelInfo*) getChannelInfoOfUser:(NSString*)uid; + +/** +删除频道信息 + */ +-(void) deleteChannelInfo:(WKChannel*) channel; + + +/** + 添加或更新频道,如果需要更新的话(只与version大于当前库里的version才更新) + + @param channelInfo <#channelInfo description#> + */ +-(void) addOrUpdateChannelInfoIfNeed:(WKChannelInfo*) channelInfo; + + +/** + 添加或更新(不比较版本) + + @param channelInfo <#channelInfo description#> + */ +-(void) addOrUpdateChannelInfo:(WKChannelInfo*) channelInfo; + + +/// 更新频道信息 +/// @param channelInfo <#channelInfo description#> +-(void) updateChannelInfo:(WKChannelInfo*) channelInfo; + + +/// 添加频道信息 +/// @param channelInfo <#channelInfo description#> +-(void) addChannelInfo:(WKChannelInfo*) channelInfo; +/** + 更新频道设置 + + @param channel 频道 + @param setting 频道设置字典 比例设置免打扰 则传 @{@"mute":@(true)} 设置多个 @{@"mute":@(true),@"stick":@(true)} + */ +-(void) updateChannelSetting:(WKChannel*)channel setting:(NSDictionary*)setting; + + +/** + 批量添加或更新频道信息 (不通知上层) + + @param channelInfos <#channelInfos description#> + */ +-(void) addOrUpdateChannelInfos:(NSArray<WKChannelInfo*>*) channelInfos; + + +/** + 删除某个频道内的成员 + @param channel 频道 + */ +-(void) deleteMembers:(WKChannel*)channel; + +/** + 添加或更新频道成员 + + @param members 频道成员集合 + */ +-(void) addOrUpdateMembers:(NSArray<WKChannelMember*>*)members; + + +/** + 获取频道成员集合 + + @param channel 频道对象 + @return <#return value description#> + */ +-(NSArray<WKChannelMember*>*) getMembersWithChannel:(WKChannel*)channel; + +/** + 获取频道成员集合 + @param channel 频道对象 + @param limit 数量限制 + */ +-(NSArray<WKChannelMember*>*) getMembersWithChannel:(WKChannel*)channel limit:(NSInteger)limit; + +/** + 频道成员数量 + */ +-(NSInteger) getMemberCount:(WKChannel*)channel; + + +/** + 获取频道指定成员 + + @param channel 频道 + @param uid 成员UID + */ +-(WKChannelMember*) getMember:(WKChannel*)channel uid:(NSString*)uid; + + + +/// 是否是管理员(群主或管理员) +/// @param channel <#channel description#> +/// @param uid <#uid description#> +-(BOOL) isManager:(WKChannel*)channel memberUID:(NSString*)uid; + +/** + 获取频道的成员最新同步key + + @param channel 频道信息 + @return <#return value description#> + */ +-(NSString*) getMemberLastSyncKey:(WKChannel*)channel; + + +/// 设置频道在线 +/// @param channel <#channel description#> +/// @param deviceFlag 设备标记 +-(void) setChannelOnline:(WKChannel*)channel deviceFlag:(WKDeviceFlagEnum)deviceFlag; +-(void) setChannelOnline:(WKChannel*)channel; + +/// 设置频道离线 +/// @param channel <#channel description#> +-(void) setChannelOffline:(WKChannel*)channel; +- (void)setChannelOffline:(WKChannel *)channel deviceFlag:(WKDeviceFlagEnum)deviceFlag; + + +/// 只更新频道的在线状态 +/// @param online <#online description#> +-(void) updateChannelOnlineStatus:(WKChannel*)channel online:(BOOL)online; + + + +/// 设置频道离线 +/// @param channel 频道 +/// @param lastOffline 最后一次离线时间 +/// @param deviceFlag 最后一次离线的设备 +- (void)setChannelOffline:(WKChannel *)channel lastOffline:(NSTimeInterval)lastOffline deviceFlag:(WKDeviceFlagEnum)deviceFlag; +-(void) setChannelOffline:(WKChannel*)channel lastOffline:(NSTimeInterval)lastOffline; +/** + 设置频道缓存 + + @param channelInfo <#channelInfo description#> + */ +-(void) setCache:(WKChannelInfo*) channelInfo; + + +/** + 获取缓存内的频道信息 + + @return <#return value description#> + */ +-(WKChannelInfo*) getCache:(WKChannel*)channel; + + +/** + 从缓存中获取频道成员 + */ +-(WKChannelMember*) getMemberFromCache:(WKChannel *)channel uid:(NSString *)uid; + + +// 删除频道的成员缓存 +-(void) deleteMembersWithChannelFromCache:(WKChannel*)channel; + +/** + 移除频道所有缓存 + */ +-(void) removeChannelAllCache; +/** + 添加连接委托 + + @param delegate <#delegate description#> + */ +-(void) addDelegate:(id<WKChannelManagerDelegate>) delegate; + + +/** + 移除连接委托 + + @param delegate <#delegate description#> + */ +-(void)removeDelegate:(id<WKChannelManagerDelegate>) delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKChannelMemberDB.h b/ios/WuKongIMSDK.framework/Headers/WKChannelMemberDB.h new file mode 100644 index 0000000..b856317 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKChannelMemberDB.h @@ -0,0 +1,169 @@ +// +// WKChannelMemberDB.h +// WuKongIMSDK +// +// Created by tt on 2020/1/20. +// + +#import <Foundation/Foundation.h> +#import "WKChannel.h" +NS_ASSUME_NONNULL_BEGIN + +// 成员角色 +typedef enum : NSUInteger { + WKMemberRoleCommon, // 普通成员 + WKMemberRoleCreator, // 创建者 + WKMemberRoleManager, // 管理员 +} WKMemberRole; + +// 成员状态 +typedef enum : NSUInteger { + WKMemberStatusUnknown, + WKMemberStatusNormal, // 正常 + WKMemberStatusBlacklist, // 被拉入黑名单 +} WKMemberStatus; + +@interface WKChannelMember : NSObject + +@property(nonatomic,copy) NSString *channelId; // 频道ID +@property(nonatomic,assign) uint8_t channelType; // 频道类型 +@property(nonatomic,copy) NSString *memberAvatar; // 成员头像 +@property(nonatomic,copy) NSString *memberUid; // 成员uid +@property(nonatomic,copy) NSString *memberName; // 成员名称 +@property(nonatomic,copy) NSString *memberRemark; // 成员备注 + +@property(nonatomic,copy,readonly) NSString *displayName; + +@property(nonatomic,assign) WKMemberRole role; // 成员角色 +@property(nonatomic,assign) WKMemberStatus status; // 成员状态 + +@property(nonatomic,strong) NSNumber *version; // 版本 +@property(nonatomic,strong) NSMutableDictionary *extra; // 扩展字段 + +@property(nonatomic,strong) NSString *createdAt; // 成员加入时间 +@property(nonatomic,strong) NSString *updatedAt; // 成员数据最后一次更新时间 + +@property(nonatomic,assign) BOOL robot; // 是否是机器人 +@property(nonatomic,assign) BOOL isDeleted; // 是否已删除 + +@end + +@interface WKChannelMemberDB : NSObject + ++ (WKChannelMemberDB *)shared; + + +/** + 添加或更新成员 + + @param members <#members description#> + */ +-(void) addOrUpdateMembers:(NSArray<WKChannelMember*>*)members; + + +/// 删除频道成员 +/// @param channel <#channel description#> +-(void) deleteMembers:(WKChannel*)channel; + +/** + 获取频道的成员最新同步key + + @param channel 频道信息 + @return <#return value description#> + */ +-(NSString*) getMemberLastSyncKey:(WKChannel*)channel; + + +/** + 获取频道对应的成员列表 + + @param channel 频道 + @return <#return value description#> + */ +-(NSArray<WKChannelMember*>*) getMembersWithChannel:(WKChannel*)channel; + +/** + 获取频道成员集合 + @param channel 频道对象 + @param limit 数量限制 + */ +-(NSArray<WKChannelMember*>*) getMembersWithChannel:(WKChannel*)channel limit:(NSInteger)limit; + +/** + 获取频道成员集合(分页查询) + @param channel 频道对象 + @param keyword 名字关键字筛选 为空则不做为条件筛选 + @page page 页码 从1开始 + @param limit 数量限制 + */ +-(NSArray<WKChannelMember*>*) getMembersWithChannel:(WKChannel*)channel keyword:(NSString*)keyword page:(NSInteger)page limit:(NSInteger)limit; +-(NSArray<WKChannelMember*>*) getMembersWithChannel:(WKChannel*)channel role:(WKMemberRole)role; + +/// 获取群内的黑名单成员 +/// @param channel <#channel description#> +-(NSArray<WKChannelMember*>*) getBlacklistMembersWithChannel:(WKChannel*)channel; + + +/// 获取管理员和创建者列表 +/// @param channel 频道 +-(NSArray<WKChannelMember*>*) getManagerAndCreator:(WKChannel*)channel; + +/** + 获取频道内指定uid的成员列表 + + @param channel <#channel description#> + @param uids <#uids description#> + @return <#return value description#> + */ +-(NSArray<WKChannelMember*>*) getMembersWithChannel:(WKChannel*)channel uids:(NSArray<NSString*>*)uids; + + +/** + 更新指定用户的成员状态 +@param status 成员状态 +@param channel 频道 +@param uids 成员uid集合 + */ +-(void) updateMemberStatus:(WKMemberStatus)status channel:(WKChannel*) channel uids:(NSArray<NSString*>*)uids; + +/** + 是否是管理员 (群主或管理者) + + @param channel 频道 + @param uid 用户UID + @return <#return value description#> + */ +-(BOOL) isManager:(WKChannel*)channel memberUID:(NSString*)uid; + + +/** + 是否是创建者 + + @param channel 频道 + @param uid 用户UID + @return <#return value description#> + */ +-(BOOL) isCreator:(WKChannel*)channel memberUID:(NSString*)uid; + + +/// 成员是否存在频道里 +/// @param channel 频道对象 +/// @param uid 成员uid +-(BOOL) exist:(WKChannel*)channel uid:(NSString*)uid; + +/** + 获取指定的成员信息 + + @param channel 频道 + @param uid 成员UID + @return 成员信息 + */ +- (WKChannelMember*)get:(WKChannel*)channel memberUID:(NSString *)uid; + +/** + 获取成员数量 + */ +-(NSInteger) getMemberCount:(WKChannel*)channel; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKChannelMessageSearchResult.h b/ios/WuKongIMSDK.framework/Headers/WKChannelMessageSearchResult.h new file mode 100644 index 0000000..c2f0e5c --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKChannelMessageSearchResult.h @@ -0,0 +1,26 @@ +// +// WKMessageSearchResult.h +// WuKongIMSDK +// +// Created by tt on 2020/5/10. +// + +#import <Foundation/Foundation.h> +#import "WKChannelInfo.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKChannelMessageSearchResult : NSObject + +// 频道信息 +@property(nonatomic,strong) WKChannel *channel; + +// 消息数量 +@property(nonatomic,assign) NSInteger messageCount; +// 客户端序列号 +@property(nonatomic,assign) uint32_t orderSeq; +// 消息可搜索内容 +@property(nonatomic,copy) NSString *searchableWord; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKChannelRequestQueue.h b/ios/WuKongIMSDK.framework/Headers/WKChannelRequestQueue.h new file mode 100644 index 0000000..2c97d74 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKChannelRequestQueue.h @@ -0,0 +1,22 @@ +// +// WKChannelRequestQueue.h +// WuKongIMSDK +// +// Created by tt on 2021/4/22. +// + +#import <Foundation/Foundation.h> +#import "WKChannel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKChannelRequestQueue : NSObject + ++ (WKChannelRequestQueue *)shared; + + +-(void) addRequest:(WKChannel*)channel complete:(void(^)(NSError *error,bool notifyBefore))complete; + +-(void) cancelRequest:(WKChannel*)channel; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKChatDataProvider.h b/ios/WuKongIMSDK.framework/Headers/WKChatDataProvider.h new file mode 100644 index 0000000..8fcd891 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKChatDataProvider.h @@ -0,0 +1,30 @@ +// +// WKChatDataProvider.h +// Pods +// +// Created by tt on 2022/5/27. +// +#import "WKSyncChannelMessageModel.h" +#ifndef WKChatDataProvider_h +#define WKChatDataProvider_h + + +#endif /* WKChatDataProvider_h */ + + +NS_ASSUME_NONNULL_BEGIN +// 同步频道消息 +typedef void(^WKSyncChannelMessageCallback)(WKSyncChannelMessageModel* __nullable syncChannelMessageModel,NSError * __nullable error); +typedef void (^WKSyncChannelMessageProvider)(WKChannel *channel,uint32_t startMessageSeq,uint32_t endMessageSeq,NSInteger limit,WKPullMode pullMode,WKSyncChannelMessageCallback callback); + +// 扩展消息 +typedef void(^WKSyncMessageExtraCallback)(NSArray<WKMessageExtra*>* __nullable results,NSError * __nullable error); +typedef void(^WKSyncMessageExtraProvider)(WKChannel *channel,long long extraVersion,NSInteger limit,WKSyncMessageExtraCallback callback); +typedef void(^WKUpdateMessageExtraCallback)(NSError *error); +typedef void(^WKUpdateMessageExtraProvider) (WKMessageExtra *newExtra,WKMessageExtra *oldExtra,WKUpdateMessageExtraCallback callback); + +// 消息编辑 +typedef void(^WKMessageEditCallback)(NSError * __nullable error); +typedef void(^WKMessageEditProvider)(WKMessageExtra *extra,WKMessageEditCallback callback); + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKChatManager.h b/ios/WuKongIMSDK.framework/Headers/WKChatManager.h new file mode 100644 index 0000000..34aabc5 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKChatManager.h @@ -0,0 +1,393 @@ +// +// WKChatManager.h +// WuKongIMSDK +// +// Created by tt on 2019/11/27. +// + +#import <Foundation/Foundation.h> +#import "WKMessage.h" +#import "WKMessageContent.h" +#import "WKSendackPacket.h" +#import "WKRecvPacket.h" +#import "WKConversation.h" +#import "WKMessageStatusModel.h" +#import "WKSyncChannelMessageModel.h" +#import "WKSetting.h" +#import "WKMessageExtra.h" +#import "WKChatDataProvider.h" + +@protocol WKChatManagerDelegate; + +NS_ASSUME_NONNULL_BEGIN +typedef BOOL(^MessageStoreBeforeIntercept)(WKMessage*message); + + + +@interface WKChatManager : NSObject + + +/** + 发送消息 (发送并保存消息) + + @param content 消息正文 + @param channel 投递到那个频道 + */ +-(WKMessage*) sendMessage:(WKMessageContent*)content channel:(WKChannel*)channel; + +/** + 发送消息 (发送并保存消息) + @param content 消息正文 + @param channel 投递到那个频道 + @param topic 话题 + */ +-(WKMessage*) sendMessage:(WKMessageContent*)content channel:(WKChannel*)channel topic:(NSString*)topic; + +/** + 发送消息 (发送并保存消息) + + @param content 消息正文 + @param channel 投递到那个频道 + @param setting 消息设置 + */ +-(WKMessage*) sendMessage:(WKMessageContent*)content channel:(WKChannel*)channel setting:(WKSetting * __nullable)setting; + +-(WKMessage*) sendMessage:(WKMessageContent*)content channel:(WKChannel*)channel setting:(WKSetting * __nullable)setting topic:(NSString*)topic; + +/** + 发送消息(仅仅发送,不保存) + + @param message 消息 + @return <#return value description#> + */ +-(WKMessage*) sendMessage:(WKMessage*)message; + +/// 发送消息 +/// @param message 消息对象 +/// @param addRetryQueue 是否添加到重试队列,如果是true,消息发送失败将会进行指定次数的重试 +-(WKMessage*) sendMessage:(WKMessage*)message addRetryQueue:(BOOL)addRetryQueue; + + +/** + 消息重发 + @param message 重发的消息 + */ +-(WKMessage*) resendMessage:(WKMessage*)message; + + + +/** + 保存消息 (都为自己所发消息) + + @param content 消息正文 + @param channel 频道 + */ +-(WKMessage*) saveMessage:(WKMessageContent*)content channel:(WKChannel*)channel; + + +/** + 保存消息(可自定发送者) + + @param content 消息正文 + @param channel 频道 + @param fromUid 发送者uid + @return <#return value description#> + */ +-(WKMessage*) saveMessage:(WKMessageContent*)content channel:(WKChannel*)channel fromUid:( NSString* __nullable)fromUid; + +-(WKMessage*) saveMessage:(WKMessageContent*)content channel:(WKChannel*)channel fromUid:(NSString* __nullable)fromUid status:(WKMessageStatus)status; + + +/// 保存消息 +-(void) saveMessages:(NSArray<WKMessage*>*)messages; + +/** + 转发消息 + + @param content 消息正文 + @param channel 频道 + @return <#return value description#> + */ +-(WKMessage*) forwardMessage:(WKMessageContent*)content channel:(WKChannel*)channel; + +/** + 编辑消息 + @param message 需要编辑的消息 + @param newContent 编辑后的正文 + */ +-(WKMessage*) editMessage:(WKMessage*)message newContent:(WKMessageContent*)newContent; + +/** + 删除消息 + + @param message 消息对象 + */ +-(void) deleteMessage:(WKMessage*)message; + +/** + 删除指定频道指定发送者的消息 + */ +-(void) deleteMessage:(NSString*)fromUID channel:(WKChannel*)channel; + + +/** + 清除指定频道的消息 + + @param channel 频道 + */ +-(void) clearMessages:(WKChannel*)channel; + + +/// 清除当前用户的所有消息 +-(void) clearAllMessages; + +/** + 清除指定maxMsgSeq以前的所有消息 + @param channel 频道 + @param maxMsgSeq 指定的messageSeq + @param isContain 清除的消息是否包含指定的maxMsgSeq + */ +- (void) clearFromMsgSeq:(WKChannel*)channel maxMsgSeq:(uint32_t)maxMsgSeq isContain:(BOOL)isContain; + +/** + 查询某个频道最新的消息 (一般是第一次进入会话页面查询首屏消息时调用此方法) + @param channel 频道 + @param limit 消息数量限制 + @param complete 查询回调 + */ +-(void) pullLastMessages:(WKChannel*)channel limit:(int)limit complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete; + +/** + 查询某个频道最新的消息 (一般是第一次进入会话页面查询首屏消息时调用此方法) + @param channel 频道 + @param limit 消息数量限制 + @param complete 查询回调 + @param alwayRequest 是否总是从服务器请求最新的消息数据 + */ +-(void) pullLastMessages:(WKChannel*)channel limit:(int)limit alwayRequest:(BOOL)alwayRequest complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete; + +/** + 下拉加载消息 + @param channel 频道 + @param startOrderSeq 起始的orderSeq 比如需要查询 100以上的10条消息 那么startOrderSeq就是100 查询出来的数据为 90 91 92 93 94 95 96 97 98 99 + @param limit 消息数量限制 + @param complete 查询回调 + */ +-(void) pullDown:(WKChannel*)channel startOrderSeq:(uint32_t)startOrderSeq limit:(int)limit complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete; + +/** + 上拉加载消息 + @param startOrderSeq 起始的orderSeq 比如需要查询 100以下的10条消息 那么startOrderSeq就是100 查询出来的数据为 101 102 103 104 105 106 107 108 109 110 + @param limit 消息数量限制 + @param complete 查询回调 + */ +-(void) pullUp:(WKChannel*)channel startOrderSeq:(uint32_t)startOrderSeq limit:(int)limit complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete; + +/** + 查询指定orderSeq周围的消息 上5条下5条 ,比如 orderSeq 为 20 则查询 16 17 18 19 20 21 22 23 24 25 主要使用在定位消息 + @param channel 频道 + @param orderSeq 以此OrderSeq查询周围的消息 + */ +-(void) pullAround:(WKChannel*)channel orderSeq:(uint32_t)orderSeq limit:(int)limit complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete; + + + +/** + 拉取历史消息 + @param channel 频道 + @param startOrderSeq 基准messageSeq 以此messageSeq为基准进行上下浮动查询 + @param endOrderSeq 结束的messageSeq 查询到此messageSeq为终止 如果为 0 则不做限制 limit限制查询数量 + @param limit 消息数量限制 + @param pullMode 拉取方式 + @param complete 查询回调 + */ +-(void) pullMessages:(WKChannel*)channel startOrderSeq:(uint32_t)startOrderSeq endOrderSeq:(uint32_t)endOrderSeq limit:(int)limit pullMode:(WKPullMode)pullMode complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete DEPRECATED_MSG_ATTRIBUTE("use pullDown or pullUp"); + +/** + 查询消息 + @param channel 频道 + @param aroundOrderSeq 以此OrderSeq查询周围的消息 + */ +-(void) getMessages:(WKChannel*)channel aroundOrderSeq:(uint32_t)aroundOrderSeq limit:(int)limit complete:(void(^)(NSArray<WKMessage*> *messages,NSError *error))complete DEPRECATED_MSG_ATTRIBUTE("use pullAround");; + + +/** + 更新语音消息已读状态 + + @param message 消息 + */ +-(void) updateMessageVoiceReaded:(WKMessage*)message; + +/** + 更新本地扩展数据 + + @param message 消息对象 + */ +-(void) updateMessageLocalExtra:(WKMessage*)message; + +/** + 更新消息远程扩展 + */ +-(void) updateMessageRemoteExtra:(WKMessage*)message; + + +/// 撤回消息 +/// @param message <#message description#> +-(void) revokeMessage:(WKMessage*)message; + + + +/// 获取orderSeq +/// @param messageSeq <#messageSeq description#> +-(uint32_t) getOrderSeq:(uint32_t)messageSeq; + +-(uint32_t) getMessageSeq:(uint32_t) orderSeq; + +/** + 获取最接近orderSeq的有效orderSeq + */ +-(uint32_t) getOrNearbyMessageSeq:(uint32_t)orderSeq; + + +/// 正文包装为消息 +/// @param content 消息正文 +/// @param channel 频道 +/// @param fromUid 发送者UID +-(WKMessage*) contentToMessage:(WKMessageContent*)content channel:(WKChannel*)channel fromUid:(NSString * __nullable)fromUid; + + + +/// 通过正文类型获取content +/// @param contentType 正文类型 +-(WKMessageContent*) getMessageContent:(NSInteger)contentType; + +/** + 添加委托 + + @param delegate <#delegate description#> + */ +-(void) addDelegate:(id<WKChatManagerDelegate>) delegate; + + +/** + 移除委托 + + @param delegate <#delegate description#> + */ +-(void)removeDelegate:(id<WKChatManagerDelegate>) delegate; + + + +/// 添加消息存储之拦截器 +/// @param sid 拦截器唯一ID +/// @param intercept 拦截器 返回true表示消息存储 返回false表示消息不存储 +-(void) addMessageStoreBeforeIntercept:(NSString*)sid intercept:(MessageStoreBeforeIntercept)intercept; + + +/// 移除消息存储之前的拦截器 +/// @param sid 拦截器唯一ID +-(void) removeMessageStoreBeforeIntercept:(NSString*)sid; + + + + + +/// 调用拦截器获得消息是否需要存储 +/// @param message <#message description#> +-(BOOL) needStoreOfIntercept:(WKMessage*)message; + +/** + 同步消息的扩展数据 + */ +-(void) syncMessageExtra:(WKChannel*)channel complete:(void(^_Nullable)(NSError * _Nullable error))complete; + +/** + 标记消息为已读 + */ +//-(void) markReaded:(WKChannel*)channel messages:(NSArray<WKMessage*>*)messages; + + +// 获取某个频道内最新的消息 +-(WKMessage*) getLastMessage:(WKChannel*)channel; + +// 通知UI消息更新 +- (void)callMessageUpdateDelegate:(WKMessage*)message; + +// 通知UI收到消息 +- (void)callRecvMessagesDelegate:(NSArray<WKMessage*>*)messages; + +/// 同步频道消息提供者(由第三方设置) +@property(nonatomic,copy) WKSyncChannelMessageProvider syncChannelMessageProvider; + +@property(nonatomic,copy) WKSyncMessageExtraProvider syncMessageExtraProvider; // 同步消息扩展 +@property(nonatomic,copy) WKUpdateMessageExtraProvider updateMessageExtraProvider; // 更新消息扩展 + +// 消息编辑提供者 +@property(nonatomic,copy) WKMessageEditProvider messageEditProvider; + +@end + +/** + 聊天管理委托 + */ +@protocol WKChatManagerDelegate <NSObject> + +@optional + +/** + 收到消息回调 + + @param message 收到的消息 + @param left 消息剩余数量 ,可当left为0时再刷新UI + */ +- (void)onRecvMessages:(WKMessage*)message left:(NSInteger)left; + +/** + 消息更新 + + @param message <#message description#> + @param left 消息剩余数量 ,可当left为0时再刷新UI + */ +-(void) onMessageUpdate:(WKMessage*) message left:(NSInteger)left; + +/** + 消息更新 + + @param message <#message description#> + @param left 消息剩余数量 ,可当left为0时再刷新UI + @param total 消息总数量 + */ +-(void) onMessageUpdate:(WKMessage*) message left:(NSInteger)left total:(NSInteger)total; + +/** + 发送消息回执回调 + */ +-(void) onSendack:(WKSendackPacket*) sendackPacket left:(NSInteger)left; + + +/** + 消息被删除 + + @param message 被删除的消息 + */ +-(void) onMessageDeleted:(WKMessage*) message; + + +/** + 指定频道的消息已清除 + + @param channel <#channel description#> + */ +-(void) onMessageCleared:(WKChannel*)channel; + + +/// 清除所有消息 +-(void) onMessageAllCleared; + + + +@end + + + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKChatManagerInner.h b/ios/WuKongIMSDK.framework/Headers/WKChatManagerInner.h new file mode 100644 index 0000000..cbb2b7c --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKChatManagerInner.h @@ -0,0 +1,59 @@ +// +// WKChatManagerInner.h +// Pods +// +// Created by tt on 2022/5/27. +// + +#ifndef WKChatManagerInner_h +#define WKChatManagerInner_h + + +#endif /* WKChatManagerInner_h */ + + +@interface WKChatManager () + + +/** + 处理发送消息回执 + + @param sendackArray <#sendackArray description#> + */ +-(void) handleSendack:(NSArray<WKSendackPacket*> *)sendackArray; + + +/** + 处理收到消息 + + @param packets <#packets description#> + */ +-(void) handleRecv:(NSArray<WKRecvPacket*>*) packets; + + +/** + 处理消息 (流程: 保存消息-> 触发收到消息委托 -> 保存或更新最近会话 -> 触发最近会话委托) + + @param messages <#messages description#> + */ +-(void) handleMessages:(NSArray<WKMessage*>*) messages; + + +// 调用消息状态改变委托 +//- (void)callMessageStatusChangeDelegate:(NSArray<WKMessageStatusModel*>*)statusModels; + +// 调用消息更新委托 +- (void)callMessageUpdateDelegate:(WKMessage*)message left:(NSInteger)left total:(NSInteger)total; + + + +/// 调用收到消息的委托 +/// @param messages <#messages description#> +- (void)callRecvMessagesDelegate:(NSArray<WKMessage*>*)messages; + +/// 获取所有消息存储之前的拦截器 +-(NSArray<MessageStoreBeforeIntercept>*) getMessageStoreBeforeIntercepts; + + + +@end diff --git a/ios/WuKongIMSDK.framework/Headers/WKCoder.h b/ios/WuKongIMSDK.framework/Headers/WKCoder.h new file mode 100644 index 0000000..16f6acb --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKCoder.h @@ -0,0 +1,35 @@ +// +// WKCoder.h +// WuKongIMSDK +// +// Created by tt on 2019/11/25. +// + +#import <Foundation/Foundation.h> +#import "WKPacket.h" +NS_ASSUME_NONNULL_BEGIN + + +@interface WKCoder : NSObject + + +/** + 编码包 + + @param packet 包对象 + @return 返回包的二进制数据 + */ +-(NSData*) encode:(WKPacket*)packet; + + +/** + 解码包 + + @param data <#data description#> + @return <#return value description#> + */ +-(WKPacket*) decode:(NSData*)data; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKConnackPacket.h b/ios/WuKongIMSDK.framework/Headers/WKConnackPacket.h new file mode 100644 index 0000000..28758c5 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKConnackPacket.h @@ -0,0 +1,27 @@ +// +// WKConnackPacket.h +// WuKongIMSDK +// +// Created by tt on 2019/11/26. +// + +#import <Foundation/Foundation.h> +#import "WKPacket.h" +#import "WKPacketBodyCoder.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKConnackPacket : WKPacket<WKPacketBodyCoder> + +// 通过客户端的RSA公钥加密的服务端DH公钥 +@property(nonatomic,copy) NSString *serverKey; +// 安全吗 +@property(nonatomic,copy) NSString *salt; +// 客户端与服务器的时间差值 +@property(nonatomic,assign) int64_t timeDiff; + +// 连接返回原因代号 +@property(nonatomic,assign) uint8_t reasonCode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKConnectInfo.h b/ios/WuKongIMSDK.framework/Headers/WKConnectInfo.h new file mode 100644 index 0000000..96b25e2 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKConnectInfo.h @@ -0,0 +1,23 @@ +// +// WKConnectInfo.h +// WuKongIMSDK +// +// Created by tt on 2020/2/7. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKConnectInfo : NSObject + +@property(nonatomic,copy) NSString *uid; +@property(nonatomic,copy) NSString *token; +@property(nonatomic,copy) NSString *name; +@property(nonatomic,copy) NSString *avatar; + ++(instancetype) initWithUID:(NSString*)uid token:(NSString*)token name:(NSString*)name avatar:(NSString*)avatar; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKConnectPacket.h b/ios/WuKongIMSDK.framework/Headers/WKConnectPacket.h new file mode 100644 index 0000000..45c072d --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKConnectPacket.h @@ -0,0 +1,32 @@ +// +// WKConnectPacket.h +// WuKongIMSDK +// +// Created by tt on 2019/11/25. +// + +#import <Foundation/Foundation.h> +#import "WKPacket.h" +#import "WKPacketBodyCoder.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKConnectPacket : WKPacket<WKPacketBodyCoder> + +// 协议版本号 +@property(nonatomic,assign) uint8_t version; +// 客户端KEY (base64编码的DH公钥) +@property(nonatomic,copy) NSString *clientKey; +// 用户的唯一uid +@property(nonatomic,copy) NSString *uid; +// 连接凭证token +@property(nonatomic,copy) NSString *token; +// 设备标示 0.app 1.pc +@property(nonatomic,assign) uint8_t deviceFlag; +// 设备ID +@property(nonatomic,copy) NSString *deviceId; +// 客户端当前时间戳(13位时间戳,到毫秒) +@property(nonatomic,assign) uint64_t clientTimestamp; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKConnectionManager.h b/ios/WuKongIMSDK.framework/Headers/WKConnectionManager.h new file mode 100644 index 0000000..47c6cce --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKConnectionManager.h @@ -0,0 +1,110 @@ +// +// WKConnectionManager.h +// WuKongIMSDK +// +// Created by tt on 2019/11/23. +// + +#import <Foundation/Foundation.h> +#import "WKPacket.h" +#import "WKConnectInfo.h" +#import "WKConst.h" +NS_ASSUME_NONNULL_BEGIN + + +typedef enum : NSUInteger { + WKNoConnect, // 未连接 + WKConnecting, // 连接中 + WKPullingOffline, // 拉取离线中 + WKConnected, // 已建立连接 + WKDisconnected, // 断开连接 +} WKConnectStatus; + + + + + + +@protocol WKConnectionManagerDelegate <NSObject> + +@optional +/** + 连接状态监听 + */ +-(void) onConnectStatus:(WKConnectStatus)status reasonCode:(WKReason)reasonCode; + + +/** + 连接被踢出 + + @param reasonCode 踢出原因代号 + @param reason 踢出原因字符串 + */ +-(void) onKick:(uint8_t)reasonCode reason:(NSString*)reason; +@end + +@interface WKConnectionManager : NSObject + ++ (WKConnectionManager*)sharedManager; + +@property(nonatomic,assign,readonly) WKConnectStatus connectStatus; + + +/// 获取连接地址 +@property(nonatomic,copy) void(^getConnectAddr)(void(^complete)(NSString * __nullable addr)); +/** + * 连接悟空IM服务器 + */ +-(void) connect; + +/** + 断开连接 + @param force 是否强制断开 如果force设置为true 将不再自动重连 + */ +-(void) disconnect:(BOOL) force; + + +/// 登出,将强制断开,并清除登录信息 +-(void) logout; + + +/** + 添加连接委托 + + @param delegate <#delegate description#> + */ +-(void) addDelegate:(id<WKConnectionManagerDelegate>) delegate; + + +/** + 移除连接委托 + + @param delegate <#delegate description#> + */ +-(void)removeDelegate:(id<WKConnectionManagerDelegate>) delegate; + + +/** + 发送包 + + @param packet <#packet description#> + */ +-(void) sendPacket:(WKPacket*)packet; + + +/** + 发送ping包 + */ +-(void) sendPing; + +/** + 唤醒IM + @param timeout 超时时间(超时后不管有没有成功都会执行complete) + */ +-(void) wakeup:(NSTimeInterval)timeout complete:(void(^__nullable)(NSError * __nullable error))complete; + + + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKConst.h b/ios/WuKongIMSDK.framework/Headers/WKConst.h new file mode 100644 index 0000000..0454893 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKConst.h @@ -0,0 +1,93 @@ +// +// WKConst.h +// Pods +// +// Created by tt on 2019/11/25. +// + + + +// 正文类型 +typedef enum : NSUInteger { + WK_TEXT = 1, // 文本消息 + WK_IMAGE = 2, // 图片消息 + WK_GIF = 3, // gif表情 + WK_VOICE = 4, // 语音消息 + + WK_SIGNAL_ERROR = 98, // signal解密失败 + WK_CMD = 99, // 命令消息 + WK_UNKNOWN = 0, // 未知消息 +} WKContentType; + + + +// 消息状态 +typedef enum : NSUInteger { + WK_MESSAGE_WAITSEND, // 等待发送 + WK_MESSAGE_SUCCESS, // 发送成功 + WK_MESSAGE_ONLYSAVE, // 仅仅保存消息(不做重发处理) + WK_MESSAGE_UPLOADING, // 上传中 + WK_MESSAGE_FAIL, // 发送失败 +} WKMessageStatus; + + +typedef enum : uint8_t { + NONE, + WK_CONNECT = 1, // 客户端请求连接到服务器(c2s) + WK_CONNACK =2, // 服务端收到连接请求后确认的报文(s2c) + WK_SEND = 3, // 发送消息(c2s) + WK_SENDACK = 4, // 收到消息确认的报文(s2c) + WK_RECV = 5, //收取消息(s2c) + WK_RECVACK = 6, // 收取消息确认(c2s) + WK_PING = 7, //ping请求 + WK_PONG = 8, // 对ping请求的相应 + WK_DISCONNECT = 9 // 断开连接 +} WKPacketType; + + +typedef enum : uint8_t { + WK_REASON_UNKNOWN = 0, // 未知 + WK_REASON_SUCCESS = 1, // 认证成功 + WK_REASON_AUTHFAIL = 2, // 认证失败(一般是token不正确) + WK_REASON_IN_BLACKLIST = 4, // 在黑名单内 + WK_REASON_KICK = 12, // 被踢 + WK_REASON_NOT_IN_WHITELIST = 13, // 没在好友白明单内(说明不是好友) + +} WKReason; + +// 频道类型 +typedef enum : uint8_t { + WK_PERSON = 1, // 个人 + WK_GROUP = 2, // 群组 + WK_COMMUNITY = 4, // 社区 + WK_COMMUNITY_TOPIC = 5, // 社区话题 + WK_COMMUNITY_INFO = 6, // 信息频道 +} WKChannelType; + +// 协议类型 +typedef enum : NSUInteger { + WK_PROTO_WKAO, + WK_PROTO_MOS +} WKProto; + + +// 设备类型 +typedef enum : NSInteger { + WKDeviceFlagEnumUnknown = -1, // 未知 + WKDeviceFlagEnumAPP = 0, // APP + WKDeviceFlagEnumWeb = 1, // Web + WKDeviceFlagEnumPC = 2 // PC +} WKDeviceFlagEnum; + + +typedef enum : NSUInteger { + WKPullModeDown, + WKPullModeUp, +} WKPullMode; + + +// cmd sign签名错误 +#define WKCMDSignError @"cmdSignError" + +// 排序序号因子 +#define WKOrderSeqFactor 1000 diff --git a/ios/WuKongIMSDK.framework/Headers/WKConversation.h b/ios/WuKongIMSDK.framework/Headers/WKConversation.h new file mode 100644 index 0000000..2fae098 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKConversation.h @@ -0,0 +1,90 @@ +// +// WKConversation.h +// WuKongIMSDK +// +// Created by tt on 2019/12/8. +// + +#import <Foundation/Foundation.h> +#import "WKChannel.h" +#import "WKChannelInfo.h" +#import "WKMessage.h" +#import "WKReminderManager.h" +#import "WKConversationExtra.h" +NS_ASSUME_NONNULL_BEGIN + + + +@interface WKConversation : NSObject<NSCopying> + +@property(nonatomic,strong) WKChannel *channel; // 频道 + +@property(nonatomic,strong,nullable) WKChannel *parentChannel; // 父类频道 +/** + * 频道资料,可能为空,如果为空可以调用WKChannelManager fetchChannelInfo:completion 触发频道信息变更委托 + */ +@property(nullable,nonatomic,strong,readonly) WKChannelInfo *channelInfo; +/** + 头像 + */ +@property(nonatomic,copy) NSString *avatar; +/** + 最新一条消息的客户端seq + */ +//@property(nonatomic,assign) uint32_t lastClientSeq; +/// 最后一条消息的客户端编号 +@property(nonatomic,copy) NSString *lastClientMsgNo; + +// 最后一条消息的额messageSeq +@property(nonatomic,assign) uint32_t lastMessageSeq; + +/** + 最后一条消息 (如果内存没有则去数据库查询) + */ +@property(nonatomic,strong) WKMessage *lastMessage; + +/** + 最后一条消息(如果没有不进行数据库加载) + */ +@property(nonatomic,strong) WKMessage *lastMessageInner; + +/** + 最新一条消息时间 (10位时间戳到秒) + */ +@property(nonatomic,assign) NSInteger lastMsgTimestamp; + + +//@property(nonatomic,assign) uint32_t browseTo; +/** + 未读消息数量 + */ +@property(nonatomic,assign) NSInteger unreadCount; + + +/** + 提醒项 + */ +@property(nonatomic,strong) NSArray<WKReminder*> *reminders; +@property(nonatomic,strong,readonly) NSArray<WKReminder*> *simpleReminders; // 除去重复的type了的reminder + +/** + 扩展数据 + */ +@property(nonatomic,strong) NSDictionary *extra; +/// 数据版本 +@property(nonatomic,assign) long long version; +// 是否已删除 +@property(nonatomic,assign) NSInteger isDeleted; +// 免打扰 +@property(nonatomic,assign) BOOL mute; +// 置顶 +@property(nonatomic,assign) BOOL stick; + +/// 重新加载最后一条消息(重新从数据库里获取) +-(void) reloadLastMessage; +// 服务端扩展数据 +@property(nonatomic,strong) WKConversationExtra *remoteExtra; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKConversationDB.h b/ios/WuKongIMSDK.framework/Headers/WKConversationDB.h new file mode 100644 index 0000000..08dc1ab --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKConversationDB.h @@ -0,0 +1,211 @@ +// +// WKConversationDB.h +// WuKongIMSDK +// +// Created by tt on 2019/11/29. +// + +#import <Foundation/Foundation.h> +#import "WKConversation.h" +#import "WKDB.h" +NS_ASSUME_NONNULL_BEGIN +@class WKConversationAddOrUpdateResult; +@interface WKConversationDB : NSObject + ++ (WKConversationDB *)shared; + + +/** + 添加或修改最近会话 + + @param conversation <#conversation description#> + */ +-(void) addOrUpdateConversation:(WKConversation*)conversation; + + +/// 取代最近会话 +/// @param conversations <#conversation description#> +-(void) replaceConversations:(NSArray<WKConversation*>*)conversations; + + +/// 添加最近会话信息 +/// @param conversation <#conversation description#> +-(void) addConversation:(WKConversation*)conversation; + + +/// 恢复指定会话 +/// @param channel <#channel description#> +/// @return 如果存在会话的会话则返回,不存在则返回nil +-(WKConversation*) recoveryConversation:(WKChannel*)channel; + +/** + 查询指定频道的最近会话 + + @param channel <#channel description#> + @param db <#db description#> + @return <#return value description#> + */ +-(WKConversation*) getConversationWithChannel:(WKChannel*)channel db:(FMDatabase*)db; + +/// 查询指定频道的最近会话(包含is_deleted=1的频道) +/// @param channel 指定频道 +/// @param db <#db description#> +-(WKConversation*) getConversationWithChannelInAll:(WKChannel*)channel db:(FMDatabase*)db; + +/** + 查询频道类的最近会话数据 + + @return <#return value description#> + */ +-(NSArray<WKConversation*>*) getConversationList; + + +/** + 获取最近会话 + + @param channel 频道 + @return <#return value description#> + */ +-(WKConversation*) getConversation:(WKChannel*)channel; + +// 通过频道集合获取最近会话集合 +-(NSArray<WKConversation*>*) getConversations:(NSArray<WKChannel*> *)channels; + + +/** + 通过最后一条消息的客户端序号获取最近会话 + + @param lastClientMsgNo 最后一条消息的编号 + @return <#return value description#> + */ +-(WKConversation*) getConversationWithLastClientMsgNo:(NSString*)lastClientMsgNo; + + + +/// 获取会话最大数据版本号 +-(long long) getConversationMaxVersion; + + +/// 获取同步key +-(NSString*) getConversationSyncKey; +/** + 更新最近会话 + + @param conversation <#conversation description#> + */ +-(void) updateConversation:(WKConversation*)conversation; +/** + 更新最近会话 + + @param conversation <#conversation description#> + @param db <#db description#> + */ +-(void) updateConversation:(WKConversation*)conversation db:(FMDatabase*)db; + + +/** + 插入最近会话 + + @param conversation <#conversation description#> + @param db <#db description#> + */ +-(void) insertConversation:(WKConversation*)conversation db:(FMDatabase*)db; + + +/** + 清除指定频道的未读消息 + + @param channel <#channel description#> + */ +-(void) clearConversationUnreadCount:(WKChannel*)channel; + + + +/// 设置最近会话未读数 +/// @param channel 频道 +/// @param unread 未读数量 +-(void) setConversationUnreadCount:(WKChannel*)channel unread:(NSInteger)unread; + + +/// 删除指定频道的最近会话 +/// @param channel 频道对象 +-(void) deleteConversation:(WKChannel*)channel; + +/// 删除所有最近会话 +-(void) deleteAllConversation; +/** + 更新最近会话的标题和头像 + + @param channel <#channel description#> + @param title <#title description#> + @param avatar <#avatar description#> + @param db <#db description#> + */ +-(void) updateConversation:(WKChannel*)channel title:(NSString*)title avatar:(NSString*) avatar db:(FMDatabase*)db; + + +// +///** +// 追加提醒 +// +// @param reminder 提醒项 +// @param channel 频道 +// @return 追加后的z最近会话 +// */ +//-(WKConversation*) appendReminder:(WKReminder*) reminder channel:(WKChannel*)channel; +// +// +///** +// 移除某种类型的提醒 +// +// @param type <#type description#> +// @param channel <#channel description#> +// @return <#return value description#> +// */ +//-(WKConversation*) removeReminder:(WKReminderType)type channel:(WKChannel*)channel; +// +///** +//清除指定频道的所有提醒 +// +// @param channel 频道 +// @return <#return value description#> +// */ +//-(WKConversation*) clearAllReminder:(WKChannel*)channel; +// +// +///** +// 清除指定频道指定类型的提醒 +// +// @param channel 频道 +// @param type 提醒类型 +// @return <#return value description#> +// */ +//-(WKConversation*) clearReminder:(WKChannel*)channel type:(NSInteger)type; +// + +/** + 获取所有会话未读数量 + */ +-(NSInteger) getAllConversationUnreadCount; + + +/// 更新频道预览的位置 +/// @param browseTo <#browseTo description#> +/// @param channel <#channel description#> +-(void) updateBrowseTo:(uint32_t)browseTo forChannel:(WKChannel*)channel; + +@end + +// 最近会话添加或修改结果 +@interface WKConversationAddOrUpdateResult : NSObject + +@property(nonatomic,assign) BOOL insert; + +@property(nonatomic,assign) BOOL modify; // 数据是否修改(添加或更新都为true) + +@property(nonatomic,strong) WKConversation *conversation; + ++(instancetype) initWithInsert:(BOOL)insert modify:(BOOL)modify conversation:(WKConversation*)conversation; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKConversationExtra.h b/ios/WuKongIMSDK.framework/Headers/WKConversationExtra.h new file mode 100644 index 0000000..b15180d --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKConversationExtra.h @@ -0,0 +1,23 @@ +// +// WKConversationExtra.h +// WuKongIMSDK +// +// Created by tt on 2022/4/23. +// + +#import <Foundation/Foundation.h> +#import "WKChannel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKConversationExtra : NSObject + +@property (nonatomic, strong) WKChannel *channel; +//@property (nonatomic, assign) uint32_t browseTo; // 预览位置 预览到的位置,与会话保持位置不同的是 预览到的位置是用户读到的最大的messageSeq。跟未读消息数量有关系 +@property (nonatomic, assign) uint32_t keepMessageSeq; // 保持的位置的messageSeq +@property (nonatomic, assign) NSInteger keepOffsetY; // 保持的位置Y的偏移量 +@property (nonatomic, copy) NSString *draft; // 草稿 +@property (nonatomic, assign) int64_t version; // 数据版本 + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKConversationExtraDB.h b/ios/WuKongIMSDK.framework/Headers/WKConversationExtraDB.h new file mode 100644 index 0000000..31c4dc1 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKConversationExtraDB.h @@ -0,0 +1,25 @@ +// +// WKConversationExtraDB.h +// WuKongIMSDK +// +// Created by tt on 2022/4/23. +// + +#import <Foundation/Foundation.h> +#import "WKConversationExtra.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKConversationExtraDB : NSObject + ++ (WKConversationExtraDB *)shared; + +-(void) addOrUpdates:(NSArray<WKConversationExtra*>*)extras; + +-(void) updateVersion:(WKChannel*)channel version:(int64_t)version; + +-(int64_t) getMaxVersion; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKConversationLastMessageAndUnreadCount.h b/ios/WuKongIMSDK.framework/Headers/WKConversationLastMessageAndUnreadCount.h new file mode 100644 index 0000000..140952e --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKConversationLastMessageAndUnreadCount.h @@ -0,0 +1,24 @@ +// +// WKConversationLastMessageAndUnreadCount.h +// WuKongIMSDK +// +// Created by tt on 2022/5/27. +// + +#import <Foundation/Foundation.h> +#import "WKMessage.h" +NS_ASSUME_NONNULL_BEGIN + +// 会话最后一条消息和需要累加的未读数量 +@interface WKConversationLastMessageAndUnreadCount : NSObject +// 最后一条消息 +@property(nonatomic,strong) WKMessage *lastMessage; +// 需要累加的未读数量 +@property(nonatomic,assign) NSInteger incUnreadCount; + +// 提醒项 +//@property(nonatomic,strong) WKReminderManager *reminderManager; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKConversationManager.h b/ios/WuKongIMSDK.framework/Headers/WKConversationManager.h new file mode 100644 index 0000000..cbe4c13 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKConversationManager.h @@ -0,0 +1,167 @@ +// +// WKConversationManager.h +// WuKongIMSDK +// +// Created by tt on 2019/11/29. +// + +#import <Foundation/Foundation.h> +#import "WKMessage.h" +#import "WKConversation.h" +#import "WKConversationDB.h" +#import "WKSyncConversationModel.h" +#import "WKConversationExtra.h" + +@protocol WKConversationManagerDelegate; + +NS_ASSUME_NONNULL_BEGIN + +typedef void(^WKSyncConversationCallback)(WKSyncConversationWrapModel* __nullable model,NSError * __nullable error); + +typedef void(^WKSyncConversationAck)(uint64_t cmdVersion,void(^ _Nullable complete)(NSError * _Nullable error)); + +// 同步会话返回 timestamp:最新会话的时间戳 lastMsgSeqs:客户端所有会话的最后一条消息序列号 格式: channelID:channelType:last_msg_seq|channelID:channelType:last_msg_seq +typedef void (^WKSyncConversationProvider)(long long version,NSString *lastMsgSeqs,WKSyncConversationCallback callback); + + +// 同步最近会话扩展 +typedef void(^WKSyncConversationExtraCallback)(NSArray<WKConversationExtra*>* __nullable extras,NSError * __nullable error); +typedef void (^WKSyncConversationExtraProvider)(long long version,WKSyncConversationExtraCallback callback); +// 更新扩展 +typedef void (^WKUpdateConversationExtraCallback)(int64_t version,NSError * __nullable error); +typedef void (^WKUpdateConversationExtraProvider)(WKConversationExtra *extra,WKUpdateConversationExtraCallback callback); + + + +@interface WKConversationManager : NSObject + +/** + 获取最近会话列表 + + @return 最好会话对象集合 + */ +-(NSArray<WKConversation*>*) getConversationList; + + +/// 添加最近会话信息 +/// @param conversation <#conversation description#> +-(void) addConversation:(WKConversation*)conversation; + +/** + 清除指定频道的未读消息 + + @param channel <#channel description#> + */ +-(void) clearConversationUnreadCount:(WKChannel*)channel; + + +/// 设置未读数 +/// @param channel 频道 +/// @param unread 未读数量 +-(void) setConversationUnreadCount:(WKChannel*)channel unread:(NSInteger)unread; + + + +/// 恢复指定频道的会话 +/// @param channel <#channel description#> +-(void) recoveryConversation:(WKChannel*)channel; + + + +// 更新或添加扩展 +-(void) updateOrAddExtra:(WKConversationExtra*)extra; + +// 同步最近会话扩展 +-(void) syncExtra; + + +/// 删除最近会话 +/// @param channel 频道 +-(void) deleteConversation:(WKChannel*)channel; + + + +/// 获取指定频道的最近会话信息 +/// @param channel <#channel description#> +-(WKConversation*) getConversation:(WKChannel*)channel; + +-(NSArray<WKConversation*>*) getConversations:(NSArray<WKChannel*>*)channels; + +/** + 添加最近会话委托 + + @param delegate <#delegate description#> + */ +-(void) addDelegate:(id<WKConversationManagerDelegate>) delegate; + + +/** + 移除最近会话委托 + + @param delegate <#delegate description#> + */ +-(void)removeDelegate:(id<WKConversationManagerDelegate>) delegate; + +/** + 获取所有会话未读数量 + */ +-(NSInteger) getAllConversationUnreadCount; + +/** + 调用最近会话更新委托 + + @param conversation <#conversation description#> + */ +- (void)callOnConversationUpdateDelegate:(WKConversation*)conversation; + +/// 设置同步会话提供者 +/// @param syncConversationProvider <#syncConversationProvider description#> +/// @param syncConversationAck <#syncConversationAck description#> +-(void) setSyncConversationProviderAndAck:(WKSyncConversationProvider) syncConversationProvider ack:(WKSyncConversationAck)syncConversationAck; + + + +/// 同步最近会话 +@property(nonatomic,copy,readonly) WKSyncConversationProvider syncConversationProvider; +@property(nonatomic,copy,readonly) WKSyncConversationAck syncConversationAck; + +// 同步扩展提供者 +@property(nonatomic,copy) WKSyncConversationExtraProvider syncConversationExtraProvider; +// 更新扩展提供者 +@property(nonatomic,copy) WKUpdateConversationExtraProvider updateConversationExtraProvider; + + + +@end + + +@protocol WKConversationManagerDelegate <NSObject> + +@optional + +/** + 最近会话更新 + */ +- (void)onConversationUpdate:(NSArray<WKConversation*>*)conversations; + +/** + 最近会话未读数更新 + + @param channel 频道 + @param unreadCount 未读数量 + */ +- (void)onConversationUnreadCountUpdate:(WKChannel*)channel unreadCount:(NSInteger)unreadCount; + + +/// 最近会话被删除 +/// @param channel <#channel description#> +-(void) onConversationDelete:(WKChannel*)channel; + + +/// 所有最近会话删除 +-(void) onConversationAllDelete; + +@end + + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKConversationManagerInner.h b/ios/WuKongIMSDK.framework/Headers/WKConversationManagerInner.h new file mode 100644 index 0000000..ce430cb --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKConversationManagerInner.h @@ -0,0 +1,49 @@ +// +// WKConversationManagerInner.h +// Pods +// +// Created by tt on 2022/5/27. +// + +#ifndef WKConversationManagerInner_h +#define WKConversationManagerInner_h + + +#endif /* WKConversationManagerInner_h */ + + +@interface WKConversationManager () + +/** + 添加或更新最近会话 + + @param conversation conversation + @param incUnreadCount 未读数递增数量 + */ +-(WKConversationAddOrUpdateResult*) addOrUpdateConversation:(WKConversation*)conversation incUnreadCount:(NSInteger)incUnreadCount; + +-(WKConversationAddOrUpdateResult*) addOrUpdateConversation:(WKConversation*)cs; + +/// 处理同步下来的最近会话 +/// @param model 会话同步对象 +-(void) handleSyncConversation:(WKSyncConversationWrapModel*)model; + + + + + +/** + 调用最近会话更新委托 + + @param conversations 会话数组 + */ +- (void)callOnConversationUpdateDelegates:(NSArray<WKConversation*>*)conversations; + + +/// 调用删除所有最近会话委托 +- (void)callOnConversationAllDeleteDelegate; + + + + +@end diff --git a/ios/WuKongIMSDK.framework/Headers/WKConversationUtil.h b/ios/WuKongIMSDK.framework/Headers/WKConversationUtil.h new file mode 100644 index 0000000..6894804 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKConversationUtil.h @@ -0,0 +1,17 @@ +// +// WKConversationUtil.h +// WuKongIMSDK +// +// Created by tt on 2020/1/24. +// + +#import <Foundation/Foundation.h> +#import "WKConversation.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKConversationUtil : NSObject +// 合并提醒数据 ++(NSArray<WKReminder*>*) mergeReminders:(NSArray<WKReminder*>*)source dest:(NSArray<WKReminder*>*)dest; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKDB.h b/ios/WuKongIMSDK.framework/Headers/WKDB.h new file mode 100644 index 0000000..2dc2af2 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKDB.h @@ -0,0 +1,39 @@ +// +// WKDB.h +// WuKongIMSDK +// +// Created by tt on 2019/11/27. +// + +#import <Foundation/Foundation.h> +#import <fmdb/FMDB.h> +#import "WKFMDatabaseQueue.h" +//消息表 +#define TB_MESSAGE @"message" + +NS_ASSUME_NONNULL_BEGIN + +@interface WKDB : NSObject + +@property (nonatomic, strong) WKFMDatabaseQueue *dbQueue; + ++ (WKDB *)sharedDB; + +/** + 切换用户的数据库 + + @param uid 用户uid + */ +-(void) switchDB:(NSString*)uid; + +/** + 是否需要切换数据库 + + @param uid <#uid description#> + @return <#return value description#> + */ +-(BOOL) needSwitchDB:(NSString*)uid; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKDBMigrationManager.h b/ios/WuKongIMSDK.framework/Headers/WKDBMigrationManager.h new file mode 100644 index 0000000..06d9cdb --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKDBMigrationManager.h @@ -0,0 +1,294 @@ +// +// WKDBMigrationManager.h +// WKDBMigrationManager +// +// Created by Blake Watters on 6/4/14. +// Copyright (c) 2014 Layer Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import <fmdb/FMDatabase.h> +#import <fmdb/FMDatabaseQueue.h> + +@protocol WKDBMigrating; + +/** + @abstract The `WKDBMigrationManager` class provides a simple, flexible interface for managing migrations for + a SQLite database that is accessed via FMDB. + */ +@interface WKDBMigrationManager : NSObject + +///----------------------------------- +/// @name Creating a Migration Manager +///----------------------------------- + +/** + @abstract Creates a new migration manager with a given database and migrations bundle. + @param database The database with which to initialize the migration manager. + @return A new migration manager. + */ ++ (instancetype)managerWithDatabase:(FMDatabase *)database; + +/** + @abstract Creates a new migration manager with a database for the given database and migrations bundle. + @param path The path to a database with which to initialize the migration manager. + @return A new migration manager. + */ ++ (instancetype)managerWithDatabaseAtPath:(NSString *)path; + +/** + @abstract Determines whether the receiver will perform a search for dynamically defined migrations. Default: `YES`. + @discussion When `YES` all classes will be enumerated to search for any that conform to the `WKDBMigrating` protocol. + */ +@property (nonatomic, assign) BOOL dynamicMigrationsEnabled; + +///-------------------------------------------------- +/// @name Accessing Database Path & Migrations Bundle +///-------------------------------------------------- + +/** + @abstract Returns the database of the receiver. + */ +@property (nonatomic, readonly) FMDatabase *database; + +/** + @abstract Returns the migrations bundle for the receiver. + */ +@property (nonatomic, readonly) NSBundle *migrationsBundle; + +///----------------------------- +/// @name Accessing Version Info +///----------------------------- + +/** + @abstract Returns the current version of the database managed by the receiver or `0` if the + migrations table is not present. + */ +@property (nonatomic, readonly) uint64_t currentVersion; + +/** + @abstract Returns the origin version of the database managed by the receiver or `0` if the + migrations table is not present. + */ +@property (nonatomic, readonly) uint64_t originVersion; + +///--------------------------- +/// @name Accessing Migrations +///--------------------------- + +/** + @abstract Returns all migrations discovered by the receiver. Each object returned conforms to the `WKDBMigrating` protocol. The + array is returned in ascending order by version. + @discussion The manager discovers migrations by analyzing all files that end in a .sql extension in the `migrationsBundle` + and accumulating all classes that conform to the `WKDBMigrating` protocol. These migrations can then be sorted and applied + to the target database. + @note The list of migrations is memoized for efficiency. + */ +@property (nonatomic, readonly) NSArray *migrations; + +/** + @abstract Returns the version numbers of the subset of `migrations` that have already been applied to the database + managed by the receiver in ascending order. + */ +@property (nonatomic, readonly) NSArray *appliedVersions; + +/** + @abstract Returns the version numbers of the subset of `migrations` that have not yet been applied to the database + managed by the receiver in ascending order. + */ +@property (nonatomic, readonly) NSArray *pendingVersions; + +/** + @abstract Returns a migration object with a given version number or `nil` if none could be found. + @param version The version of the desired migration. + @return A migration with the specified version or `nil` if none could be found. + */ +- (id<WKDBMigrating>)migrationForVersion:(uint64_t)version; + +/** + @abstract Returns a migration object with a given name or `nil` if none could be found. + @param name The name of the desired migration. + @return A migration with the specified named or `nil` if none could be found. + */ +- (id<WKDBMigrating>)migrationForName:(NSString *)name; + +///------------------------- +/// @name Adding a Migration +///------------------------- + +/** + @abstract Adds a migration to the receiver's list. + @discussion This method can be used to append code based migrations to the set if you do not wish to use dynamic migration discovery. If + the migration last has been previously computed, adding a migration will recompute the list. + @param migration The migration to add. + */ +- (void)addMigration:(id<WKDBMigrating>)migration; + +/** + @abstract Adds migrations from the array to the receiver's list. + @discussion This method can be used to append code based migrations to the set if you do not wish to use dynamic migration discovery. If + the migration last has been previously computed, adding migrations will recompute the list. + @param migrations An array of objects conforming to `WKDBMigrating` protocol. + */ +- (void)addMigrations:(NSArray *)migrations; + +///------------------------------------ +/// @name Managing the Migrations Table +///------------------------------------ + +/** + @abstract Returns a Boolean value that indicates if the `schema_migrations` table + is present in the database. + */ +@property (nonatomic, readonly) BOOL hasMigrationsTable; + +/** + @abstract Creates the `schema_migrations` table used by `WKDBMigrationManager` to maintain an index of applied migrations. + @param error A pointer to an error object that is set upon failure to create the migrations table. + @return A Boolean value that indicates if the creation of the migrations table was successful. + */ +- (BOOL)createMigrationsTable:(NSError **)error; + +///-------------------------- +/// @name Migrating Databases +///-------------------------- + +/** + @abstract Returns a Boolean value that indicates if the database managed by the receiver is in need of migration. + */ +@property (nonatomic, readonly) BOOL needsMigration; + +/** + @abstract Migrates the database managed by the receiver to the specified version, optionally providing progress via a block. + @discussion Migration is performed within a transaction that is rolled back if any errors occur during migration. + @param version The target version to migrate the database to. Pass `UINT64_MAX` to migrate to the latest version. + @param progressBlock An optional block to be invoked each time a migration is applied. The block has no return value and accepts a single `NSProgress` argument. The + progress object can be used to cancel a migration in progress. + @param error A pointer to an error object that is set upon failure to complete the migrations. + @return `YES` if migration was successful, else `NO`. + */ + +- (BOOL)migrateDatabaseToVersion:(uint64_t)version bundle:(NSBundle*)migrationsBundle progress:(void (^)(NSProgress *progress))progressBlock error:(NSError **)error; + +- (BOOL)migrateDatabase:(NSBundle*)migrationsBundle error:(NSError **)error; + +@end + +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + @abstract The `WKDBMigrating` protocol is adopted by classes that wish to provide migration of SQLite databases accessed via FMDB. The + `WKDBMigrationManager` project ships with a single concrete implementation in the `FMDBFileMigration` class. Non file backed + migrations can be implemented by conforming to the `WKDBMigrating` protocol. + */ +@protocol WKDBMigrating <NSObject> + +///------------------------------------- +/// @name Accessing Migration Properties +///------------------------------------- + +/** + @abstract The name of the migration. + */ +@property (nonatomic, readonly) NSString *name; + +/** + @abstract The numeric version of the migration. + @discussion While monotonically incremented versions are fully supported, it is recommended that to use a timestamp format such as + 201406063106474. Timestamps avoid unnecessary churn in a codebase that is heavily branched. + */ +@property (nonatomic, readonly) uint64_t version; + +///-------------------------- +/// @name Migrating Databases +///-------------------------- + +/** + @abstract Tells the receiver to apply its changes to the given database and return a Boolean value indicating success or failure. + @discussion The `WKDBMigrationManager` manages a transaction while migrations are being applied. Should any call to `migrateDatabase:error` return `NO`, + then the transaction is rolled back. + @param database The database on which to apply the migration. + @param error A pointer to an error object to set should the transaction fail. + @return A Boolean value indicating if the + */ +- (BOOL)migrateDatabase:(FMDatabase *)database error:(out NSError *__autoreleasing *)error; + +@end + +/** + @abstract The `FMDBFileMigration` class provides a concrete implementation of the `WKDBMigrating` protocol that models + a migration stored on disk a SQL file. The filename encodes the name and version of the migration. Conformant filenames are + of the form `[version]_[name].sql`. + */ +@interface WKDBFileMigration : NSObject <WKDBMigrating> + +///-------------------------------- +/// @name Creating a File Migration +///-------------------------------- + +/** + @abstract Creates and returns a new migration with the file at the given path. + @discussion Conformance of filenames can be evaluated with the `FMDBIsMigrationAtPath` utility function. + @param path The path to a file containing a SQL migration with a conformant filename. + */ ++ (instancetype)migrationWithPath:(NSString *)path; + +/** + @abstract The path to the SQL migration file on disk. + */ +@property (nonatomic, readonly) NSString *path; + +/** + @abstract A convenience accessor for retrieving the SQL from the receiver's path. + */ +@property (nonatomic, readonly) NSString *SQL; + +@end + +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + @abstract The domain for errors created by `WKDBMigrationManager`. + */ +extern NSString *const WKDBMigrationManagerErrorDomain; + +/** + @abstract A key for an `NSNumber` object in the `userInfo` of an `NSProgress` object specifying the version + that the database was just migrated to. + @see `migrateDatabase:error:` + */ +extern NSString *const WKDBMigrationManagerProgressVersionUserInfoKey; + +/** + @abstract A key for an `id<WKDBMigrating>` object in the `userInfo` of an `NSProgress` object that identifies + the migration that was just applied to the database. + @see `migrateDatabase:error:` + */ +extern NSString *const WKDBMigrationManagerProgressMigrationUserInfoKey; + +/** + @abstract Enumerates the errors returned by WKDBMigrationManager + */ +typedef NS_ENUM(NSUInteger, WKDBMigrationManagerError) { + /// Indicates that migration was halted due to cancellation + WKDBMigrationManagerErrorMigrationCancelled = 1 +}; + +/** + @abstract Returns a Boolean value that indicates if the file at the given path is an FMDB Migration. + @discussion This function evaluates the last path component of the input string against the regular expression `/\d{1,15}_.+sql$/`. + @param path The path to inspect. + @return `YES` if the path could be identified as a migration, else `NO`. + */ +BOOL FMDBIsMigrationAtPath(NSString *path); diff --git a/ios/WuKongIMSDK.framework/Headers/WKData.h b/ios/WuKongIMSDK.framework/Headers/WKData.h new file mode 100644 index 0000000..45faba7 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKData.h @@ -0,0 +1,71 @@ +// +// WKData.h +// WuKongIMSDK +// +// Created by tt on 2019/11/25. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKDataWrite : NSObject + + +/// 初始化(大端模式) ++(instancetype) initLittleEndian; + +-(void) writeUint8:(uint8_t)v; + +-(void) writeUint16:(uint16_t)v; + +-(void) writeUint32:(uint32_t)v; + +-(void) writeUint64:(uint64_t)v; + + +/// 写可变字符串 (前2位为字符串长度) +/// @param v <#v description#> +-(void) writeVariableString:(NSString*)v; + +-(void) writeData:(NSData*) data; + + +-(NSData*) toData; +@end + +@interface WKDataRead : NSObject + +-(instancetype) initWithData:(NSData*) data; + +-(instancetype) initWithData:(NSData*) data littleEndian:(BOOL)littleEndian; + +-(uint8_t) readUint8; + +-(uint16_t) readUint16; + +-(uint32_t) readUint32; + +-(uint64_t) readUint64; + +-(int64_t) readint64; + + +/// 读取指定长度的data +/// @param len <#len description#> +-(NSData*) readData:(int)len; + +-(NSString*) readString; + +-(uint32_t) readLenth; +// 字节里是否包含完整的长度 +-(BOOL) lengthFull; +// 长度的长度 +-(int) lenthLength; +-(NSData*) remainingData; + ++(void) numberHNMemcpy:(void*)dest src:(const void *)src count:(unsigned int)count; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKDisconnectPacket.h b/ios/WuKongIMSDK.framework/Headers/WKDisconnectPacket.h new file mode 100644 index 0000000..6d74455 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKDisconnectPacket.h @@ -0,0 +1,22 @@ +// +// WKDisconnectPacket.h +// WuKongIMSDK +// +// Created by tt on 2020/1/30. +// + +#import <Foundation/Foundation.h> +#import "WKPacket.h" +#import "WKPacketBodyCoder.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKDisconnectPacket : WKPacket<WKPacketBodyCoder> + +// 原因代码 +@property(nonatomic,assign) uint8_t reasonCode; +// 原因字符串 +@property(nonatomic,copy) NSString *reason; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKFMDatabaseQueue.h b/ios/WuKongIMSDK.framework/Headers/WKFMDatabaseQueue.h new file mode 100644 index 0000000..df9c1c8 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKFMDatabaseQueue.h @@ -0,0 +1,26 @@ +// +// WKFMDatabaseQueue.h +// WuKongIMSDK +// +// Created by tt on 2021/8/26. +// + +#import <fmdb/FMDB.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKFMDatabaseQueue : NSObject + + ++(WKFMDatabaseQueue*) databaseQueue:(FMDatabaseQueue*)queue; + + +- (void)inDatabase:(void (NS_NOESCAPE^)(FMDatabase * _Nonnull db))block; + +- (void)inTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block; + +-(void) close; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKFileUtil.h b/ios/WuKongIMSDK.framework/Headers/WKFileUtil.h new file mode 100644 index 0000000..3d8b2b9 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKFileUtil.h @@ -0,0 +1,42 @@ +// +// WKFileUtil.h +// WuKongIMSDK +// +// Created by tt on 2020/1/13. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKFileUtil : NSObject ++(BOOL)copyFileFromPath:(NSString *)fromPath toPath:(NSString *)toPath; + ++ (BOOL)moveFileFromPath:(NSString *)fromPath toPath:(NSString *)toPath; + ++ (BOOL)fileIsExistOfPath:(NSString *)filePath; + + +/** + 如果目录不存在,则创建目录 + + @param dirPath 目录路径 + @return <#return value description#> + */ ++(BOOL)createDirectoryIfNotExist:(NSString *)dirPath; + + +/** + 如果文件不存在,则创建文件 + + @param filePath 文件路径 + @return <#return value description#> + */ ++ (BOOL)creatFileIfNotExist:(NSString *)filePath; + ++ (BOOL)removeFileOfPath:(NSString *)filePath; + ++ (BOOL)removeFileOfURL:(NSURL *)fileURL; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKFlameManager.h b/ios/WuKongIMSDK.framework/Headers/WKFlameManager.h new file mode 100644 index 0000000..434d65c --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKFlameManager.h @@ -0,0 +1,28 @@ +// +// WKViewedManager.h +// WuKongIMSDK +// +// Created by tt on 2022/8/17. +// + +#import <Foundation/Foundation.h> +#import "WKMessage.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKFlameManager : NSObject + ++ (WKFlameManager *)shared; + +/** + 标记为已读 + */ +-(void) didViewed:(NSArray<WKMessage*>*) messages; + +/** + 获取需要焚烧的消息(阅后即焚) + */ +-(NSArray<WKMessage*>*) getMessagesOfNeedFlame; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKHeader.h b/ios/WuKongIMSDK.framework/Headers/WKHeader.h new file mode 100644 index 0000000..d3080a8 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKHeader.h @@ -0,0 +1,30 @@ +// +// WKHeader.h +// WuKongIMSDK +// +// Created by tt on 2019/11/25. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKHeader : NSObject + +// 剩余长度 +@property(nonatomic,assign) uint32_t remainLength; +// 包类型 +@property(nonatomic,assign) uint8_t packetType; + +// 是否显示未读 +@property(nonatomic,assign) BOOL showUnread; // RedDot + +// 是否不存储 +@property(nonatomic,assign) BOOL noPersist; + +// 是否同步一次 +@property(nonatomic,assign) BOOL syncOnce; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKImageContent.h b/ios/WuKongIMSDK.framework/Headers/WKImageContent.h new file mode 100644 index 0000000..b3e5c90 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKImageContent.h @@ -0,0 +1,73 @@ +// +// WKImageMessageContent.h +// WuKongIMSDK +// +// Created by tt on 2020/1/13. +// 图片消息content + +#import <Foundation/Foundation.h> +#import <UIKit/UIKit.h> +#import "WKMediaMessageContent.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKImageContent : WKMediaMessageContent + + +@property(nonatomic,assign) CGFloat width; // 图片宽度 + +@property(nonatomic,assign) CGFloat height; // 图片高度 + +/*! + 初始化图片消息 + + @param image 原始图片 + @return 图片消息对象 + */ ++ (instancetype)initWithImage:(UIImage *)image; + + + +/// 通过data初始化 +/// @param data 图片数据 +/// @param width 图片宽度 +/// @param height 图片高度 ++ (instancetype)initWithData:(NSData *)data width:(CGFloat)width height:(CGFloat)height; + + +/// 初始化 +/// @param data 原图data +/// @param width 原图宽度 +/// @param height 原图高度 +/// @param thumbData 缩略图data (如果传了缩略图的data数据,sdk将不再生成缩略图数据) ++ (instancetype)initWithData:(NSData *)data width:(CGFloat)width height:(CGFloat)height thumbData:( nullable NSData*)thumbData; + + +/*! + 是否发送原图 + + @discussion 在发送图片的时候,是否发送原图,默认值为NO。 + */ +@property (nonatomic, getter=isFull) BOOL full; + +/*! + 图片消息的缩略图 + */ +@property (nonatomic, strong,nullable) UIImage *thumbnailImage; + +@property (nonatomic, strong,readonly) NSData *thumbnailData; + +/*! + 图片消息的原始图片信息 + */ +@property (nonatomic, strong,readonly) UIImage *originalImage; + +/*! + 图片消息的原始图片信息 + */ +@property (nonatomic, strong, readonly) NSData *originalImageData; + +-(void) releaseData; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMOSContentConvertManager.h b/ios/WuKongIMSDK.framework/Headers/WKMOSContentConvertManager.h new file mode 100644 index 0000000..94fe989 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMOSContentConvertManager.h @@ -0,0 +1,28 @@ +// +// WKMOSContentConvertManager.h +// WuKongIMSDK +// +// Created by tt on 2020/6/5. +// + +#import <Foundation/Foundation.h> +#import "WKMessage.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKMOSContentConvertManager : NSObject + ++ (WKMOSContentConvertManager *)shared; + +// 将mos的content转换为lm的content(TODO:为了兼容lm协议,如果没有指定mos协议不用管此方法) +-(NSDictionary*) convertContentToLM:(NSDictionary *)contentDic message:(WKMessage*)message; +// 将lm的content转换为mos的content (TODO:为了兼容lm协议,如果没有指定mos协议不用管此方法) +-(NSDictionary*) convertContentToMOS:(NSDictionary *)contentDic message:(WKMessage*)message; + + +/// 将mos正文类型转换为lm的正文类型 +/// @param mosContentType <#mosContentType description#> +-(NSInteger) convertTypeToLM:(NSInteger)mosContentType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMediaManager.h b/ios/WuKongIMSDK.framework/Headers/WKMediaManager.h new file mode 100644 index 0000000..8afa2e9 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMediaManager.h @@ -0,0 +1,188 @@ +// +// WKMediaManager.h +// WuKongIMSDK +// +// Created by tt on 2020/1/13. +// + +#import <Foundation/Foundation.h> +#import "WKMediaProto.h" +#import "WKMessage.h" +#import "WKTaskProto.h" +#import "WKTaskManager.h" +#import <CoreGraphics/CGBase.h> +#import <AVFoundation/AVFoundation.h> +#import "WKMessageFileDownloadTask.h" +NS_ASSUME_NONNULL_BEGIN + +typedef enum : NSUInteger { + WKMediaUploadStateProcessing = 0, + WKMediaUploadStateSuccess = 1, + WKMediaUploadStateFail = 2, +} WKMediaUploadState; + +typedef enum : NSUInteger { + WKMediaDownloadStateProcessing = 0, + WKMediaDownloadStateSuccess = 1, + WKMediaDownloadStateFail = 2, +} WKMediaDownloadState; + +@interface WKFileInfo : NSObject + +@property(nonatomic,copy) NSString *fid; // 文件唯一id +@property(nonatomic,copy) NSString *name; // 文件名 +@property(nonatomic,assign) long size; // 文件大小(单位byte) +@property(nonatomic,copy) NSString *url; // 文件路径 + +@end + +/** + 多媒体委托 + */ +@protocol WKMediaManagerDelegate <NSObject> + + +/** + 媒体文件数据更新 + + @param media 媒体文件 + */ +-(void) mediaManageUpdate:(id<WKMediaProto>)media; + + +@end + + +/** + 多媒体上传任务提供者 + */ +typedef id<WKTaskProto>_Nonnull(^WKMediaUploadTaskProvider)(WKMessage* message); + +/** + 多媒体下载任务提供者 + */ +typedef id<WKTaskProto>_Nonnull(^WKMediaDownloadTaskProvider)(WKMessage* message); + +// 音频播放完成block +typedef void(^WKAudioPlayerDidFinishBlock)(AVAudioPlayer *player,BOOL successFlag); + +// 音频播放进度 +typedef void (^WKAudioPlayerDidProgressBlock)(AVAudioPlayer *player); + +@interface WKMediaManager : NSObject + ++ (WKMediaManager *)shared; + +@property(nonatomic,strong) WKTaskManager *taskManager; +/** + 添加媒体委托 + + @param delegate <#delegate description#> + */ +-(void) addDelegate:(id<WKMediaManagerDelegate>) delegate; + + +/** + 移除媒体委托 + + @param delegate <#delegate description#> + */ +-(void)removeDelegate:(id<WKMediaManagerDelegate>) delegate; + + + +/** + 下载任务提供者 + */ +@property(nonatomic,copy) WKMediaDownloadTaskProvider downloadTaskProvider; +/** +上传任务提供者 + */ +@property(nonatomic,copy) WKMediaUploadTaskProvider uploadTaskProvider; + +/** + 上传消息里的多媒体 + + @param message 消息 + */ +-(void) upload:(WKMessage*) message; + + +/** + 下载消息的多媒体文件 + + @param message <#message description#> + */ +-(WKMessageFileDownloadTask*) download:(WKMessage*)message; + + +/** + 下载消息的多媒体文件 + + @param message 消息对象 + @param callback 下载回调 + */ +-(WKMessageFileDownloadTask*) download:(WKMessage*)message callback:(void(^ __nullable)(WKMediaDownloadState state,CGFloat progress,NSError * __nullable error))callback; + +///** +// 获取上传进度 +// +// @param message 消息 +// @return <#return value description#> +// */ +//-(CGFloat) getUploadProgress:(WKMessage*)message; +// +// +///** +// 获取下载进度 +// +// @param message 消息 +// @return <#return value description#> +// */ +//-(CGFloat) getDowloadProgress:(WKMessage*)message; + + + +/** + 将音频消息的副本转换为源文件 + + @param message <#message description#> + */ +-(void) voiceMessageThumbToSource:(WKMessage*)message; + +/** + * 是否正在播放音频 + * + */ +- (BOOL)isAudioPlaying; + +/** + * 播放音频文件 + * + * @param filePath 文件路径 + */ +-(void) playAudio:(NSString *)filePath playerDidFinish:(WKAudioPlayerDidFinishBlock)finishBlock progress:(WKAudioPlayerDidProgressBlock)progressBlock; + +/** + * 停止播放音频 + */ +- (void)stopAudioPlay; + +/** + 暂停播放 + */ +-(void) pauseAudioPlay; + +/** + 继续播放 + */ +-(void) continuePlay; + +// 获取所有消息缓存大小 +-(long long) messageCacheSize; + +-(void) cleanMessageCache; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMediaMessageContent.h b/ios/WuKongIMSDK.framework/Headers/WKMediaMessageContent.h new file mode 100644 index 0000000..2c02404 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMediaMessageContent.h @@ -0,0 +1,18 @@ +// +// WKMediaMessageContent.h +// WuKongIMSDK +// +// Created by tt on 2020/1/13. +// + +#import <Foundation/Foundation.h> +#import "WKMessageContent.h" +#import "WKMediaProto.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKMediaMessageContent : WKMessageContent<WKMediaProto> + + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMediaProto.h b/ios/WuKongIMSDK.framework/Headers/WKMediaProto.h new file mode 100644 index 0000000..6983341 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMediaProto.h @@ -0,0 +1,63 @@ +// +// WKMediaMessageContentProto.h +// WuKongIMSDK +// +// Created by tt on 2020/1/13. +// + +#import <Foundation/Foundation.h> +#import "WKMessage.h" +NS_ASSUME_NONNULL_BEGIN + +@protocol WKMediaProto <NSObject> + +/** + 消息 + */ +@property (nonatomic, weak) WKMessage *message; //TODO: 这里要注意不能声明为strong 如果声明为strong message和media互相引用 就释放不掉了导致内存爆炸。 + +/** + 媒体内容的本地路径(当remoteUrl为空时此属性必须有值) + */ +@property (nonatomic, copy) NSString *localPath; + +/** + 媒体内容上传服务器后的网络地址(上传成功后SDK会为该属性赋值) + */ +@property (nonatomic, copy) NSString *remoteUrl; + + +/** + 源文件扩展 + */ +@property(nullable,nonatomic,copy) NSString *extension; + +/** + 副本路径 + */ +@property(nullable,nonatomic,copy) NSString *thumbPath; + + +/** + 副本的扩展名 + */ +@property(nullable,nonatomic,copy) NSString *thumbExtension; + +/** + 保存数据到本地路径 + 多媒体上传前会调用此方法,请在此方法里将NSData数据保存到localPath对应的位置。 + 如果继承WKMediaMessageContent必须调用 [super writeDataToLocalPath] + */ +-(void) writeDataToLocalPath; + + +// 从本地扩展数据里获取值 +-(nullable id) getExtra:(NSString*)key; + +// 设置值到本地扩展字段内 +-(void) setExtra:(id)value key:(NSString*)key; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMediaUtil.h b/ios/WuKongIMSDK.framework/Headers/WKMediaUtil.h new file mode 100644 index 0000000..3767f02 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMediaUtil.h @@ -0,0 +1,43 @@ +// +// WKMediaUtils.h +// WuKongIMSDK +// +// Created by tt on 2020/1/13. +// + +#import <Foundation/Foundation.h> +#import "WKMediaProto.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKMediaUtil : NSObject + + +/** + 获取媒体本地路径 + + @param media <#media description#> + @return <#return value description#> + */ ++(NSString*) getLocalPath:(id<WKMediaProto>)media; + + +/** + 获取媒体副本本地路径 + + @param media <#media description#> + @return <#return value description#> + */ ++(NSString*) getThumbLocalPath:(id<WKMediaProto>)media; + + +/** + 获取频道的存储目录 + + @param channel <#channel description#> + @return <#return value description#> + */ ++(NSString*) getChannelDir:(WKChannel*) channel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMemoryCache.h b/ios/WuKongIMSDK.framework/Headers/WKMemoryCache.h new file mode 100644 index 0000000..1d3eb86 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMemoryCache.h @@ -0,0 +1,39 @@ +// +// WKCache.h +// WuKongIMBase +// +// Created by tt on 2020/1/11. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKMemoryCache : NSObject + + +/** + 最大缓存数量 默认不限制 + */ +@property(nonatomic,assign) NSInteger maxCacheNum; + +/** + 设置缓存 + + @param value 值 + @param key 键 + */ +-(void) setCache:(id __nullable)value forKey:(NSString*)key; + + +/** + 获取缓存 + + @param key 键 + @return 值 + */ +-(id) getCache:(NSString*)key; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMessage.h b/ios/WuKongIMSDK.framework/Headers/WKMessage.h new file mode 100644 index 0000000..8c5d3eb --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMessage.h @@ -0,0 +1,104 @@ +// +// WKMessage.h +// WuKongIMSDK +// +// Created by tt on 2019/11/27. +// + +#import <Foundation/Foundation.h> +#import "WKChannel.h" +#import "WKMessageContent.h" +#import "WKChannelInfo.h" +#import "WKConst.h" +#import "WKChannelMemberDB.h" +#import "WKTaskProto.h" +#import "WKSetting.h" +#import "WKMessageExtra.h" +#import "WKReaction.h" + +NS_ASSUME_NONNULL_BEGIN +@interface WKMessageHeader : NSObject +// 是否红点 +// 是否显示未读 +@property(nonatomic,assign) BOOL showUnread; // RedDot + +// 是否不存储 +@property(nonatomic,assign) BOOL noPersist; + +@property(nonatomic,assign) BOOL syncOnce; // 同步一次标记 + +@end + +@interface WKMessage : NSObject + +@property(nonatomic,strong) WKMessageHeader *header; // 消息头 + +@property(nonatomic,strong) WKSetting *setting; // 消息设置 + +@property(nonatomic,assign) uint32_t clientSeq; // 客户端序列号 (客户端提供,服务端原样返回) + +@property(nonatomic,copy) NSString *clientMsgNo; /// 客户端消息唯一编号(相同clientMsgNo被认为是重复消息) + +@property(nonatomic,assign) uint64_t messageId; // 消息ID(全局唯一) + +@property(nonatomic,assign) uint32_t messageSeq; // 消息序列号(用户唯一,有序) + +@property(nonatomic,assign) uint32_t orderSeq; // 消息排序号(消息越新序号越大) + +@property(nonatomic,assign) NSInteger timestamp; // 消息时间(服务器时间,单位秒) + +@property(nonatomic,assign) NSInteger localTimestamp; // 本地消息创建时间 + +@property(nonatomic,strong) WKChannelInfo *from; // 发送者 + +@property(nonatomic,copy) NSString *topic; // 消息话题 + +@property(nonatomic,copy) NSString *fromUid; // 发送者uid +@property(nonatomic,copy) NSString *toUid; // 接收者uid + +@property(nonatomic,strong,readonly) WKChannelMember *memberOfFrom; // 发送者在频道里的成员信息 + +@property(nonatomic,strong) WKChannel *channel; // 频道 + +@property(nonatomic,strong) WKChannel *parentChannel; // 父类频道 + +@property(nullable,nonatomic,strong,readonly) WKChannelInfo *channelInfo; // 频道资料,可能为空,如果为空可以调用WKChannelManager fetchChannelInfo:completion 触发频道信息变更委托 +@property(nonatomic,assign) NSInteger contentType; // 正文类型 +@property(nonatomic,strong) WKMessageContent *content; // 消息正文 +@property(nonatomic,strong) NSData *contentData; // 消息正文data数据 +@property(nonatomic,assign) BOOL voiceReaded; // 语音是否已读 (对语音消息有效) +@property(nonatomic,assign) WKMessageStatus status; // 消息状态 +@property(nonatomic,assign) WKReason reasonCode; // 原因代码,当status为WK_MESSAGE_FAIL时 应该有相应的原因代号 +@property(nonatomic,weak,readonly) id<WKTaskProto> task; // 消息关联的任务(例如:下载图片任务,上传图片任务等等) + +- (BOOL)isSend; // 是否是发送消息 + +@property(nonatomic,strong) NSMutableDictionary *extra; // 消息本地扩展数据 +@property(nonatomic,strong,nullable) NSArray<WKReaction*> *reactions; // 消息回应集合 +@property(nonatomic,assign) BOOL isDeleted; // 消息是否被删除 + +// ---------- 消息远程扩展 ---------- +@property(nonatomic,assign) BOOL hasRemoteExtra; // 是否有远程消息扩展(sdk内部用于插入消息扩展表的判断) + +@property(nonatomic,assign) BOOL viewed; // 是否已查看 0.未查看 1.已查看 (这个字段跟已读的区别在于是真正的查看了消息内容,比如图片消息 已读是列表滑动到图片消息位置就算已读,viewed是表示点开图片才算已查看,语音消息类似) + +@property(nonatomic,assign) NSInteger viewedAt; // 查看时间戳 + +@property(nonatomic,strong) WKMessageExtra *remoteExtra; // 消息远程扩展 +// +//@property(nonatomic,assign) BOOL revoke; // 消息是否被撤回 +//@property(nonatomic,copy) NSString *revoker; // 撤回者的uid +//@property(nonatomic,assign) NSInteger unreadCount; // 未读数量 +//@property(nonatomic,assign) NSInteger readedCount; // 已读数量 +//@property(nonatomic,assign) NSInteger extraVersion; // 扩展消息版本 +//@property(nonatomic,assign) BOOL readed; // 消息是否已读(“我”是否已读) +//@property(nonatomic,strong,nullable) NSData *contentEditData; // 消息编辑后的正文data数据 +//@property(nonatomic,strong,nullable) WKMessageContent *contentEdit; // 消息编辑后的正文 +//@property(nonatomic,assign) NSInteger editedAt; // 消息编辑时间 (0表示消息未被编辑) +//@property(nonatomic,assign) BOOL isEdit; // 是否编辑 +//@property(nonatomic,assign) BOOL needUpload; // 编辑内容是否需要上传 + +@end + + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMessageContent.h b/ios/WuKongIMSDK.framework/Headers/WKMessageContent.h new file mode 100644 index 0000000..9f04ab4 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMessageContent.h @@ -0,0 +1,201 @@ +// +// WKMessageContent.h +// WuKongIMSDK +// +// Created by tt on 2019/11/29. +// + + +extern NSString * _Nonnull const WKEntityTypeRobotCommand; // robot命令 + +#import <Foundation/Foundation.h> +#import "WKUserInfo.h" +#import <fmdb/FMDB.h> +@class WKMessageContent; +NS_ASSUME_NONNULL_BEGIN + + +/*! + @提醒的类型 + */ +typedef NS_ENUM(NSUInteger, WKMentionedType) { + /*! + @所有人 + */ + WK_Mentioned_All = 1, + + /*! + @部分指定用户 + */ + WK_Mentioned_Users = 2, +}; + +@interface WKMessageEntity : NSObject +@property(nonatomic,copy) NSString *type; +@property(nonatomic,assign) NSRange range; +@property(nonatomic,strong) id value; + ++(WKMessageEntity*) type:(NSString*)type range:(NSRange)range; ++(WKMessageEntity*) type:(NSString*)type range:(NSRange)range value:(id _Nullable)value; +@end + +/** + 消息中的@提醒信息 + */ +@interface WKMentionedInfo : NSObject + + +/// 初始化@提醒信息 +/// @param type <#type description#> +- (instancetype)initWithMentionedType:(WKMentionedType)type; +/*! + 初始化@提醒信息 + + @param type @提醒的类型 + @param uids @的用户ID列表 + + @return @提醒信息的对象 + */ +- (instancetype)initWithMentionedType:(WKMentionedType)type + uids:(NSArray *__nullable)uids; + + +/*! + @提醒的类型 + */ +@property (nonatomic, assign) WKMentionedType type; + +/*! + @的用户ID列表 + + @discussion 如果type是@所有人,则可以传nil + */ +@property (nonatomic, strong) NSArray<NSString *> *uids; + +/*! + 是否@了我 + */ +@property (nonatomic, readonly) BOOL isMentionedMe; + + +@end + + +/// 回复 +@interface WKReply : NSObject + +@property(nonatomic,copy) NSString *messageID; // 被回复的消息ID +@property(nonatomic,assign) uint32_t messageSeq; // 被回复的消息seq + +@property(nonatomic,copy) NSString *fromUID; // 被回复消息的发送者 +@property(nonatomic,copy) NSString *fromName; // 被回复消息的发送者名称 +@property(nonatomic,copy) NSString *rootMessageID; // 根消息ID(可为空) +@property(nonatomic,assign) BOOL revoke; // 是否被撤回 + +@property(nonatomic,strong) WKMessageContent *content; // 被回复的消息正文 + +@end + +@class WKMessage; +@interface WKMessageContent : NSObject<NSCopying> + +//TODO: 这里要注意不能声明为strong 如果声明为strong message和media互相引用 就释放不掉了导致内存爆炸。 +@property(nonatomic,weak) WKMessage *message; + +/** + 消息内容中携带的发送者的用户信息 + */ +@property (nonatomic, strong) WKUserInfo *senderUserInfo; + +/*! + 消息中的@提醒信息 + */ +@property (nonatomic, strong) WKMentionedInfo *mentionedInfo; + + +/// 回复内容 +@property(nonatomic,strong) WKReply *reply; + +/*! + 将消息内容序列化,编码成为可传输的json数据 + + @discussion + 消息内容通过此方法,将消息中的所有数据,编码成为json数据,返回的json数据将用于网络传输。 + */ +- (NSData *)encode; + +// 上层无需实现encode 实现此方法即可 +-(NSDictionary*) encodeWithJSON; + +// 上层无序实现decode 实现此方法即可 +-(void) decodeWithJSON:(NSDictionary*)contentDic; + +/*! + 将json数据的内容反序列化,解码生成可用的消息内容 + + @param data 消息中的原始json数据 + + @discussion + 网络传输的json数据,会通过此方法解码,获取消息内容中的所有数据,生成有效的消息内容。 + */ +- (void)decode:(NSData *)data; + +// TODO: 解码消息只供DB使用(为了兼容MOS的@消息,因为@消息有DB操作 如果直接调用DB会与外面的DB发生冲突) +- (void)decode:(NSData *)data db:(FMDatabase*)db; + + + + +/** + 你自定义的消息类型,在各个平台上需要保持一致 + @return 正文类型 + */ ++(NSInteger) contentType; + + +/// 实际获取到的contentType (这种情况只会一个content对象被指定多个contentType的时候,可以通过这个属性获取到真实的contentType) +@property(nonatomic,assign,readonly) NSInteger realContentType; + +/*! + 返回可搜索的关键内容列表 + + @return 返回可搜索的关键内容列表 + + @discussion 这里返回的关键内容列表将用于消息搜索,自定义消息必须要实现此接口才能进行搜索。 + */ +- (NSString *)searchableWord; + + +/** + 返回在会话列表和本地通知中显示的消息内容摘要 + + @return <#return value description#> + */ +- (NSString *)conversationDigest; + + +/// 消息正文字典 +@property(nonatomic,strong) NSDictionary *contentDict; + +/** + 扩展字段 + */ +@property(nonatomic,strong) NSMutableDictionary *extra; + + +/// in 如果此字段有值 表示 只有在此值内的uid才能看见此条消息 +@property(nonatomic,strong) NSArray *visibles; + +@property(nonatomic,copy,nullable) NSString *robotID; // 机器人编号,如果是机器人发的消息需要给到机器人的ID +/// 消息entitiy项 +@property(nonatomic,strong) NSArray<WKMessageEntity*> *entities; + +@property(nonatomic,assign) BOOL flame; // 是否开启阅后即焚 +@property(nonatomic,assign) NSInteger flameSecond; // 阅后即焚的秒数,如果为0 表示读后就删,如果有值表示读后多少秒后删 + +// 用户滑动看见消息就认为已查看 默认为true +-(BOOL) viewedOfVisible; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMessageDB.h b/ios/WuKongIMSDK.framework/Headers/WKMessageDB.h new file mode 100644 index 0000000..d933957 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMessageDB.h @@ -0,0 +1,294 @@ +// +// WKMessageDB.h +// WuKongIMSDK +// +// Created by tt on 2019/11/29. +// + +#import <Foundation/Foundation.h> +#import "WKMessage.h" +#import "WKSendackPacket.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKMessageDB : NSObject + ++ (WKMessageDB *)shared; +/** + 保存消息 + + @param messages 消息集合 + @return 返回去重了的消息集合 + */ +-(NSArray<WKMessage*>*) saveMessages:(NSArray<WKMessage*>*)messages; + + +/// 保存或更新消息 +/// @param messages <#messages description#> +-(NSArray<WKMessage*>*) replaceMessages:(NSArray<WKMessage*>*)messages; + + +/** + 获取频道中,从指定消息之前、指定数量的最新消息实体 + + @param channel 频道 + @param oldestOrderSeq 截止的客户端排序号 + @param limit 消息数量限制 + @return 消息实体集合 + + 例如: oldestOrderSeq为20,count为2,会返回oldestOrderSeq为19和18的WKMessage对象列表。 + */ +//-(NSArray<WKMessage*>*) getMessages:(WKChannel*)channel oldestOrderSeq:(uint32_t)oldestOrderSeq limit:(int) limit; +// + +/// 获取频道中,从指定消息之前、指定数量的最新消息实体 +/// @param channel 查询指定频道 +/// @param startOrderSeq 开始orderSeq +/// @param endOrderSeq 结束排序seq +/// @param limit 限制 +/// @param pullMode 拉取模式 +-(NSArray<WKMessage*>*) getMessages:(WKChannel*)channel startOrderSeq:(uint32_t)startOrderSeq endOrderSeq:(uint32_t)endOrderSeq limit:(int) limit pullMode:(WKPullMode)pullMode; + + +/// 获取消息列表 +/// @param channel 频道对象 +/// @param keyword 关键字 +-(NSArray<WKMessage*>*) getMessages:(WKChannel*)channel keyword:(NSString*)keyword limit:(int) limit; + +/// 获取消息 +/// @param messageSeq 偏移的messageSeq +/// @param limit 数据限制 +-(NSArray<WKMessage*>*) getMessages:(uint32_t)messageSeq limit:(int)limit; + + +-(NSArray<WKMessage*>*) getDeletedMessagesWithChannel:(WKChannel*)channel minMessageSeq:(uint32_t)minMessageSeq maxMessageSeq:(uint32_t)maxMessageSeq; + + +/// 获取消息序号区间内已经被删除的消息的messageSeq +/// @param channel 频道 +/// @param minMessageSeq 最小消息序号 +/// @param maxMessageSeq 最大消息序号 +-(NSArray<NSNumber*>*) getDeletedMessageSeqWithChannel:(WKChannel*)channel minMessageSeq:(uint32_t)minMessageSeq maxMessageSeq:(uint32_t)maxMessageSeq; + +/// 获取比messageSeq小并且已删除了的序号 +/// @param channel 频道 +/// @param messageSeq 消息序号 +/// @param limit 最大数量 +-(NSArray<NSNumber*>*) getDeletedLessThanMessageSeqWithChannel:(WKChannel*)channel messageSeq:(uint32_t)messageSeq limit:(int)limit; + +/// 获取比messageSeq大并且已删除了的序号 +/// @param channel 频道 +/// @param messageSeq 消息序号 +/// @param limit 最大数量 +-(NSArray<NSNumber*>*) getDeletedMoreThanMessageSeqWithChannel:(WKChannel*)channel messageSeq:(uint32_t)messageSeq limit:(int)limit; + +/** + 通过序列号获取消息 + + @param clientSeqs <#clientSeqs description#> + @return <#return value description#> + */ +-(NSArray<WKMessage*>*) getMessagesWithClientSeqs:(NSArray<NSNumber*>*)clientSeqs; + + +/// 通过客户端消息编号获取消息列表 +/// @param clientMsgNos <#clientMsgNos description#> +-(NSArray<WKMessage*>*) getMessagesWithClientMsgNos:(NSArray*)clientMsgNos; + +/** + 通过消息id集合获取消息 + */ +-(NSArray<WKMessage*>*) getMessagesWithMessageIDs:(NSArray<NSNumber*>*)messageIDs; + +/** + 通过客户端消息编号获取消息 + + @param clientMsgNo 客户端消息编号 + @return <#return value description#> + */ +-(WKMessage*) getMessageWithClientMsgNo:(NSString*)clientMsgNo; +/** + 获取指定clientSeq的消息 + + @param clientSeq 客户端序号 + @return <#return value description#> + */ +-(WKMessage*) getMessage:(uint32_t)clientSeq; + + +/// 通过消息序号查询消息 +/// @param channel <#channel description#> +/// @param messageSeq <#messageSeq description#> +-(WKMessage*) getMessage:(WKChannel*)channel messageSeq:(uint32_t)messageSeq; + + + +/// 通过排序号获取频道内指定消息 +/// @param orderSeq <#orderSeq description#> +/// @param channel <#channel description#> +-(WKMessage*) getMessage:(WKChannel*)channel orderSeq:(uint32_t)orderSeq; + + +/// 获取小于指定orderSeq 有messageSeq的第一条消息 +/// @param channel <#channel description#> +/// @param orderSeq <#orderSeq description#> +-(WKMessage*) getMessage:(WKChannel*)channel lessThanAndFirstMessageSeq:(uint32_t)orderSeq; + +// 获取大于指定orderSeq 有messageSeq的第一条消息 +-(WKMessage*) getMessage:(WKChannel*)channel moreThanAndFirstMessageSeq:(uint32_t)orderSeq; +/** + 通过消息ID获取消息 + + @param messageId <#messageId description#> + @return <#return value description#> + */ +-(WKMessage*) getMessageWithMessageId:(uint64_t)messageId; + +/** + 更新消息通过发送回执消息 + + @param sendackPackets <#sendackPackets description#> + */ +-(void) updateMessageWithSendackPackets:(NSArray<WKSendackPacket*> *)sendackPackets; + + +/** + 更新消息 + + @param content 消息content内容 + @param status 消息状态 + @param extra 消息扩展数据 + @param clientSeq 消息客户端唯一编号 + */ +-(void) updateMessageContent:(NSData*)content status:(WKMessageStatus)status extra:(NSDictionary*)extra clientSeq:(uint32_t)clientSeq; + + +/** + 更新语音消息已读状态 + + @param voiceReaded 语音是否已读 + @param clientSeq 客户端唯一ID + */ +-(void) updateMessageVoiceReaded:(BOOL)voiceReaded clientSeq:(uint32_t)clientSeq; + + + + + +/** + 更新消息扩展字段 + + @param extra <#extra description#> + @param clientSeq <#clientSeq description#> + */ +-(void) updateMessageExtra:(NSDictionary*) extra clientSeq:(uint32_t)clientSeq; +/** + 将上传中的消息状态更改为发送失败的状态 + */ +-(void) updateMessageUploadingToFailStatus; + + +/// 获取所有等待发送的消息 +-(NSArray<WKMessage*>*) getMessagesWaitSend; +/** + 更新消息状态 + + @param status 消息状态 + @param clientSeq 消息clientSeq + */ +-(void) updateMessageStatus:(WKMessageStatus)status withClientSeq:(uint32_t)clientSeq; + + +/// 更新消息撤回状态 +/// @param revoke <#revoke description#> +/// @param clientMsgNo <#clientMsgNo description#> +-(void) updateMessageRevoke:(BOOL)revoke clientMsgNo:(NSString*)clientMsgNo; + +/** + 获取某个频道消息表中最大的message_seq + + @return <#return value description#> + */ +-(uint32_t) getMaxMessageSeq:(WKChannel*)channel; + + +/** + 删除消息 + + @param message 消息对象 + */ +-(void) deleteMessage:(WKMessage*)message; + + +/** + 彻底将消息从数据库删除 (deleteMessage只是标记为删除) + */ +- (void)destoryMessage:(WKMessage *)message; + +/** + 获取指定频道内指定发送者的消息集合 + */ +-(NSArray<WKMessage*>*) getMessages:(NSString*)fromUID channel:(WKChannel*)channel; + + +/** + 清除指定频道的消息 + + @param channel 频道 + */ +-(void) clearMessages:(WKChannel*)channel; + + +/// 清除所有消息 +-(void) clearAllMessages; + +/// 清除指定maxMsgSeq以前的所有消息 +/// @param channel 频道 +/// @param maxMsgSeq 指定的messageSeq +/// @param isContain 清除的消息是否包含指定的maxMsgSeq +- (void) clearFromMsgSeq:(WKChannel*)channel maxMsgSeq:(uint32_t)maxMsgSeq isContain:(BOOL)isContain; +/** + 获取最后一条消息 + + @param channel <#channel description#> + @return <#return value description#> + */ +-(WKMessage*) getLastMessage:(WKChannel*)channel; + + +/// 获取指定偏移量的最新消息 +/// @param channel <#channel description#> +/// @param offset <#offset description#> +-(WKMessage*) getLastMessage:(WKChannel*)channel offset:(NSInteger)offset; + + +/// 查询排序在指定message之前的消息数量 +/// @param message <#message description#> +-(NSInteger) getOrderCountMoreThanMessage:(WKMessage*)message; + +/** + 获取指定频道的最大扩展版本 + */ +-(long long) getMessageExtraMaxVersion:(WKChannel*)channel; + +/** + 获取需要焚烧的消息(阅后即焚) + */ +-(NSArray<WKMessage*>*) getMessagesOfNeedFlame; + +/** + 获取消息最大ID + */ +-(long long) getMessageMaxID; + +/// 更新消息为已查看 +-(NSArray<WKMessage*>*) updateViewed:(NSArray<WKMessage*>*)messages; + +/** + 获取指定messageSeq的周围第一条消息的messageSeq 0表示没有 + */ +-(uint32_t) getChannelAroundFirstMessageSeq:(WKChannel*)channel messageSeq:(uint32_t)messageSeq; + +-(WKMessageContent*) decodeContent:(NSInteger)contentType data:(NSData *)contentData db:(FMDatabase*)db; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMessageExtra.h b/ios/WuKongIMSDK.framework/Headers/WKMessageExtra.h new file mode 100644 index 0000000..606779e --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMessageExtra.h @@ -0,0 +1,41 @@ +// +// WKMessageExtra.h +// WuKongIMSDK +// +// Created by tt on 2022/4/12. +// + +#import <Foundation/Foundation.h> +#import "WKMessageContent.h" +NS_ASSUME_NONNULL_BEGIN + +typedef enum : NSUInteger { + WKContentEditUploadStatusSuccess, // 成功 + WKContentEditUploadStatusWait, // 等待上传 + WKContentEditUploadStatusError, // 上传错误 +} WKContentEditUploadStatus; // 编辑正文上传状态 + +@interface WKMessageExtra : NSObject + +@property(nonatomic,assign) uint64_t messageID; // 消息id +@property(nonatomic,copy) NSString *channelID; // 频道id +@property(nonatomic,assign) NSInteger channelType; // 频道类型 +@property(nonatomic,assign) uint32_t messageSeq; // 消息id +@property(nonatomic,assign) BOOL readed; // 是否已读 +@property(nonatomic,copy) NSDate *readedAt; // 已读时间 +@property(nonatomic,assign) NSInteger readedCount; // 已读人数 +@property(nonatomic,assign) NSInteger unreadCount; // 未读人数 +@property(nonatomic,assign) BOOL revoke; // 是否撤回 +@property(nonatomic,copy) NSString *revoker; // 撤回人的uid +@property(nonatomic,assign) int64_t extraVersion; +@property(nonatomic,strong,nullable) NSData *contentEditData; // 消息编辑后的正文data数据 +@property(nonatomic,strong,nullable) WKMessageContent *contentEdit; // 消息编辑后的正文 +@property(nonatomic,assign) NSInteger editedAt; // 消息编辑时间 (0表示消息未被编辑) +@property(nonatomic,assign) BOOL isEdit; // 是否编辑 +@property(nonatomic,assign) WKContentEditUploadStatus uploadStatus; // 上传状态 + +@property(nonatomic,copy) NSDictionary *extra; // 扩展数据 + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMessageExtraDB.h b/ios/WuKongIMSDK.framework/Headers/WKMessageExtraDB.h new file mode 100644 index 0000000..d6e5130 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMessageExtraDB.h @@ -0,0 +1,42 @@ +// +// WKMessageExtraDB.h +// WuKongIMSDK +// +// Created by tt on 2022/4/12. +// + +#import <Foundation/Foundation.h> +#import "WKMessageExtra.h" +#import "WKChannel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKMessageExtraDB : NSObject + ++ (WKMessageExtraDB *)shared; + + +-(void) addOrUpdateMessageExtras:(NSArray<WKMessageExtra*>*)messageExtras; + +-(void) addOrUpdateMessageExtra:(WKMessageExtra*)messageExtra db:(FMDatabase*)db; + + +-(long long) getMessageExtraMaxVersion:(WKChannel*)channel; + +// 添加或更新正文编辑的内容 +-(void) addOrUpdateContentEdit:(WKMessageExtra*)messageExtra; + +// 通过消息ID获取消息扩展 +-(WKMessageExtra*) getMessageExtraWithMessageID:(uint64_t)messageID; + +// 获取等待上传的正文编辑内容 +-(NSArray<WKMessageExtra*>*) getContentEditWaitUpload; + +// 更新正文上传状态为失败 +-(void) updateContentEditUploadStatusToFailStatus; + +// 更新消息状态 +-(void) updateUploadStatus:(WKContentEditUploadStatus)status withMessageID:(uint64_t)messageID; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMessageFileDownloadTask.h b/ios/WuKongIMSDK.framework/Headers/WKMessageFileDownloadTask.h new file mode 100644 index 0000000..16a4865 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMessageFileDownloadTask.h @@ -0,0 +1,25 @@ +// +// WKMessageFileDownloadTask.h +// WuKongIMBase +// +// Created by tt on 2020/1/16. +// + +#import <Foundation/Foundation.h> +#import "WKBaseTask.h" +#import "WKMessage.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKMessageFileDownloadTask : WKBaseTask +-(instancetype) initWithMessage:(WKMessage*)message; + + +// 消息 +@property(nonatomic,strong) WKMessage *message; + + + + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMessageFileUploadTask.h b/ios/WuKongIMSDK.framework/Headers/WKMessageFileUploadTask.h new file mode 100644 index 0000000..1068266 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMessageFileUploadTask.h @@ -0,0 +1,32 @@ +// +// WKMessageFileUploadTask.h +// WuKongIMSDK +// +// Created by tt on 2020/1/15. +// + +#import <Foundation/Foundation.h> +#import "WKTaskProto.h" +#import "WKMessage.h" +#import "WKBaseTask.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKMessageFileUploadTask : WKBaseTask + +-(instancetype) initWithMessage:(WKMessage*)message; + +// 消息 +@property(nonatomic,strong) WKMessage *message; + + +/** + 上传后返回的路径 + */ +@property(nullable,nonatomic,strong) NSString *remoteUrl; + + + + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMessageStatusModel.h b/ios/WuKongIMSDK.framework/Headers/WKMessageStatusModel.h new file mode 100644 index 0000000..bccadfc --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMessageStatusModel.h @@ -0,0 +1,21 @@ +// +// WKMessageStatusModel.h +// WuKongIMBase +// +// Created by tt on 2019/12/29. +// + +#import <Foundation/Foundation.h> +#import "WKConst.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKMessageStatusModel : NSObject +// 消息唯一ID +@property(nonatomic,assign) uint32_t clientSeq; +// 消息状态 +@property(nonatomic) WKMessageStatus status; + +-(instancetype) initWithClientSeq:(uint32_t)clientSeq status:(WKMessageStatus)status; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKMultiMediaMessageContent.h b/ios/WuKongIMSDK.framework/Headers/WKMultiMediaMessageContent.h new file mode 100644 index 0000000..d4daa7e --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKMultiMediaMessageContent.h @@ -0,0 +1,27 @@ +// +// WKMultiMediaMessageContent.h +// WuKongIMSDK +// +// Created by tt on 2020/1/13. +// + +#import <Foundation/Foundation.h> +#import "WKMessageContent.h" +#import "WKMediaProto.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 如果一个消息有多个多媒体文件 使用此MessageContent + */ +@interface WKMultiMediaMessageContent : WKMessageContent + + +/** + 多个多媒体文件 + */ +@property NSArray<id<WKMediaProto>> *medias; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKNOGeneraterUtil.h b/ios/WuKongIMSDK.framework/Headers/WKNOGeneraterUtil.h new file mode 100644 index 0000000..e7d35ab --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKNOGeneraterUtil.h @@ -0,0 +1,22 @@ +// +// WKNOGeneraterUtil.h +// WuKongIMSDK +// +// Created by tt on 2020/6/1. +// + +#import <Foundation/Foundation.h> + +/** + * 为一段data创建唯一的64位数据签名 + * + * @param[in] psrc src data + * @param[in] slen data的长度 + * @return 操作结果 + * - 1 成功 + * - -1 失败 + * @note 异常情况: + * - if slen<0,有可能出现程序异常; + * - if slen==0,sign = 0:0; + */ +uint64_t get_sign64 (const char* psrc, int slen); diff --git a/ios/WuKongIMSDK.framework/Headers/WKOptions.h b/ios/WuKongIMSDK.framework/Headers/WKOptions.h new file mode 100644 index 0000000..0ff6e46 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKOptions.h @@ -0,0 +1,143 @@ +// +// WKOptions.h +// CocoaAsyncSocket +// +// Created by tt on 2019/11/23. +// + +#import <Foundation/Foundation.h> +#import "WKConnectInfo.h" +#import "WKConst.h" +NS_ASSUME_NONNULL_BEGIN + + +typedef enum : NSUInteger { + WKModeWrite, // 写扩散模式 + WKModeRead, // 读扩散模式 +} WKMode; + + +typedef WKConnectInfo*_Nonnull(^WKConnectInfoCallback)(void); + + +@interface WKOptions : NSObject + + +/** + IM的host + */ +@property(nonatomic,copy) NSString *host; + +/** + IM的端口 + */ +@property(nonatomic,assign) uint16_t port; + + +/// IM模式 +@property(nonatomic,assign) WKMode mode; +/** + 连接信息回调 + */ +@property(nonatomic,copy) WKConnectInfoCallback connectInfoCallback; + + +/** +连接信息 + */ +@property(nullable,nonatomic,strong) WKConnectInfo *connectInfo; +/** + 是否是debug模式 + */ +@property(nonatomic,assign) bool isDebug; + + +/** + 是否有登录信息 + + @return <#return value description#> + */ +-(BOOL) hasLogin; + +/** + 心跳间隔 ( 单位秒) + */ +@property(nonatomic,assign) NSTimeInterval heartbeatInterval; + +/** + 数据库的存储目录 + */ +@property(nonatomic,copy) NSString *dbDir; + + +/// db前缀 +@property(nonatomic,copy) NSString *dbPrefix; + +// 消息文件根目录 +@property(nonatomic,copy) NSString *messageFileRootDir; + + +/** + 在每次发送消息中是否携带发送者的用户信息。 + */ +@property(nonatomic,assign) bool enableMessageAttachUserInfo; + +/** + 消息重试间隔 (单位秒) + */ +@property(nonatomic,assign) NSTimeInterval messageRetryInterval; +// 编辑后的消息正文上传重试间隔 (单位秒) +@property(nonatomic,assign) NSTimeInterval contentEditRetryInterval; + +// reminder已done的数据上传过期时间(超过这个时间将设置为上传失败) (单位秒) +@property(nonatomic,assign) NSTimeInterval reminderDoneUploadExpire; + +@property(nonatomic,assign) NSTimeInterval reminderRetryInterval; // 提醒项重试间隔 +@property(nonatomic,assign) NSInteger reminderRetryCount; // 提醒项重试次数 + +/** + 消息重试次数 + */ +@property(nonatomic,assign) NSInteger messageRetryCount; + +// 消息正文重试次数 +@property(nonatomic,assign) NSInteger contentEditRetryCount; + +/** + 已读回执flush到服务器的间隔 + */ +@property(nonatomic,assign) NSTimeInterval receiptFlushInterval; + +/** + 离线消息每次拉取数量 + */ +@property(nonatomic,assign) NSInteger offlineMessageLimit; + + +/// 发送图片的时候图片最大大小,大于这个大小将自动压缩 +@property(nonatomic,assign) long imageMaxBytes; + + +/// SDK使用消息协议版本(默认使用最新的协议,如果使用旧协议需要手动设置值) +@property(nonatomic,assign) uint8_t protoVersion; + + + +/// 同步频道消息每次大小 +@property(nonatomic,assign) NSInteger syncChannelMessageLimit; + +/// 协议类型 +@property(nonatomic,assign) WKProto proto; + +@property(nonatomic,assign) BOOL mosConvertOn; // 是否开启mos的content转换(临时参数) + +@property(nonatomic,assign) NSInteger messageExtraSyncLimit; // 同步扩展消息每次数量限制 + +@property(nonatomic,assign) NSInteger channelRequestMaxLimit; // 同时发起请求频道数据的最大数量 + +// 是否追踪db日志 +@property(nonatomic,assign) BOOL traceDBLog; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKPacket.h b/ios/WuKongIMSDK.framework/Headers/WKPacket.h new file mode 100644 index 0000000..60562ef --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKPacket.h @@ -0,0 +1,17 @@ +// +// WKPacket.h +// WuKongIMSDK +// +// Created by tt on 2019/11/25. +// + +#import <Foundation/Foundation.h> +#import "WKHeader.h" +typedef NSString* (^Encode)(void); + +@interface WKPacket : NSObject + +@property(nonatomic,strong) WKHeader *header; + + +@end diff --git a/ios/WuKongIMSDK.framework/Headers/WKPacketBodyCoder.h b/ios/WuKongIMSDK.framework/Headers/WKPacketBodyCoder.h new file mode 100644 index 0000000..a3827c6 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKPacketBodyCoder.h @@ -0,0 +1,15 @@ +// +// WKPacketBodyCoder.h +// WuKongIMSDK +// +// Created by tt on 2019/11/25. +// +#import "WKPacket.h" + +@protocol WKPacketBodyCoder <NSObject> + +-(WKPacket*) decode:(NSData*) body header:(WKHeader*)header; + +-(NSData*) encode:(WKPacket*)packet; + +@end diff --git a/ios/WuKongIMSDK.framework/Headers/WKPakcetBodyCoderManager.h b/ios/WuKongIMSDK.framework/Headers/WKPakcetBodyCoderManager.h new file mode 100644 index 0000000..cfd3952 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKPakcetBodyCoderManager.h @@ -0,0 +1,33 @@ +// +// WKPakcetBodyManager.h +// WuKongIMSDK +// +// Created by tt on 2019/11/25. +// + +#import <Foundation/Foundation.h> +#import "WKPacketBodyCoder.h" +#import "WKConst.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKPakcetBodyCoderManager : NSObject + + +/** + 注册body解码者 + + @param packetType 包类型 + @param bodyCoder 包编码者 + */ +-(void) registerBodyCoder:(WKPacketType)packetType bodyCoder:(id<WKPacketBodyCoder>)bodyCoder; + +/** + 获取body编码者 + + @param packetType 包类型 + @return 返回包body编码者 + */ +-(id<WKPacketBodyCoder>) getBodyCoder:(WKPacketType)packetType; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKPingPacket.h b/ios/WuKongIMSDK.framework/Headers/WKPingPacket.h new file mode 100644 index 0000000..12896e7 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKPingPacket.h @@ -0,0 +1,17 @@ +// +// WKPingPacket.h +// WuKongIMSDK +// +// Created by tt on 2019/11/27. +// + +#import <Foundation/Foundation.h> +#import "WKPacket.h" +#import "WKPacketBodyCoder.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKPingPacket : WKPacket<WKPacketBodyCoder> + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKPongPacket.h b/ios/WuKongIMSDK.framework/Headers/WKPongPacket.h new file mode 100644 index 0000000..8ec42c7 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKPongPacket.h @@ -0,0 +1,17 @@ +// +// WKPongPacket.h +// WuKongIMSDK +// +// Created by tt on 2019/11/27. +// + +#import <Foundation/Foundation.h> +#import "WKPacket.h" +#import "WKPacketBodyCoder.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKPongPacket : WKPacket<WKPacketBodyCoder> + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKRSAUtil.h b/ios/WuKongIMSDK.framework/Headers/WKRSAUtil.h new file mode 100644 index 0000000..2d38659 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKRSAUtil.h @@ -0,0 +1,48 @@ +// +// WKRSAUtil.h +// WuKongIMSDK +// +// Created by tt on 2021/9/16. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKRSAUtil : NSObject +/** + * -------RSA 字符串公钥加密------- + @param plaintext 明文,待加密的字符串 + @param pubKey 公钥字符串 + @return 密文,加密后的字符串 + */ ++ (NSString *)encrypt:(NSString *)plaintext PublicKey:(NSString *)pubKey; + +/** + * -------RSA 公钥文件加密------- + @param plaintext 明文,待加密的字符串 + @param path 公钥文件路径,p12或pem格式 + @return 密文,加密后的字符串 + */ ++ (NSString *)encrypt:(NSString *)plaintext KeyFilePath:(NSString *)path; + +/** + * -------RSA 私钥字符串解密------- + @param ciphertext 密文,需要解密的字符串 + @param privKey 私钥字符串 + @return 明文,解密后的字符串 + */ ++ (NSString *)decrypt:(NSString *)ciphertext PrivateKey:(NSString *)privKey; + +/** + * -------RSA 私钥文件解密------- + @param ciphertext 密文,需要解密的字符串 + @param path 私钥文件路径,p12或pem格式(pem私钥需为pcks8格式) + @param pwd 私钥文件的密码 + @return 明文,解密后的字符串 + */ ++ (NSString *)decrypt:(NSString *)ciphertext KeyFilePath:(NSString *)path FilePwd:(NSString *)pwd; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKReaction.h b/ios/WuKongIMSDK.framework/Headers/WKReaction.h new file mode 100644 index 0000000..d8bdf4b --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKReaction.h @@ -0,0 +1,32 @@ +// +// WKReaction.h +// WuKongIMSDK +// +// Created by tt on 2021/9/13. +// + +#import <Foundation/Foundation.h> +#import "WKChannel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKReaction : NSObject + +@property(nonatomic,strong) WKChannel *channel; + +// 消息ID(全局唯一) +@property(nonatomic,assign) uint64_t messageId; +// 回应uid +@property(nonatomic,copy) NSString *uid; + +// 回应的emoji +@property(nonatomic,copy) NSString *emoji; + +@property(nonatomic,assign) uint64_t version; + +// 回应时间 +@property(nonatomic,copy) NSString *createdAt; + +@property(nonatomic,assign) NSInteger isDeleted; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKReactionDB.h b/ios/WuKongIMSDK.framework/Headers/WKReactionDB.h new file mode 100644 index 0000000..03ec2b8 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKReactionDB.h @@ -0,0 +1,44 @@ +// +// WKReactionDB.h +// WuKongIMSDK +// +// Created by tt on 2021/9/13. +// + +#import <Foundation/Foundation.h> +#import <fmdb/FMDB.h> +#import "WKReaction.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface WKReactionDB : NSObject + ++ (WKReactionDB *)shared; + + +/** + 获取某个消息的回应 + */ +-(NSArray<WKReaction*>*) getReactions:(NSArray<NSNumber*>*) messageIDs; + +/** + 获取以消息ID为key 回应集合为值的字典 + */ +-( NSDictionary<NSString*,NSArray<WKReaction*>*> *) getReactionDictionary:(NSArray<NSNumber*>*) messageIDs; + + +/** + 插入回应 + */ +-(BOOL) insertOrUpdateReactions:(NSArray<WKReaction*>*)reactions; + +-(BOOL) insertOrUpdateReactions:(NSArray<WKReaction*>*)reactions db:(FMDatabase*)db; + +/** + 获取某个频道的最大版本号 + */ +-(uint64_t) maxVersion:(WKChannel*) channel; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKReactionManager.h b/ios/WuKongIMSDK.framework/Headers/WKReactionManager.h new file mode 100644 index 0000000..a91a86e --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKReactionManager.h @@ -0,0 +1,67 @@ +// +// WKReactionManager.h +// WuKongIMSDK +// +// Created by tt on 2021/9/13. +// + +#import <Foundation/Foundation.h> +#import "WKChannel.h" +#import "WKReaction.h" +@class WKReactionManager; +NS_ASSUME_NONNULL_BEGIN + + +typedef void(^WKSyncReactionsCallback)(NSArray<WKReaction*> * __nullable reactions,NSError * __nullable error); +typedef void(^WKAddOrCancelReactionsCallback)(NSError * __nullable error); + +@protocol WKReactionManagerDelegate <NSObject> + +@optional + +// reaction改变 +-(void) reactionManagerChange:(WKReactionManager*)reactionManager reactions:(NSArray<WKReaction*>*)reactions channel:(WKChannel*)channel; + +@end + +@interface WKReactionManager : NSObject + ++ (WKReactionManager *)shared; + +/** + 添加或取消回应,如果同一个用户存在reactionName的回应则取消回应 + @param reactionName 回应的名称,一般是emoji或本地emoji图片的名称 + @param messageID 回应消息的ID + @param complete 结果回掉 + */ + +-(void) addOrCancelReaction:(NSString*)reactionName messageID:(uint64_t)messageID complete:(void(^_Nullable)(NSError * _Nullable error))complete; + +/** + 添加连接委托 + + @param delegate <#delegate description#> + */ +-(void) addDelegate:(id<WKReactionManagerDelegate>) delegate; + + +/** + 移除连接委托 + + @param delegate <#delegate description#> + */ +-(void)removeDelegate:(id<WKReactionManagerDelegate>) delegate; + + +-(void) sync:(WKChannel*)channel; + +// 同步点赞数据提供者 +@property(nonatomic,copy) void(^syncReactionsProvider)(WKChannel *channel,uint64_t maxVersion,WKSyncReactionsCallback callback); + +// 添加或取消点赞数据提供者 +@property(nonatomic,copy) void(^addOrCancelReactionProvider)(WKChannel*channel,uint64_t messageID, NSString *reactionName,WKAddOrCancelReactionsCallback callback); + + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKReceiptManager.h b/ios/WuKongIMSDK.framework/Headers/WKReceiptManager.h new file mode 100644 index 0000000..4524e09 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKReceiptManager.h @@ -0,0 +1,37 @@ +// +// WKReceiptManager.h +// WuKongIMSDK +// +// Created by tt on 2021/4/9. +// + +#import <Foundation/Foundation.h> +#import "WKMessage.h" +NS_ASSUME_NONNULL_BEGIN + +// 消息已读 +typedef void(^WKMessageReadedCallback)(NSError * __nullable error); +typedef void(^WKMessageReadedProvider)(WKChannel *channel,NSArray<WKMessage*>*messages,WKMessageReadedCallback callback); + +@interface WKReceiptManager : NSObject + ++ (WKReceiptManager *)shared; + +/** + 添加需要已读回执的消息 + */ +-(void) addReceiptMessages:(WKChannel*)channel messages:(NSArray<WKMessage*>*)messages; + + +/** + flush到服务器 + */ +//-(void) flush:(WKChannel*)channel complete:(void(^)(NSError *error))complete; + +// 消息已读提供者 +@property(nonatomic,copy) WKMessageReadedProvider messageReadedProvider; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKRecvPacket.h b/ios/WuKongIMSDK.framework/Headers/WKRecvPacket.h new file mode 100644 index 0000000..19af7aa --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKRecvPacket.h @@ -0,0 +1,38 @@ +// +// WKRecvPacket.h +// WuKongIMSDK +// +// Created by tt on 2019/11/27. +// + +#import <Foundation/Foundation.h> +#import "WKPacket.h" +#import "WKPacketBodyCoder.h" +#import "WKSetting.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKRecvPacket : WKPacket<WKPacketBodyCoder> + +// 消息设置 +@property(nonatomic,strong) WKSetting *setting; +// 消息唯一ID +@property(nonatomic,assign) uint64_t messageId; +// 消息序列号 (用户唯一,有序递增) +@property(nonatomic,assign) uint32_t messageSeq; +// 客户端消息唯一编号(用于消息去重) +@property(nonatomic,copy) NSString *clientMsgNo; +// 服务器时间 +@property(nonatomic,assign) uint32_t timestamp; +// 发送者UID +@property(nonatomic,copy) NSString *fromUid; +//频道ID(如果是个人频道ChannelId为个人的UID) +@property(nonatomic,copy) NSString *channelId; +//频道类型(1.个人 2.群组) +@property(nonatomic,assign) uint8_t channelType; +// 话题 +@property(nonatomic,copy) NSString *topic; +// 负荷数据 +@property(nonatomic,strong) NSData *payload; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKRecvackPacket.h b/ios/WuKongIMSDK.framework/Headers/WKRecvackPacket.h new file mode 100644 index 0000000..b03d001 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKRecvackPacket.h @@ -0,0 +1,20 @@ +// +// WKRecvackPacket.h +// WuKongIMSDK +// +// Created by tt on 2019/11/30. +// + +#import <Foundation/Foundation.h> +#import "WKPacket.h" +#import "WKPacketBodyCoder.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKRecvackPacket : WKPacket<WKPacketBodyCoder> + +@property(nonatomic,assign) uint64_t messageId; +@property(nonatomic,assign) uint32_t messageSeq; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKReminder.h b/ios/WuKongIMSDK.framework/Headers/WKReminder.h new file mode 100644 index 0000000..a4ba1d6 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKReminder.h @@ -0,0 +1,54 @@ +// +// WKReminder.h +// WuKongIMSDK +// +// Created by tt on 2022/4/19. +// + +#import <Foundation/Foundation.h> +#import "WKChannel.h" +NS_ASSUME_NONNULL_BEGIN + +typedef enum : NSUInteger { + WKReminderTypeMentionMe = 1, // 有人@我 +} WKReminderType; + +typedef enum : NSUInteger { + WKReminderUploadStatusSuccess, // 成功 + WKReminderUploadStatusWait, // 等待上传 + WKReminderUploadStatusError, // 上传错误 +} WKReminderUploadStatus; // 提醒项上传状态 + +@interface WKReminder : NSObject<NSCopying> + +@property(nonatomic,assign) int64_t reminderID; +@property(nonatomic,assign) uint64_t messageId; +@property(nonatomic,assign) uint32_t messageSeq; // 消息序列号(用户唯一,有序) +@property(nonatomic,strong) WKChannel *channel; // 频道 +@property(nonatomic,assign) WKReminderType type; // 提醒类型 +@property(nonatomic,copy) NSString *publisher; // 发布者uid + +@property(nonatomic,copy) NSString *text; // 提醒文本 + + +@property(nonatomic,strong) NSDictionary *data; // 提醒包含的数据 + +@property(nonatomic,assign) BOOL isLocate; // 是否需要进行消息定位 +@property(nonatomic,assign) int64_t version; + +@property(nonatomic,assign) BOOL done; // 用户是否完成提醒 + +@property(nonatomic,assign) WKReminderUploadStatus uploadStatus; // 上传状态 只对本地生效 + +/** + 转换为字典 + + @return <#return value description#> + */ +-(NSDictionary*) toDictionary; + + + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKReminderDB.h b/ios/WuKongIMSDK.framework/Headers/WKReminderDB.h new file mode 100644 index 0000000..1d30199 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKReminderDB.h @@ -0,0 +1,49 @@ +// +// WKReminderDB.h +// WuKongIMSDK +// +// Created by tt on 2022/4/19. +// + +#import <Foundation/Foundation.h> +#import "WKReminder.h" +#import "WKChannel.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKReminderDB : NSObject + ++ (WKReminderDB *)shared; + +-(void) addOrUpdates:(NSArray<WKReminder*>*)reminders; + +/** + 获取等待done的提醒项 + */ +-(NSDictionary<WKChannel*,NSArray<WKReminder*>*>*) getWaitDoneReminders:(NSArray<WKChannel*>*) channels; + +-(NSArray<WKReminder*>*) getWaitDoneReminder:(WKChannel*) channel; + +-(NSArray<WKReminder*>*) getWaitDoneReminders:(WKChannel*)channel type:(WKReminderType)type; + +// 获取所有等待完成的提醒 +-(NSDictionary<WKChannel*,NSArray<WKReminder*>*>*) getAllWaitDoneReminders; + + +-(int64_t) getMaxVersion; + +// 将对应id的提醒更新为done状态 +-(void) updateDone:(NSArray<NSNumber*>*)ids; + +// 更新过期的done=1的数据的上传状态为失败 +-(void) updateExpireDoneUploadStatusFail:(NSInteger)expireTime; + +-(void) updateUploadStatus:(WKReminderUploadStatus)status reminderID:(NSNumber*)reminderID; + +-(NSArray<WKReminder*>*) getWaitUploads; + +// 获取提醒项列表 +-(NSArray<WKReminder*>*) getReminders:(NSArray<NSNumber*>*)ids; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKReminderManager.h b/ios/WuKongIMSDK.framework/Headers/WKReminderManager.h new file mode 100644 index 0000000..4a07706 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKReminderManager.h @@ -0,0 +1,61 @@ +// +// WKReminderManager.h +// WuKongIMSDK +// +// Created by tt on 2022/4/19. +// + +#import <Foundation/Foundation.h> +#import "WKReminder.h" +@class WKReminderManager; +NS_ASSUME_NONNULL_BEGIN + +// 消息提醒提供 +typedef void(^WKReminderCallback)(NSArray<WKReminder*> * __nullable reminders,NSError * __nullable error); +typedef void(^WKReminderProvider)(WKReminderCallback callback); + + +// 消息提醒done提供 +typedef void(^WKReminderDoneCallback)(NSError * __nullable error); +typedef void(^WKReminderDoneProvider)(NSArray<NSNumber*> *ids,WKReminderDoneCallback callback); + +@protocol WKReminderManagerDelegate <NSObject> + +@optional + +// 某个频道的reminders发生变化 +-(void) reminderManager:(WKReminderManager*)manager didChange:(WKChannel*)channel reminders:(NSArray<WKReminder*>*) reminders; + +@end + +@interface WKReminderManager : NSObject + ++ (WKReminderManager *)shared; + +-(void) sync; + +-(void) done:(NSArray<NSNumber*>*)ids; + +/** + 添加委托 + + @param delegate <#delegate description#> + */ +-(void) addDelegate:(id<WKReminderManagerDelegate>) delegate; + + +/** + 移除委托 + + @param delegate <#delegate description#> + */ +-(void)removeDelegate:(id<WKReminderManagerDelegate>) delegate; + +@property(nonatomic,copy) WKReminderProvider reminderProvider; // 消息提醒项内容同步提供者 +@property(nonatomic,copy) WKReminderDoneProvider reminderDoneProvider; // 消息提醒项完成提供者 + + + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKRetryManager.h b/ios/WuKongIMSDK.framework/Headers/WKRetryManager.h new file mode 100644 index 0000000..113a3b0 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKRetryManager.h @@ -0,0 +1,66 @@ +// +// WKRetryManager.h +// WuKongIMBase +// +// Created by tt on 2019/12/29. +// + +#import <Foundation/Foundation.h> +#import "WKMessage.h" +#import "WKReminder.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKRetryItem : NSObject +// 消息 +@property(nonatomic,strong) WKMessage *message; +@property(nonatomic,strong) WKMessageExtra *messageExtra; +@property(nonatomic,strong) WKReminder *reminder; +// 重试次数 +@property(nonatomic,assign) long retryCount; +// 下次重试时间 +@property(nonatomic,assign) long nextRetryTime; + +@property(nonatomic,assign) long nextRetryTime2; + + +@end + +@interface WKRetryManager : NSObject + ++ (WKRetryManager *)shared; + + +/** + 开启重试 + */ +-(void) start; + + +/** + 停止重试 + */ +-(void) stop; +/** + 添加重试项 + + @param message 消息 + */ +-(void) add:(WKMessage*)message; + +-(void) addMessageExtra:(WKMessageExtra*)messageExtra; + +/** + 移除重试项 + + @param key key + */ +-(void) removeRetryItem:(NSString*) key; + +-(void) removeMessageExtraRetryItem:(NSString*) key; + +-(void) addReminder:(WKReminder*)reminder; +-(void) removeReminderRetryItem:(NSString*)key; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKRobot.h b/ios/WuKongIMSDK.framework/Headers/WKRobot.h new file mode 100644 index 0000000..e902a43 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKRobot.h @@ -0,0 +1,43 @@ +// +// WKRobot.h +// WuKongIMSDK +// +// Created by tt on 2021/10/19. +// + +#import <Foundation/Foundation.h> + +typedef enum : NSUInteger { + WKRobotStatusDisable, + WKRobotStatusEnable, +} WKRobotStatus; + +@class WKRobotMenus; +NS_ASSUME_NONNULL_BEGIN + +@interface WKRobot : NSObject + +@property (nonatomic, copy) NSString *robotID; + +@property (nonatomic, copy) NSString *username; // 机器人username + +@property (nonatomic, assign) long version; + +@property(nonatomic,assign) WKRobotStatus status; + +@property(nonatomic,assign) BOOL inlineOn; // 是否支持行内搜索 +@property(nonatomic,copy) NSString *placeholder; // 如果支持行内搜索 则占位字符内容 + +@property (nonatomic, strong) NSArray<WKRobotMenus*> *menus; + +@end + +@interface WKRobotMenus : NSObject +@property (nonatomic, copy) NSString *robotID; +@property (nonatomic, copy) NSString *cmd; +@property (nonatomic, copy) NSString *remark; +@property (nonatomic, copy) NSString *type; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKRobotDB.h b/ios/WuKongIMSDK.framework/Headers/WKRobotDB.h new file mode 100644 index 0000000..7284299 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKRobotDB.h @@ -0,0 +1,28 @@ +// +// WKRobotDB.h +// WuKongIMSDK +// +// Created by tt on 2021/10/19. +// + +#import <Foundation/Foundation.h> +#import "WKRobot.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKRobotDB : NSObject + ++ (WKRobotDB *)shared; + +/// 查询robot +-(NSArray<WKRobot*>*) queryRobots:(NSArray<NSString*>*)robotIDs; + +-(void) addOrUpdateRobots:(NSArray<WKRobot*>*)robots; + +-(WKRobot*) queryRobotWithUsername:(NSString*)username; + +-(NSArray<WKRobot*>*) queryRobotsWithUsernames:(NSArray<NSString*>*)usernames; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKRobotManager.h b/ios/WuKongIMSDK.framework/Headers/WKRobotManager.h new file mode 100644 index 0000000..96c120d --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKRobotManager.h @@ -0,0 +1,36 @@ +// +// WKRobotManager.h +// WuKongIMSDK +// +// Created by tt on 2021/10/19. +// + +#import <Foundation/Foundation.h> +#import "WKRobot.h" +NS_ASSUME_NONNULL_BEGIN + +typedef void(^WKSyncRobotCallback)(NSArray<WKRobot*>* __nullable robots,NSError * __nullable error); +typedef void(^WKSyncRobotProvider)(NSArray<NSDictionary*> *robotVersionDicts,WKSyncRobotCallback callback); + +@interface WKRobotManager : NSObject + ++ (WKRobotManager *)shared; + +/// 机器人数据提供者 +@property(nonatomic,copy) WKSyncRobotProvider syncRobotProvider; + +// 通过机器人id同步机器人 +-(void) sync:(NSArray<NSString*>*)robotIDs complete:(void(^)(BOOL hasData,NSError *error))complete; + +// 通过username同步机器人 +-(void) syncWithUsernames:(NSArray<NSString*>*)usernames complete:(void(^)(BOOL hasData,NSError *error))complete; + +/** + 获取机器人(通过username) + @param username 机器人的用户名 + */ +-(WKRobot*) getRobotWithUsername:(NSString*)username; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKSDK.h b/ios/WuKongIMSDK.framework/Headers/WKSDK.h new file mode 100644 index 0000000..189d917 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKSDK.h @@ -0,0 +1,165 @@ +// +// WKSDK.h +// WuKongIMSDK +// +// Created by tt on 2019/11/23. +// + +#import "WuKongIMSDKHeader.h" + +NS_ASSUME_NONNULL_BEGIN + + + +// 悟空IM SDK +@interface WKSDK : NSObject + ++ (WKSDK *)shared; + +@property(nonatomic,strong) WKOptions* options; + +/** + 连接信息串 + */ +@property(nonatomic,copy) NSString *connectURL; + +/** + 连接管理者 + */ +@property(nonatomic,strong) WKConnectionManager *connectionManager; + + +/** + 聊天管理者 + */ +@property(nonatomic,strong) WKChatManager *chatManager; + + +/** + 频道管理者 + */ +@property(nonatomic,strong) WKChannelManager *channelManager; + +/** + 频道信息提供者 + */ +@property(nonatomic,strong) WKChannelInfoUpdate channelInfoUpdate; + + +/** + 媒体文件管理者 + */ +@property(nonatomic,strong) WKMediaManager *mediaManager; + + +/** + 编码者 + */ +@property(nonatomic,strong) WKCoder *coder; + + +/** + 包body的编码解码者管理 + */ +@property(nonatomic,strong) WKPakcetBodyCoderManager *bodyCoderManager; + + +/** + 最近会话管理 + */ +@property(nonatomic,strong) WKConversationManager *conversationManager; + + +/// cmd管理者 +@property(nonatomic,strong) WKCMDManager *cmdManager; + +// 消息已读回执管理者 +@property(nonatomic,strong) WKReceiptManager *receiptManager; + + +// 消息回应管理 +// 负责点赞数据的维护 +@property(nonatomic,strong) WKReactionManager *reactionManager; + +// 机器人管理者 +@property(nonatomic,strong) WKRobotManager *robotManager; + +// 提醒管理者 +// 负责最近会话的提醒项,比如 有人@我,入群申请等等 还可以自定义一些提醒,比如类似微信的 [红包] [转账] 列表都会有提醒 +@property(nonatomic,strong) WKReminderManager *reminderManager; + +@property(nonatomic,strong) WKFlameManager *flameManager; // 阅后即焚管理者 + +// sdk版本号,每次升级记得修改此处 +@property(nonatomic,copy,readonly) NSString *sdkVersion; + +/** + 是否是debug模式 + + @return <#return value description#> + */ +-(BOOL) isDebug; + + + +/// 注册消息正文 +/// @param cls 正文的class (需要继承WKMessageContent) +-(void) registerMessageContent:(Class)cls; + + +/// 注册消息正文(指定正文类型) +/// @param cls 正文的class (需要继承WKMessageContent) +/// @param contentType 正文类型 +-(void) registerMessageContent:(Class)cls contentType:(NSInteger)contentType; + + +/** + 获取正文类型对应的正文对象 + + @param contentType <#contentType description#> + @return <#return value description#> + */ +-(Class) getMessageContent:(NSInteger)contentType; + + +/** + 是否是系统消息 (目前规定的系统消息的contentType类型为 [1000,2000]之间) + + @param contentType 正文类型 + @return <#return value description#> + */ +-(BOOL) isSystemMessage:(NSInteger)contentType; + + +// 离线消息拉取(普通模式) +@property(nonatomic,copy,readonly) WKOfflineMessagePull offlineMessagePull; +@property(nonatomic,copy,readonly) WKOfflineMessageAck offlineMessageAck; + +// 离线会话拉取(万人群模式) +//@property(nonatomic,copy,readonly) WKOfflineMessagePull offlineMessagePull; + +/** + 离线消息提供者 + + @param offlineMessageCallback 消息回调 + @param offlineMessageAckCallback ack回调 + */ +-(void) setOfflineMessageProvider:(WKOfflineMessagePull) offlineMessageCallback offlineMessagesAck:(WKOfflineMessageAck) offlineMessageAckCallback; + + +/** + 获取消息文件上传任务 + + @param message <#message description#> + @return <#return value description#> + */ +-(WKMessageFileUploadTask*) getMessageFileUploadTask:(WKMessage*)message; + + +/// 获取消息下载任务 +/// @param message <#message description#> +-(WKMessageFileDownloadTask*) getMessageDownloadTask:(WKMessage*)message; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKSecurityManager.h b/ios/WuKongIMSDK.framework/Headers/WKSecurityManager.h new file mode 100644 index 0000000..1a99230 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKSecurityManager.h @@ -0,0 +1,48 @@ +// +// WKSecurityManager.h +// WuKongIMSDK +// +// Created by tt on 2021/2/24. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKSecurityManager : NSObject + ++ (WKSecurityManager *)shared; + +@property(nonatomic,copy) NSString *sharedKey; // 共享key + + +/** + 生成DH密钥对 + */ +-(void) generateDHPair; + +/** + 获取DH的公钥 + */ +-(NSString*) getDHPubKey; + +/** + 通过其他的公钥获取共享密钥 + */ +-(void) generateAesKey:(NSString*)pubKey salt:(NSString*)salt; + +/** + 加密数据 + */ +-(NSString*) encryption:(NSString*)data; + +/** + 解密 + */ +-(NSString*) decryption:(NSString*)data; + +- (NSString *)md5:(NSString *)input; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKSendPacket.h b/ios/WuKongIMSDK.framework/Headers/WKSendPacket.h new file mode 100644 index 0000000..57f8a91 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKSendPacket.h @@ -0,0 +1,37 @@ +// +// WKSendPacket.h +// WuKongIMSDK +// +// Created by tt on 2019/11/27. +// + +#import <Foundation/Foundation.h> +#import "WKPacket.h" +#import "WKPacketBodyCoder.h" +#import "WKSetting.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKSendPacket : WKPacket<WKPacketBodyCoder> + +@property(nonatomic,strong) WKSetting *setting; + +// 客户端提供的序列号,在客户端内唯一 +@property(nonatomic,assign) uint32_t clientSeq; + +/// 客户端消息唯一编号 +@property(nonatomic,copy) NSString *clientMsgNo; + +//频道ID(如果是个人频道ChannelId为个人的UID) +@property(nonatomic,copy) NSString *channelId; +//频道类型(1.个人 2.群组) +@property(nonatomic,assign) uint8_t channelType; +// 话题 +@property(nonatomic,copy) NSString *topic; +// 负荷数据 +@property(nonatomic,strong) NSData *payload; + +-(NSString*) veritifyString; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKSendackPacket.h b/ios/WuKongIMSDK.framework/Headers/WKSendackPacket.h new file mode 100644 index 0000000..d3943ba --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKSendackPacket.h @@ -0,0 +1,25 @@ +// +// WKSendackPacket.h +// WuKongIMSDK +// +// Created by tt on 2019/11/27. +// + +#import <Foundation/Foundation.h> +#import "WKPacket.h" +#import "WKPacketBodyCoder.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKSendackPacket : WKPacket<WKPacketBodyCoder> +// 客户端序列号 (客户端提供,服务端原样返回) +@property(nonatomic,assign) uint32_t clientSeq; +// 消息ID(全局唯一) +@property(nonatomic,assign) uint64_t messageId; +// 消息序列号(用户唯一,有序) +@property(nonatomic,assign) uint32_t messageSeq; +// 原因代码 +@property(nonatomic,assign) uint8_t reasonCode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKSetting.h b/ios/WuKongIMSDK.framework/Headers/WKSetting.h new file mode 100644 index 0000000..87311fb --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKSetting.h @@ -0,0 +1,29 @@ +// +// WKSetting.h +// WuKongIMSDK +// +// Created by tt on 2021/4/9. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKSetting : NSObject + + +@property (nonatomic,assign) BOOL receiptEnabled; // 消息是否需要发送已读回执 + +//@property(nonatomic,assign) BOOL signal; // 是否signal加密 + +@property(nonatomic,assign) BOOL topic; // 是否存在话题 + + + +-(uint8_t) toUint8; + ++(WKSetting*) fromUint8:(uint8_t)v; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKSignalErrorContent.h b/ios/WuKongIMSDK.framework/Headers/WKSignalErrorContent.h new file mode 100644 index 0000000..80721aa --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKSignalErrorContent.h @@ -0,0 +1,16 @@ +// +// WKSignalErrorContent.h +// WuKongIMSDK +// +// Created by tt on 2021/9/9. +// + +#import <WuKongIMSDK/WuKongIMSDK.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKSignalErrorContent : WKMessageContent + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKSyncChannelMessageModel.h b/ios/WuKongIMSDK.framework/Headers/WKSyncChannelMessageModel.h new file mode 100644 index 0000000..2a66d6c --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKSyncChannelMessageModel.h @@ -0,0 +1,21 @@ +// +// WKSyncChannelMessageModel.h +// WuKongIMSDK +// +// Created by tt on 2020/10/5. +// + +#import <Foundation/Foundation.h> +#import "WKMessage.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKSyncChannelMessageModel : NSObject + +@property(nonatomic,assign) uint32_t startMessageSeq; // 开始消息序列号 +@property(nonatomic,assign) uint32_t endMessageSeq; // 结束消息序列号 +@property(nonatomic,assign) BOOL more; // 是否还有更多数据 +@property(nonatomic,strong) NSArray<WKMessage*> *messages; // 消息集合 + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKSyncConversationModel.h b/ios/WuKongIMSDK.framework/Headers/WKSyncConversationModel.h new file mode 100644 index 0000000..e995d8e --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKSyncConversationModel.h @@ -0,0 +1,70 @@ +// +// WKOfflineConversation.h +// WuKongIMSDK +// +// Created by tt on 2020/9/30. +// + +#import <Foundation/Foundation.h> +#import "WKChannel.h" +#import "WKMessage.h" +#import "WKConversation.h" + +#import "WKCMDDB.h" +NS_ASSUME_NONNULL_BEGIN + + + +@interface WKSyncConversationModel : NSObject + +@property(nonatomic,strong) WKChannel *channel; // 频道 + +@property(nonatomic,strong) WKChannel *parentChannel; // 频道 + +@property(nonatomic,assign) NSInteger unread; // 消息未读数 + +@property(nonatomic,assign) BOOL mute; + +@property(nonatomic,assign) BOOL stick; + +@property(nonatomic,assign) NSTimeInterval timestamp; // 最后一次会话时间 + +@property(nonatomic,assign) uint32_t lastMsgSeq; // 最后一次会话的消息序列号 + +@property(nonatomic,copy) NSString *lastMsgClientNo; // 最后一次会话的消息客户端编号 + +@property(nonatomic,assign) long long version; // 数据版本 + +@property(nonatomic,strong) NSArray<WKMessage*> *recents; // 会话的最新消息集合 + +@property(nonatomic,strong) WKConversationExtra *remoteExtra; + +@property(nonatomic,strong,readonly) WKConversation *conversation; + +@end + +@interface WKCMDModel : NSObject + +@property(nonatomic,copy) NSString *no; // cmd唯一编号 +@property(nonatomic,copy) NSString *cmd; +// 消息时间(服务器时间,单位秒) +@property(nonatomic,assign) NSInteger timestamp; + +// cmd 参数 +@property(nonatomic,strong) NSDictionary *param; + ++(WKCMDModel*) message:(WKMessage*)message; + ++(WKCMDModel*) cmdMessage:(WKCMDMessage*)cmdMessage; + +@end + +@interface WKSyncConversationWrapModel : NSObject + +@property(nonatomic,strong) NSArray<WKSyncConversationModel*> *conversations; + +@end + + + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKSystemContent.h b/ios/WuKongIMSDK.framework/Headers/WKSystemContent.h new file mode 100644 index 0000000..6b138d4 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKSystemContent.h @@ -0,0 +1,19 @@ +// +// WKSystemContent.h +// WuKongIMSDK +// +// Created by tt on 2020/1/4. +// + +#import <Foundation/Foundation.h> +#import "WKMessageContent.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKSystemContent : WKMessageContent + +@property(nonatomic,strong) NSDictionary *content; +@property(nonatomic,copy) NSString *displayContent; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKTaskManager.h b/ios/WuKongIMSDK.framework/Headers/WKTaskManager.h new file mode 100644 index 0000000..517a052 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKTaskManager.h @@ -0,0 +1,61 @@ +// +// WKTaskManager.h +// WuKongIMSDK +// +// Created by tt on 2020/1/15. +// + +#import <Foundation/Foundation.h> +#import "WKTaskProto.h" +NS_ASSUME_NONNULL_BEGIN + +@protocol WKTaskManagerDelegate <NSObject> + +@optional + + +/** + 任务完成 + + @param task <#task description#> + */ +-(void) taskComplete:(id<WKTaskProto>)task; + + +/** + 任务进度 + + @param task <#task description#> + */ +-(void) taskProgress:(id<WKTaskProto>)task; + +@end + +@interface WKTaskManager : NSObject + +@property(nonatomic,weak) id<WKTaskManagerDelegate> delegate; + +/** + 添加任务 + + @param task <#task description#> + */ +-(void) add:(id<WKTaskProto>)task; + + +/** + 获取任务 + + @param taskId <#taskId description#> + */ +-(id<WKTaskProto> __nullable) get:(NSString *)taskId; +/** + 移除任务 + + @param task <#task description#> + */ +-(void) remove:(id<WKTaskProto>)task; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKTaskOperator.h b/ios/WuKongIMSDK.framework/Headers/WKTaskOperator.h new file mode 100644 index 0000000..e5de323 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKTaskOperator.h @@ -0,0 +1,33 @@ +// +// WKTaskOperator.h +// WuKongIMSDK +// +// Created by tt on 2021/4/22. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKTaskOperator : NSObject + ++(WKTaskOperator*) cancel:(void(^)(void))cancel suspend:(void(^)(void))suspend resume:(void(^)(void))resume; + +/** + 取消 + */ +@property (nonatomic, copy) void(^cancel)(void); + +/** + 挂起 + */ +@property (nonatomic, copy) void(^suspend)(void); + +/** + 恢复 + */ +@property (nonatomic, copy) void(^resume)(void); + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKTaskProto.h b/ios/WuKongIMSDK.framework/Headers/WKTaskProto.h new file mode 100644 index 0000000..515fc3e --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKTaskProto.h @@ -0,0 +1,84 @@ +// +// WKTask.h +// WuKongIMSDK +// +// Created by tt on 2020/1/15. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +typedef enum : NSUInteger { + WKTaskStatusWait, // 任务等待执行 + WKTaskStatusSuccess, // 任务执行成功 + WKTaskStatusProgressing, // 任务处理中 + WKTaskStatusSuspend, // 任务挂起 + WKTaskStatusError, // 任务执行错误 + WKTaskStatusCancel, // 任务执行错误 +} WKTaskStatus; + +typedef void(^WKTaskListener)(void); + + +@protocol WKTaskProto <NSObject> + + +/** + 设置任务监听者 + */ +@property(nonatomic,copy,readonly) NSArray<WKTaskListener> *listeners; + +/** + 任务唯一ID + */ +@property(nonatomic,copy) NSString *taskId; + + +/** + 任务状态 + */ +@property(nonatomic,assign) WKTaskStatus status; + + +/** + 添加监听者 + + @param listener 监听者 + @param target 目标 + */ +- (void)addListener:(nonnull WKTaskListener)listener target:(id) target; + + +/** + 移除监听者 + + @param target <#target description#> + */ +-(void) removeListener:(id) target; + +/** + 恢复任务 + */ +-(void) resume; +/** + 暂停任务 + */ +-(void) suspend; + + +/** +取消任务 + */ +-(void) cancel; + + +/** + 任务更新 + */ +-(void) update; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKTextContent.h b/ios/WuKongIMSDK.framework/Headers/WKTextContent.h new file mode 100644 index 0000000..9d10f06 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKTextContent.h @@ -0,0 +1,22 @@ +// +// WKText.h +// WuKongIMSDK +// +// Created by tt on 2019/11/29. +// + +#import <Foundation/Foundation.h> +#import "WKMessageContent.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKTextContent : WKMessageContent + +- (instancetype)initWithContent:(NSString*)content; + +@property(nonatomic,copy) NSString *content; + +@property(nonatomic,copy,nullable) NSString *format; // 内容格式 默认为普通文本 html,markdown + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKUUIDUtil.h b/ios/WuKongIMSDK.framework/Headers/WKUUIDUtil.h new file mode 100644 index 0000000..d27d6b5 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKUUIDUtil.h @@ -0,0 +1,19 @@ +// +// WKUUIDUtil.h +// WuKongIMSDK +// +// Created by tt on 2020/5/28. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKUUIDUtil : NSObject + ++ (NSString*)getUUID; + ++(NSString*) getClientMsgNo:(NSString*)custId toCustId:(NSString*)toCustId chatId:(NSString*)chatId; +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKUnknownContent.h b/ios/WuKongIMSDK.framework/Headers/WKUnknownContent.h new file mode 100644 index 0000000..6345a25 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKUnknownContent.h @@ -0,0 +1,17 @@ +// +// WKUnknownContent.h +// WuKongIMSDK +// +// Created by tt on 2019/11/29. +// + +#import <Foundation/Foundation.h> +#import "WKMessageContent.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKUnknownContent : WKMessageContent + + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKUserInfo.h b/ios/WuKongIMSDK.framework/Headers/WKUserInfo.h new file mode 100644 index 0000000..d388a5e --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKUserInfo.h @@ -0,0 +1,39 @@ +// +// WKUser.h +// WuKongIMSDK +// +// Created by tt on 2019/11/29. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface WKUserInfo : NSObject + +-(instancetype) initWithUid:(NSString*)uid name:(NSString*__nullable)name avatar:(NSString* __nullable)avatar; + +-(instancetype) initWithUid:(NSString*)uid name:(NSString*)name; +/*! + 用户ID + */ +@property (nonatomic, copy) NSString *uid; + +/*! + 用户名称 + */ +@property (nonatomic, copy) NSString *name; + +/*! + 用户头像的URL + */ +@property (nonatomic, copy) NSString *avatar; + +/** + 用户信息附加字段 + */ +@property (nonatomic, copy) NSString *extra; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WKVoiceContent.h b/ios/WuKongIMSDK.framework/Headers/WKVoiceContent.h new file mode 100644 index 0000000..5c22c14 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WKVoiceContent.h @@ -0,0 +1,36 @@ +// +// WKVoiceContent.h +// WuKongIMSDK +// +// Created by tt on 2020/1/16. +// + +#import <Foundation/Foundation.h> +#import "WKMediaMessageContent.h" +NS_ASSUME_NONNULL_BEGIN + +@interface WKVoiceContent : WKMediaMessageContent + + +/** + 初始化 + + @param voiceData 音频数据 + @param second 音频秒长 + @param waveform 音频波浪数据 (可选参数) + @return <#return value description#> + */ ++ (instancetype)initWithData:(NSData *)voiceData second:(int)second waveform:(NSData*)waveform; + + +// 音频数据 +@property(nonatomic,strong) NSData *voiceData; + +// 音频长度(单位秒) +@property(nonatomic,assign) NSInteger second; +// 音频波浪数据 (可选参数) +@property(nonatomic,strong) NSData *waveform; + +@end + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Headers/WuKongIMSDK-umbrella.h b/ios/WuKongIMSDK.framework/Headers/WuKongIMSDK-umbrella.h new file mode 100644 index 0000000..25e02ca --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WuKongIMSDK-umbrella.h @@ -0,0 +1,110 @@ +#ifdef __OBJC__ +#import <UIKit/UIKit.h> +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "WKConnackPacket.h" +#import "WKConnectPacket.h" +#import "WKDisconnectPacket.h" +#import "WKPacket.h" +#import "WKPingPacket.h" +#import "WKPongPacket.h" +#import "WKRecvackPacket.h" +#import "WKRecvPacket.h" +#import "WKSendackPacket.h" +#import "WKSendPacket.h" +#import "WKCoder.h" +#import "WKData.h" +#import "WKHeader.h" +#import "WKPacketBodyCoder.h" +#import "WKPakcetBodyCoderManager.h" +#import "WKSetting.h" +#import "WKChannelInfoDB.h" +#import "WKChannelMemberDB.h" +#import "WKCMDDB.h" +#import "WKConversationDB.h" +#import "WKConversationExtraDB.h" +#import "WKConversationUtil.h" +#import "WKDB.h" +#import "WKDBMigrationManager.h" +#import "WKFMDatabaseQueue.h" +#import "WKMessageDB.h" +#import "WKMessageExtraDB.h" +#import "WKReactionDB.h" +#import "WKReminderDB.h" +#import "WKRobotDB.h" +#import "WKBaseTask.h" +#import "WKMessageFileDownloadTask.h" +#import "WKMessageFileUploadTask.h" +#import "WKTaskProto.h" +#import "WKChannelManager.h" +#import "WKChannelRequestQueue.h" +#import "WKChatDataProvider.h" +#import "WKChatManager.h" +#import "WKChatManagerInner.h" +#import "WKCMDManager.h" +#import "WKConnectionManager.h" +#import "WKConversationManager.h" +#import "WKConversationManagerInner.h" +#import "WKFlameManager.h" +#import "WKMediaManager.h" +#import "WKMOSContentConvertManager.h" +#import "WKReactionManager.h" +#import "WKReceiptManager.h" +#import "WKReminderManager.h" +#import "WKRetryManager.h" +#import "WKRobotManager.h" +#import "WKSecurityManager.h" +#import "WKTaskManager.h" +#import "WKCMDContent.h" +#import "WKImageContent.h" +#import "WKMediaMessageContent.h" +#import "WKMessageContent.h" +#import "WKMultiMediaMessageContent.h" +#import "WKSignalErrorContent.h" +#import "WKSystemContent.h" +#import "WKTextContent.h" +#import "WKUnknownContent.h" +#import "WKVoiceContent.h" +#import "WKChannel.h" +#import "WKChannelInfo.h" +#import "WKChannelInfoSearchResult.h" +#import "WKChannelMessageSearchResult.h" +#import "WKConnectInfo.h" +#import "WKConversation.h" +#import "WKConversationExtra.h" +#import "WKConversationLastMessageAndUnreadCount.h" +#import "WKMediaProto.h" +#import "WKMessage.h" +#import "WKMessageExtra.h" +#import "WKMessageStatusModel.h" +#import "WKReaction.h" +#import "WKReminder.h" +#import "WKRobot.h" +#import "WKSyncChannelMessageModel.h" +#import "WKSyncConversationModel.h" +#import "WKTaskOperator.h" +#import "WKUserInfo.h" +#import "WKAESUtil.h" +#import "WKFileUtil.h" +#import "WKMediaUtil.h" +#import "WKMemoryCache.h" +#import "WKNOGeneraterUtil.h" +#import "WKRSAUtil.h" +#import "WKUUIDUtil.h" +#import "WKConst.h" +#import "WKOptions.h" +#import "WKSDK.h" +#import "WuKongIMSDK.h" +#import "WuKongIMSDKHeader.h" + +FOUNDATION_EXPORT double WuKongIMSDKVersionNumber; +FOUNDATION_EXPORT const unsigned char WuKongIMSDKVersionString[]; + diff --git a/ios/WuKongIMSDK.framework/Headers/WuKongIMSDK.h b/ios/WuKongIMSDK.framework/Headers/WuKongIMSDK.h new file mode 100644 index 0000000..4881457 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WuKongIMSDK.h @@ -0,0 +1,43 @@ +// +// WuKongIMSDK.h +// Pods +// +// Created by tt on 2019/11/23. +// + +#import "WKSDK.h" +#import "WKConnackPacket.h" + +#import "WKSendPacket.h" +#import "WKDB.h" +#import "WKChannel.h" +#import "WKChannelManager.h" +#import "WKMessageDB.h" +#import "WKChannelInfoDB.h" + +#import "WKVoiceContent.h" +#import "WKMessageContent.h" +#import "WKTextContent.h" +#import "WKUnknownContent.h" +#import "WKSystemContent.h" +#import "WKImageContent.h" +#import "WKMultiMediaMessageContent.h" +#import "WKMessageFileUploadTask.h" +#import "WKFileUtil.h" +#import "WKConversation.h" +#import "WKCMDContent.h" +#import "WKMediaMessageContent.h" + +#import "WKTaskProto.h" +#import "WKMessageFileDownloadTask.h" +#import "WKMemoryCache.h" + +#import "WKSecurityManager.h" +#import "WKAESUtil.h" +#import "WKRobotDB.h" +#import "WKMessageExtra.h" +#import "WKMessageExtraDB.h" +#import "WKReminderDB.h" + + + diff --git a/ios/WuKongIMSDK.framework/Headers/WuKongIMSDKHeader.h b/ios/WuKongIMSDK.framework/Headers/WuKongIMSDKHeader.h new file mode 100644 index 0000000..79e5aed --- /dev/null +++ b/ios/WuKongIMSDK.framework/Headers/WuKongIMSDKHeader.h @@ -0,0 +1,75 @@ +// +// WuKongIMSDKHeader.h +// Pods +// +// Created by tt on 2022/12/13. +// + + +#import <Foundation/Foundation.h> +#import "WKOptions.h" +#import "WKConnectionManager.h" +#import "WKCoder.h" +#import "WKPakcetBodyCoderManager.h" +#import "WKChatManager.h" +#import "WKMessageContent.h" +#import "WKConversationManager.h" +#import "WKChannelManager.h" +#import "WKMediaManager.h" +#import "WKMessageFileUploadTask.h" +#import "WKMessageFileDownloadTask.h" +#import "WKTaskManager.h" +#import "WKCMDManager.h" +#import "WKReceiptManager.h" +#import "WKTaskOperator.h" +#import "WKReactionManager.h" +#import "WKRobotManager.h" +#import "WKReminderManager.h" +#import "WKFlameManager.h" +#import "WKConst.h" + + +NS_ASSUME_NONNULL_BEGIN + +/** + 频道资料回调 + + @param error 错误 + */ +typedef void (^WKChannelInfoCallback)(NSError * _Nullable error,bool notifyBefore); + + +/** + 离线消息回调 + + @param messages 获取的离线消息 + @param more 是否还有更多消息 + @param error 错误信息 + */ +typedef void(^WKOfflineMessageCallback)(NSArray<WKMessage*>* __nullable messages,bool more,NSError * __nullable error); + +/** + 离线消息ack回调 + @param messageSeq 最后收到的消息序列号 + */ + +typedef void(^WKOfflineMessageAck)(uint32_t messageSeq,void(^complete)(NSError *error)); + + +/** + 用户信息提供者 (第三方需要设置) + + */ +typedef WKTaskOperator* _Nullable (^WKChannelInfoUpdate)(WKChannel *channel,WKChannelInfoCallback callback); + + +/** + 离线消息拉取 + + @param limit <#limit description#> + @param messageSeq <#messageSeq description#> + @param callback <#callback description#> + */ +typedef void (^WKOfflineMessagePull)(int limit,uint32_t messageSeq,WKOfflineMessageCallback callback); + +NS_ASSUME_NONNULL_END diff --git a/ios/WuKongIMSDK.framework/Info.plist b/ios/WuKongIMSDK.framework/Info.plist new file mode 100644 index 0000000..449f007 Binary files /dev/null and b/ios/WuKongIMSDK.framework/Info.plist differ diff --git a/ios/WuKongIMSDK.framework/Modules/module.modulemap b/ios/WuKongIMSDK.framework/Modules/module.modulemap new file mode 100644 index 0000000..c7c4577 --- /dev/null +++ b/ios/WuKongIMSDK.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module WuKongIMSDK { + umbrella header "WuKongIMSDK-umbrella.h" + + export * + module * { export * } +} diff --git a/ios/WuKongIMSDK.framework/PrivateHeaders/NarrowBandWavToAmr.h b/ios/WuKongIMSDK.framework/PrivateHeaders/NarrowBandWavToAmr.h new file mode 100755 index 0000000..85d880f --- /dev/null +++ b/ios/WuKongIMSDK.framework/PrivateHeaders/NarrowBandWavToAmr.h @@ -0,0 +1,75 @@ +// +// 8KWavToAmr.h +// -01VoiceForAMR +// 提供了8KHZ 的编码和解码 和 16kHZ的编码和解码 +// Created by 势必可赢 on 16/6/16. +// Copyright © 2016年 势必可赢. All rights reserved. +// 8K采样率编码和解码 + +#ifndef NarrowBandWavToAmr_h +#define NarrowBandWavToAmr_h +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include "interf_dec.h" +#include "interf_enc.h" + +#define AMR_MAGIC_NUMBER "#!AMR\n" + +#define PCM_FRAME_SIZE 160 // 8khz 8000*0.02=160 +#define MAX_AMR_FRAME_SIZE 32 +#define AMR_FRAME_COUNT_PER_SECOND 50 + +typedef struct +{ + char chChunkID[4]; + int nChunkSize; +}XCHUNKHEADER; + +typedef struct +{ + short nFormatTag; + short nChannels; + int nSamplesPerSec; + int nAvgBytesPerSec; + short nBlockAlign; + short nBitsPerSample; +}WAVEFORMAT; + +typedef struct +{ + short nFormatTag; + short nChannels; + int nSamplesPerSec; + int nAvgBytesPerSec; + short nBlockAlign; + short nBitsPerSample; + short nExSize; +}WAVEFORMATX; + +typedef struct +{ + char chRiffID[4]; + int nRiffSize; + char chRiffFormat[4]; +}RIFFHEADER; + +typedef struct +{ + char chFmtID[4]; + int nFmtSize; + WAVEFORMAT wf; +}FMTBLOCK; + +// WAVE音频采样频率是8khz +// 音频样本单元数 = 8000*0.02 = 160 (由采样频率决定) +// 声道数 1 : 160 +// 2 : 160*2 = 320 +// bps决定样本(sample)大小 +// bps = 8 --> 8位 unsigned char +// 16 --> 16位 unsigned short +int EncodeNarrowBandWAVEFileToAMRFile(const char* pchWAVEFilename, const char* pchAMRFileName, int nChannels, int nBitsPerSample); + +// 将AMR文件解码成WAVE文件 +int DecodeNarrowBandAMRFileToWAVEFile(const char* pchAMRFileName, const char* pchWAVEFilename); +#endif \ No newline at end of file diff --git a/ios/WuKongIMSDK.framework/PrivateHeaders/VoiceConverter.h b/ios/WuKongIMSDK.framework/PrivateHeaders/VoiceConverter.h new file mode 100755 index 0000000..e7da97b --- /dev/null +++ b/ios/WuKongIMSDK.framework/PrivateHeaders/VoiceConverter.h @@ -0,0 +1,48 @@ +// +// VoiceConverter.h +// Jeans +// +// Created by Jeans Huang on 12-7-22. +// Copyright (c) 2012年 __MyCompanyName__. All rights reserved. +// + +#import <Foundation/Foundation.h> +#import <AVFoundation/AVFoundation.h> +#import "NarrowBandWavToAmr.h" +#import "WidthBandWavToAmr.h" + +//声音采样率 +typedef NS_ENUM(NSInteger,Sample_Rate) +{ + Sample_Rate_16000 = 0, //16K(默认) + Sample_Rate_8000 = 1, //8K + Sample_Rate_44100 = 2, //44K +}; + + + +@interface VoiceConverter : NSObject + +/** + * 转换wav到amr + * + * @param aWavPath wav文件路径 + * @param aSavePath amr保存路径 + * + * @return 0失败 1成功 + */ ++ (int)EncodeWavToAmr:(NSString *)aWavPath amrSavePath:(NSString *)aSavePath sampleRateType:(Sample_Rate)sampleRateType; + +/** + * 转换amr到wav + * + * @param aAmrPath amr文件路径 + * @param aSavePath wav保存路径 + * + * @return 0失败 1成功 + */ ++ (int)DecodeAmrToWav:(NSString *)aAmrPath wavSavePath:(NSString *)aSavePath sampleRateType:(Sample_Rate)sampleRateType; + ++ (NSDictionary*)GetAudioRecorderSettingDictWithSampleRateType:(Sample_Rate)sampleRateType; + +@end diff --git a/ios/WuKongIMSDK.framework/PrivateHeaders/WKBackoff.h b/ios/WuKongIMSDK.framework/PrivateHeaders/WKBackoff.h new file mode 100644 index 0000000..9fd44fb --- /dev/null +++ b/ios/WuKongIMSDK.framework/PrivateHeaders/WKBackoff.h @@ -0,0 +1,34 @@ +// +// WKBackoff.h +// WuKongIMSDK +// +// Created by tt on 2019/11/30. +// + +#import <Foundation/Foundation.h> +#import "WKBackoffBuilder.h" + +//! Project version number for Backo. +FOUNDATION_EXPORT double BackoVersionNumber; + +//! Project version string for Backo. +FOUNDATION_EXPORT const unsigned char BackoVersionString[]; + +@interface WKBackoff : NSObject + +@property(readonly) long base; +@property(readonly) int factor; +@property(readonly) double jitter; +@property(readonly) long cap; + ++ (instancetype)createWithBuilder:(WKBackoffBuilderBlock)block; + ++ (instancetype)create; + +/** Return the duration (in milliseconds) for which you should backoff. */ +- (long)backoff:(int)attempt; + +/** Sleep on the current thread for the duration returned by backoff. */ +- (void)sleep:(int)attempt; + +@end diff --git a/ios/WuKongIMSDK.framework/PrivateHeaders/WKBackoffBuilder.h b/ios/WuKongIMSDK.framework/PrivateHeaders/WKBackoffBuilder.h new file mode 100644 index 0000000..6d82edd --- /dev/null +++ b/ios/WuKongIMSDK.framework/PrivateHeaders/WKBackoffBuilder.h @@ -0,0 +1,28 @@ +// +// WKBackoffBuilder.h +// WuKongIMSDK +// +// Created by tt on 2019/11/30. +// + +#import <Foundation/Foundation.h> + +#import <Foundation/Foundation.h> + +/** Fluent API to construct instances of SEGBacko. */ +@class WKBackoffBuilder; + +typedef void(^WKBackoffBuilderBlock)(WKBackoffBuilder *builder); + +@interface WKBackoffBuilder : NSObject + +@property(nonatomic, readwrite) long base; +@property(nonatomic, readwrite) int factor; +@property(nonatomic, readwrite) double jitter; +@property(nonatomic, readwrite) long cap; + ++ (instancetype)builderWithBlock:(WKBackoffBuilderBlock)block; + +- (id)initWithBlock:(WKBackoffBuilderBlock)block NS_DESIGNATED_INITIALIZER; + +@end diff --git a/ios/WuKongIMSDK.framework/PrivateHeaders/WidthBandWavToAmr.h b/ios/WuKongIMSDK.framework/PrivateHeaders/WidthBandWavToAmr.h new file mode 100755 index 0000000..8cede12 --- /dev/null +++ b/ios/WuKongIMSDK.framework/PrivateHeaders/WidthBandWavToAmr.h @@ -0,0 +1,44 @@ +// +// WidthBandWavToAmr.h +// SpeakIn +// +// Created by 势必可赢 on 16/8/18. +// Copyright © 2016年 势必可赢. All rights reserved. +// 16K采样率编码和解码 + +#ifndef WidthBandWavToAmr_h +#define WidthBandWavToAmr_h + +#include <stdio.h> +#include <stdint.h> +#include <unistd.h> +#include <string.h> +#include <stdlib.h> +#include "dec_if.h" +#include "enc_if.h" +#include "wavwriter.h" +#include "wavreader.h" + +/** + * 编码 + * + * @param infile wav文件路径 + * @param outfile amr文件路径 + * + * @return + */ +int EncodeWidthBandWAVEFileToAMRFile(const char* infile, const char* outfile); + + +/** + * 解码 + * + * @param inputFile amr文件路径 + * @param outputFile wav文件路径 + * + * @return + */ +int DecodeWidthBandAMRFileToWAVEFile(const char* inputFile, const char* outputFile); + + +#endif /* WidthBandWavToAmr_h */ diff --git a/ios/WuKongIMSDK.framework/PrivateHeaders/dec_if.h b/ios/WuKongIMSDK.framework/PrivateHeaders/dec_if.h new file mode 100755 index 0000000..56acdaa --- /dev/null +++ b/ios/WuKongIMSDK.framework/PrivateHeaders/dec_if.h @@ -0,0 +1,36 @@ +/* ------------------------------------------------------------------ + * Copyright (C) 2009 Martin Storsjo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the License for the specific language governing permissions + * and limitations under the License. + * ------------------------------------------------------------------- + */ + +#ifndef OPENCORE_AMRWB_DEC_IF_H +#define OPENCORE_AMRWB_DEC_IF_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define _good_frame 0 + +void* D_IF_init(void); +void D_IF_decode(void* state, const unsigned char* bits, short* synth, int bfi); +void D_IF_exit(void* state); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/ios/WuKongIMSDK.framework/PrivateHeaders/enc_if.h b/ios/WuKongIMSDK.framework/PrivateHeaders/enc_if.h new file mode 100755 index 0000000..1fd3aed --- /dev/null +++ b/ios/WuKongIMSDK.framework/PrivateHeaders/enc_if.h @@ -0,0 +1,49 @@ +/* ------------------------------------------------------------------ + * Copyright (C) 2010 Martin Storsjo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the License for the specific language governing permissions + * and limitations under the License. + * ------------------------------------------------------------------- + */ + +#ifndef VO_AMRWBENC_ENC_IF_H +#define VO_AMRWBENC_ENC_IF_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef AMRWBENC_WRAPPER_INTERNAL + /* Copied from enc/src/gsmamr_enc.h */ + enum WBMode { + WB66 = 0, + WB885, + WB1265, + WB1425, + WB1585, + WB1825, + WB1985, + WB2305, + WB2385, + }; +#endif + +void* E_IF_init(void); +int E_IF_encode(void* state, int mode, const short* speech, unsigned char* out, int dtx); +void E_IF_exit(void* state); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/ios/WuKongIMSDK.framework/PrivateHeaders/if_rom.h b/ios/WuKongIMSDK.framework/PrivateHeaders/if_rom.h new file mode 100755 index 0000000..8977e03 --- /dev/null +++ b/ios/WuKongIMSDK.framework/PrivateHeaders/if_rom.h @@ -0,0 +1,33 @@ +/* ------------------------------------------------------------------ + * Copyright (C) 2009 Martin Storsjo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the License for the specific language governing permissions + * and limitations under the License. + * ------------------------------------------------------------------- + */ + +#ifndef OPENCORE_AMRWB_IF_ROM_H +#define OPENCORE_AMRWB_IF_ROM_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdint.h> +typedef int16_t Word16; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/ios/WuKongIMSDK.framework/PrivateHeaders/interf_dec.h b/ios/WuKongIMSDK.framework/PrivateHeaders/interf_dec.h new file mode 100755 index 0000000..98051f4 --- /dev/null +++ b/ios/WuKongIMSDK.framework/PrivateHeaders/interf_dec.h @@ -0,0 +1,34 @@ +/* ------------------------------------------------------------------ + * Copyright (C) 2009 Martin Storsjo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the License for the specific language governing permissions + * and limitations under the License. + * ------------------------------------------------------------------- + */ + +#ifndef OPENCORE_AMRNB_INTERF_DEC_H +#define OPENCORE_AMRNB_INTERF_DEC_H + +#ifdef __cplusplus +extern "C" { +#endif + +void* Decoder_Interface_init(void); +void Decoder_Interface_exit(void* state); +void Decoder_Interface_Decode(void* state, const unsigned char* in, short* out, int bfi); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/ios/WuKongIMSDK.framework/PrivateHeaders/interf_enc.h b/ios/WuKongIMSDK.framework/PrivateHeaders/interf_enc.h new file mode 100755 index 0000000..b89b0c7 --- /dev/null +++ b/ios/WuKongIMSDK.framework/PrivateHeaders/interf_enc.h @@ -0,0 +1,50 @@ +/* ------------------------------------------------------------------ + * Copyright (C) 2009 Martin Storsjo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the License for the specific language governing permissions + * and limitations under the License. + * ------------------------------------------------------------------- + */ + +#ifndef OPENCORE_AMRNB_INTERF_ENC_H +#define OPENCORE_AMRNB_INTERF_ENC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef AMRNB_WRAPPER_INTERNAL +/* Copied from enc/src/gsmamr_enc.h */ +enum Mode { + MR475 = 0,/* 4.75 kbps */ + MR515, /* 5.15 kbps */ + MR59, /* 5.90 kbps */ + MR67, /* 6.70 kbps */ + MR74, /* 7.40 kbps */ + MR795, /* 7.95 kbps */ + MR102, /* 10.2 kbps */ + MR122, /* 12.2 kbps */ + MRDTX, /* DTX */ + N_MODES /* Not Used */ +}; +#endif + +void* Encoder_Interface_init(int dtx); +void Encoder_Interface_exit(void* state); +int Encoder_Interface_Encode(void* state, enum Mode mode, const short* speech, unsigned char* out, int forceSpeech); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/ios/WuKongIMSDK.framework/PrivateHeaders/wavreader.h b/ios/WuKongIMSDK.framework/PrivateHeaders/wavreader.h new file mode 100755 index 0000000..57a13ff --- /dev/null +++ b/ios/WuKongIMSDK.framework/PrivateHeaders/wavreader.h @@ -0,0 +1,37 @@ +/* ------------------------------------------------------------------ + * Copyright (C) 2009 Martin Storsjo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the License for the specific language governing permissions + * and limitations under the License. + * ------------------------------------------------------------------- + */ + +#ifndef WAVREADER_H +#define WAVREADER_H + +#ifdef __cplusplus +extern "C" { +#endif + +void* wav_read_open(const char *filename); +void wav_read_close(void* obj); + +int wav_get_header(void* obj, int* format, int* channels, int* sample_rate, int* bits_per_sample, unsigned int* data_length); +int wav_read_data(void* obj, unsigned char* data, unsigned int length); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/ios/WuKongIMSDK.framework/PrivateHeaders/wavwriter.h b/ios/WuKongIMSDK.framework/PrivateHeaders/wavwriter.h new file mode 100755 index 0000000..9767ad1 --- /dev/null +++ b/ios/WuKongIMSDK.framework/PrivateHeaders/wavwriter.h @@ -0,0 +1,36 @@ +/* ------------------------------------------------------------------ + * Copyright (C) 2009 Martin Storsjo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the License for the specific language governing permissions + * and limitations under the License. + * ------------------------------------------------------------------- + */ + +#ifndef WAVWRITER_H +#define WAVWRITER_H + +#ifdef __cplusplus +extern "C" { +#endif + +void* wav_write_open(const char *filename, int sample_rate, int bits_per_sample, int channels); +void wav_write_close(void* obj); + +void wav_write_data(void* obj, const unsigned char* data, int length); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK b/ios/WuKongIMSDK.framework/WuKongIMSDK new file mode 100755 index 0000000..5133084 Binary files /dev/null and b/ios/WuKongIMSDK.framework/WuKongIMSDK differ diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/201911270513.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/201911270513.sql new file mode 100644 index 0000000..f999d2f --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/201911270513.sql @@ -0,0 +1,143 @@ +-- 频道表 +create table channel +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + channel_id varchar(100) NOT NULL default '', -- 频道ID + channel_type smallint NOT NULL default 0, -- 频道类型 + follow smallint NOT NULL default 0, -- 是否已关注 0.未关注(陌生人) 1.已关注(好友) + name varchar(100) NOT NULL default '', -- 频道名称 + notice varchar(400) NOT NULL default '', -- 频道公告 + logo varchar(255) NOT NULL default '', -- 频道logo + remark varchar(100) NOT NULL default '', -- 频道备注名 + stick smallint NOT NULL default 0, -- 是否置顶 0.否 1.是 + mute smallint NOT NULL default 0, -- 是否免打扰 0.否 1.是 + show_nick smallint NOT NULL default 0, -- 是否显示昵称 + save smallint NOT NULL default 0, -- 是否保存 + extra text not null default '', -- 扩展数据 + created_at timeStamp not null DEFAULT (datetime('now', 'localtime')), -- 创建时间 + updated_at timeStamp not null DEFAULT (datetime('now', 'localtime')) -- 更新时间 +); + +CREATE UNIQUE INDEX IF NOT EXISTS idx_channel ON channel (channel_id, channel_type); + +-- +migrate StatementBegin +CREATE TRIGGER channel_updated_at + AFTER UPDATE + ON `channel` + BEGIN + update `channel` SET updated_at = datetime('now') WHERE id = NEW.id; + END; +-- +migrate StatementEnd + + +-- 频道成员表 +create table channel_member +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + channel_id varchar(100) NOT NULL default '', -- 频道ID + channel_type smallint NOT NULL default 0, -- 频道类型 + member_uid varchar(40) NOT NULL default '', -- 成员UID + member_name varchar(100) NOT NULL default '', -- 成员名称 + member_avatar varchar(100) NOT NULL default '', -- 成员头像 + member_remark varchar(100) NOT NULL default '', -- 成员备注 + version bigint NOT NULL default 0, -- 版本号 + role INTEGER NOT NULL default 0, -- 成员角色 + status smallint NOT NULL default 0, -- 成员状态 + extra text not null default '', -- 扩展数据 + created_at varchar(40) NOT NULL default '', -- 创建时间 + updated_at varchar(40) NOT NULL default '', -- 更新时间 + is_deleted smallint NOT NULL default 0 -- 是否已删除 0.否 1.是 +); +CREATE INDEX IF NOT EXISTS idx_channel_member ON channel_member (channel_id, channel_type); + + + +-- 消息表 +create table message +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + message_id UNSIGNED BIG INT not null default 0, -- 消息ID + message_seq UNSIGNED BIG INT not null default 0, -- 消息序列号(非严格递增) + order_seq UNSIGNED BIG INT not null default 0, -- 消息排序号(消息越新序号越大) + timestamp integer NOT NULL default 0, -- 服务器消息时间戳(10位,到秒) + from_uid VARCHAR(40) not null default '', -- 发送者uid + to_uid VARCHAR(40) not null default '', -- 接收者uid + channel_id VARCHAR(100) not null default '', -- 频道ID + channel_type smallint not null default 0, -- 频道类型 + content_type integer NOT NULL default 0, -- 消息正文类型 + content text not null default '', -- 消息正文 + status integer not null default 0, -- 消息状态 + readed smallint not null default 0, -- 消息是否已读 0.未读 1.已读 + voice_readed smallint not null default 0, -- 语音是否已读 0.未读 1.已读 + extra text not null default '', -- 扩展数据 + revoke smallint not null default 0, -- 消息是否被撤回 0.否 1.是 + is_deleted smallint not null default 0, -- 是否已删除 0.否 1.是 + created_at timeStamp not null DEFAULT (datetime('now', 'localtime')), -- 创建时间 + updated_at timeStamp not null DEFAULT (datetime('now', 'localtime')) -- 更新时间 +); +CREATE INDEX IF NOT EXISTS idx_message ON message (channel_id, channel_type); +CREATE INDEX IF NOT EXISTS idx_order_seq ON message (order_seq); +CREATE INDEX IF NOT EXISTS idx_content_type ON message (content_type); +CREATE INDEX IF NOT EXISTS idx_message_id ON message (message_id); + +-- +migrate StatementBegin +CREATE TRIGGER message_updated_at + AFTER UPDATE + ON `message` + BEGIN + update `message` SET updated_at = datetime('now') WHERE id = NEW.id; + END; +-- +migrate StatementEnd + +-- 最近会话 +create table conversation +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + channel_id VARCHAR(100) not null default '', -- 频道ID + channel_type smallint not null default 0, -- 频道类型 + avatar VARCHAR(255) not null default '', -- 最近会话的头像 + last_client_msg_no VARCHAR(40) not null default '', -- 最后一条消息client_msg_no + last_msg_timestamp integer not null default 0, -- 最后一条消息时间戳 + unread_count integer not null default 0, -- 消息未读数量 + browse_to INTEGER not null default 0, -- 已预览至的message_seq + reminders text not null default '', -- 提醒集合 类似 [{type:1,text:@"有人@我",data:{}}] + extra text not null default '', -- 扩展数据 + created_at timeStamp not null DEFAULT (datetime('now', 'localtime')), -- 创建时间 + updated_at timeStamp not null DEFAULT (datetime('now', 'localtime')) -- 更新时间 +); + +CREATE UNIQUE INDEX IF NOT EXISTS idx_conversation ON conversation (channel_id, channel_type); + +-- +migrate StatementBegin +CREATE TRIGGER conversation_updated_at + AFTER UPDATE + ON `conversation` + BEGIN + update `conversation` SET updated_at = datetime('now') WHERE id = NEW.id; + END; +-- +migrate StatementEnd + + + +-- 附件表 +create table attachment +( +id INTEGER PRIMARY KEY AUTOINCREMENT, +channel_id VARCHAR(40) not null default '', -- 频道ID +channel_type smallint not null default 0, -- 频道类型 +client_seq VARCHAR(40) not null default '', -- 消息seq +localPath VARCHAR(255) not null default '', -- 本地url +remoteUrl VARCHAR(255) not null default '', -- 远程url +extra text not null default '', -- 扩展数据 +created_at timeStamp not null DEFAULT (datetime('now', 'localtime')), -- 创建时间 +updated_at timeStamp not null DEFAULT (datetime('now', 'localtime')) -- 更新时间 +); + +-- +migrate StatementBegin +CREATE TRIGGER attachment_updated_at +AFTER UPDATE +ON `attachment` +BEGIN +update `attachment` SET updated_at = datetime('now') WHERE id = NEW.id; +END; +-- +migrate StatementEnd diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202004020916.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202004020916.sql new file mode 100644 index 0000000..03e734c --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202004020916.sql @@ -0,0 +1,4 @@ + +alter table `channel` add column forbidden smallint not null default 0; -- 是否禁言 0.否 1.是 + +alter table `channel` add column invite smallint not null default 0; -- 群聊邀请确认 0.否 1.是 diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202005082006.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202005082006.sql new file mode 100644 index 0000000..5200481 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202005082006.sql @@ -0,0 +1,2 @@ +alter table `message` add column searchable_word text not null default ''; -- 消息可以索引的关键字 + diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202005131009.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202005131009.sql new file mode 100644 index 0000000..de4092d --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202005131009.sql @@ -0,0 +1,2 @@ + +alter table `conversation` add column version bigint NOT NULL default 0; -- 版本号 diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202005281108.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202005281108.sql new file mode 100644 index 0000000..50ccef0 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202005281108.sql @@ -0,0 +1,4 @@ +alter table `message` add column client_msg_no varchar(80) not null default ''; -- 客户端唯一编号 + +CREATE UNIQUE INDEX IF NOT EXISTS idx_client_msg_no ON message (client_msg_no); + diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202006261246.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202006261246.sql new file mode 100644 index 0000000..485799d --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202006261246.sql @@ -0,0 +1,3 @@ +alter table `channel` add column status smallint not null default 0; -- 频道状态 0.正常 2.被拉入黑明单 + +alter table `conversation` add column is_deleted smallint not null default 0; -- 是否已删除 0.未删除 1.已删除 diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202008281408.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202008281408.sql new file mode 100644 index 0000000..53ff3d2 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202008281408.sql @@ -0,0 +1,3 @@ + +alter table `channel` add column online smallint not null default 0; -- 是否在线 0.不在线 1.在线 +alter table `channel` add column last_offline INTEGER not null default 0; -- 最后一次离线时间 diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202009151550.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202009151550.sql new file mode 100644 index 0000000..58970b0 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202009151550.sql @@ -0,0 +1,2 @@ + +alter table `channel` add column category varchar(40) not null default ''; -- 频道类别 diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202011211232.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202011211232.sql new file mode 100644 index 0000000..4cb46ef --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202011211232.sql @@ -0,0 +1,16 @@ + +-- cmd表 +create table cmd +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + message_id UNSIGNED BIG INT not null default 0, -- 消息ID + message_seq UNSIGNED BIG INT not null default 0, -- 消息序列号(非严格递增) + client_msg_no VARCHAR(40) not null default '', -- 客户端消息编号(去重用) + timestamp integer NOT NULL default 0, -- 服务器消息时间戳(10位,到秒) + cmd VARCHAR(40) not null default '', -- cmd命令 + param text not null default '', -- cmd参数 + is_deleted smallint not null default 0, -- 是否已删除 0.否 1.是 + created_at timeStamp not null DEFAULT (datetime('now', 'localtime')) -- 创建时间 +); +CREATE UNIQUE INDEX IF NOT EXISTS idx_client_msg_no_cmd ON cmd (client_msg_no); +CREATE UNIQUE INDEX IF NOT EXISTS idx_message_id_cmd ON cmd (message_id); diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202104081038.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202104081038.sql new file mode 100644 index 0000000..ad7c944 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202104081038.sql @@ -0,0 +1,9 @@ + +alter table `message` add column `revoker` varchar(40) not null default ''; -- 撤回消息的人的uid +alter table `message` add column `extra_version` integer not null default 0; -- 扩展消息的版本号 +alter table `message` add column `unread_count` integer not null default 0; -- 未读数量 +alter table `message` add column `readed_count` integer not null default 0; -- 已读数量 + +alter table `message` add column `setting` integer not null default 0; -- 消息设置 + +alter table `channel` add column `receipt` smallint not null default 0; -- 回执开关 diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202107231715.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202107231715.sql new file mode 100644 index 0000000..a92b3c9 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202107231715.sql @@ -0,0 +1 @@ +alter table `conversation` add column last_message_seq UNSIGNED BIG INT not null default 0; -- 最后一条消息的message_seq diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202109031803.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202109031803.sql new file mode 100644 index 0000000..75e568a --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202109031803.sql @@ -0,0 +1,55 @@ +-- 身份表 +create table identities +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + address text NOT NULL default '', -- 身份地址 + registration_id INTEGER NOT NULL default 0, -- 身份注册ID + public_key text NOT NULL, -- 公钥 + private_key text NOT NULL, -- 私钥 + next_prekey_id BIG INT NOT NULL default 0, -- 密钥ID + `timestamp` REAL NOT NULL default 0 -- 密钥生成时间 +); +CREATE UNIQUE INDEX IF NOT EXISTS identities_index_id ON identities(address); + + +create table prekeys( + id INTEGER PRIMARY KEY AUTOINCREMENT, + pre_key_id INTEGER NOT NULL default 0, + record text NOT NULL +); +CREATE UNIQUE INDEX IF NOT EXISTS prekeys_index_id ON prekeys(pre_key_id); + + +create table ratchet_sender_keys( + id INTEGER PRIMARY KEY AUTOINCREMENT, + group_id text NOT NULL default '', + sender_id text NOT NULL default '', + status text NOT NULL default '' +); +CREATE UNIQUE INDEX IF NOT EXISTS ratchet_sender_keys_index_id ON ratchet_sender_keys(group_id,sender_id); + + +create table sender_keys( + id INTEGER PRIMARY KEY AUTOINCREMENT, + group_id text NOT NULL default '', + sender_id text NOT NULL default '', + record text NOT NULL +); +CREATE UNIQUE INDEX IF NOT EXISTS sender_keys_index_id ON sender_keys(group_id,sender_id); + + +create table sessions( + id INTEGER PRIMARY KEY AUTOINCREMENT, + address text NOT NULL default '', + device INTEGER NOT NULL default 0, + record text NOT NULL, + `timestamp` REAL NOT NULL default 0 +); + + +create table signed_prekeys( + id INTEGER PRIMARY KEY AUTOINCREMENT, + pre_key_id INTEGER NOT NULL default 0, + record text NOT NULL, + `timestamp` REAL NOT NULL default 0 +); diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202109131407.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202109131407.sql new file mode 100644 index 0000000..a514937 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202109131407.sql @@ -0,0 +1,15 @@ +-- 回应表 +create table reactions +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + message_id UNSIGNED BIG INT not null default 0, -- 消息ID + channel_id VARCHAR(100) not null default '', -- 频道ID + channel_type smallint not null default 0, -- 频道类型 + version bigint NOT NULL default 0, -- 版本号 + uid VARCHAR(40) not null default '', -- 回应人的uid + emoji VARCHAR(40) not null default '', -- 回应的表情 + created_at VARCHAR(20) not null default '', -- 回应时间 + is_deleted smallint not null default 0 -- 是否已删除 0.否 1.是 +); +CREATE UNIQUE INDEX IF NOT EXISTS reactions_idx ON reactions(message_id,uid); + diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202110191134.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202110191134.sql new file mode 100644 index 0000000..4303234 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202110191134.sql @@ -0,0 +1,14 @@ +-- 机器人表 +create table robot +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + robot_id VARCHAR(40) not null default '', -- 机器人id(也是uid) + version bigint NOT NULL default 0, -- 版本号 + status INTEGER NOT NULL default 1, -- 机器人状态 0.禁用 1.启用 + menus text NOT NULL default '' -- 菜单json +); +CREATE UNIQUE INDEX IF NOT EXISTS robot_idx ON robot(robot_id); + +alter table `channel` add column robot smallint not null default 0; -- 是否是机器人 +alter table `channel_member` add column robot smallint not null default 0; -- 是否是机器人 + diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202110271237.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202110271237.sql new file mode 100644 index 0000000..3733be2 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202110271237.sql @@ -0,0 +1,4 @@ + +alter table `channel` add column be_deleted smallint not null default 0; -- 是否被删除 +alter table `channel` add column be_blacklist smallint not null default 0; -- 是否被拉入黑名单 + diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202111051643.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202111051643.sql new file mode 100644 index 0000000..8ef5bfe --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202111051643.sql @@ -0,0 +1,6 @@ + +alter table `robot` add column inline_on smallint not null default 0; -- 是否支持行内搜索 + +alter table `robot` add column placeholder VARCHAR(255) not null default ''; -- 如果支持行内搜索 则占位字符内容 + +alter table `robot` add column username VARCHAR(40) not null default ''; -- 机器人username diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202204121358.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202204121358.sql new file mode 100644 index 0000000..3d55607 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202204121358.sql @@ -0,0 +1,56 @@ +-- 消息扩展表 +create table message_extra +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + message_id UNSIGNED BIG INT not null default 0, -- 消息ID + message_seq UNSIGNED BIG INT not null default 0, -- 消息seq + channel_id VARCHAR(100) not null default '', -- 频道ID + channel_type smallint not null default 0, -- 频道类型 + readed integer not null default 0, -- 消息是否已读 + readed_count integer not null default 0, -- 消息已读数量 + unread_count integer not null default 0, -- 消息未读数量 + revoke smallint not null default 0, -- 是否已撤回 + revoker VARCHAR(40) not null default '', -- 撤回者的uid + content_edit text not null default '', -- 消息正文编辑 + edited_at integer not null default 0, -- 最后一次编辑时间 + upload_status smallint not null default 0, -- 上传状态 0.不需要上传 1.待上传 2.上传失败 + extra_version bigint not null default 0 -- 扩展版本编号 +); +CREATE UNIQUE INDEX IF NOT EXISTS message_extra_idx ON message_extra(message_id); +CREATE INDEX IF NOT EXISTS idx_message_extra ON message_extra (channel_id, channel_type); + +-- 提醒项表 +create table reminders +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + reminder_id INTEGER not null default 0, -- 提醒事项在服务端的id + message_id UNSIGNED BIG INT not null default 0, -- 消息ID + message_seq UNSIGNED BIG INT not null default 0, -- 消息seq + channel_id VARCHAR(100) not null default '', -- 频道ID + channel_type smallint not null default 0, -- 频道类型 + `type` integer not null default 0, -- 提醒类型 + `text` varchar(255) not null default '', -- 提醒内容 + `data` varchar(1000) not null default '', -- 自定义数据 + is_locate smallint not null default 0 , -- 是否需要定位 + version bigint NOT NULL default 0, + done smallint not null default 0, -- 是否完成 + done_at integer not null default 0, -- done时间 (仅本地用) + upload_status smallint not null default 0 -- 上传状态 0.不需要上传 1.待上传 2.上传失败 (仅本地用) +); +CREATE INDEX IF NOT EXISTS idx_channel_reminders ON reminders (channel_id, channel_type); +CREATE UNIQUE INDEX IF NOT EXISTS uidx_reminder ON reminders(reminder_id); + + +-- 最新会话扩展表 +create table conversation_extra +( + id INTEGER PRIMARY KEY AUTOINCREMENT, + channel_id VARCHAR(100) not null default '', -- 频道ID + channel_type smallint not null default 0, -- 频道类型 + browse_to UNSIGNED BIG INT not null default 0, -- 预览位置 预览到的位置,与会话保持位置不同的是 预览到的位置是用户读到的最大的messageSeq。跟未读消息数量有关系 + keep_message_seq UNSIGNED BIG INT not null default 0, -- 保持位置的messageSeq + keep_offset_y INTEGER not null default 0, + draft varchar(1000) not null default '', -- 草稿 + version bigint NOT NULL default 0 -- 数据版本 +); +CREATE UNIQUE INDEX IF NOT EXISTS idx_channel_conversation_extra ON conversation_extra (channel_id, channel_type); diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202204151134.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202204151134.sql new file mode 100644 index 0000000..685143f --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202204151134.sql @@ -0,0 +1,6 @@ + +-- 将原来message表内的数据迁移到message_extra里 + +replace into message_extra (message_id,message_seq,channel_id,channel_type,readed,readed_count,unread_count,revoke,revoker,extra_version) select message_id,message_seq,channel_id,channel_type,readed,readed_count,unread_count,revoke,revoker,extra_version from message where message.message_id >0; + + diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202204271323.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202204271323.sql new file mode 100644 index 0000000..29e76a1 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202204271323.sql @@ -0,0 +1,2 @@ +alter table `message` add column reason_code INTEGER not null default 0; -- 发送消息错误原因代码 + diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202205281139.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202205281139.sql new file mode 100644 index 0000000..dfa1292 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202205281139.sql @@ -0,0 +1,2 @@ +alter table `message_extra` add column extra text not null default ''; -- 扩展字段 + diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202208151642.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202208151642.sql new file mode 100644 index 0000000..80ff2b9 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202208151642.sql @@ -0,0 +1,13 @@ +alter table `message_extra` add column readed_at integer not null default ''; -- 已读时间 +alter table `message` add column flame smallint not null default 0; -- 是否开启阅后即焚 +alter table `message` add column flame_second integer not null default 0; -- 阅后即焚秒数 + +alter table `message` add column viewed smallint not null default 0; -- 是否已查看 0.未查看 1.已查看 (这个字段跟已读的区别在于是真正的查看了消息内容,比如图片消息 已读是列表滑动到图片消息位置就算已读,viewed是表示点开图片才算已查看,语音消息类似) +alter table `message` add column viewed_at integer not null default 0; -- 查看时间戳 + +alter table `channel` add column flame smallint not null default 0; -- 是否开启阅后即焚 +alter table `channel` add column flame_second integer not null default 0; -- 阅后即焚秒数 + +CREATE UNIQUE INDEX IF NOT EXISTS uidx_channel_member_uid ON channel_member (channel_id, channel_type,member_uid); + +CREATE INDEX IF NOT EXISTS idx_channel_member_version ON channel_member (channel_id, channel_type,version); -- 成员表增加索引 diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202209191443.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202209191443.sql new file mode 100644 index 0000000..a63c628 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/202209191443.sql @@ -0,0 +1,2 @@ +alter table `channel` add column device_flag INTEGER not null default 0; -- 当前在线的主设备标记 + diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/2022112211509.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/2022112211509.sql new file mode 100644 index 0000000..8b19697 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/2022112211509.sql @@ -0,0 +1,2 @@ +alter table `reminders` add column publisher VARCHAR(40) not null default ''; -- 发布者 + diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/2022112241033.sql b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/2022112241033.sql new file mode 100644 index 0000000..f43b73d --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/2022112241033.sql @@ -0,0 +1,10 @@ +alter table `channel` add column parent_channel_id VARCHAR(40) not null default ''; -- 父类频道ID +alter table `channel` add column parent_channel_type smallint not null default 0; -- 父类频道类型 + + +alter table `conversation` add column parent_channel_id VARCHAR(40) not null default ''; -- 父类频道ID +alter table `conversation` add column parent_channel_type smallint not null default 0; -- 父类频道类型 + +alter table `message` add column parent_channel_id VARCHAR(40) not null default ''; -- 父类频道ID +alter table `message` add column parent_channel_type smallint not null default 0; -- 父类频道类型 + diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/Info.plist b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/Info.plist new file mode 100644 index 0000000..8d72475 Binary files /dev/null and b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/Info.plist differ diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeDirectory b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeDirectory new file mode 100644 index 0000000..f2ce415 Binary files /dev/null and b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeDirectory differ diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeRequirements b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeRequirements new file mode 100644 index 0000000..415e9e8 Binary files /dev/null and b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeRequirements differ diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeRequirements-1 b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeRequirements-1 new file mode 100644 index 0000000..856d5b7 Binary files /dev/null and b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeRequirements-1 differ diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeResources b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeResources new file mode 100644 index 0000000..8f46a36 --- /dev/null +++ b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeResources @@ -0,0 +1,458 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>files</key> + <dict> + <key>201911270513.sql</key> + <data> + zTTFVt4t2IES0H5YtZf9AKfPEwA= + </data> + <key>202004020916.sql</key> + <data> + fPCWrZrpTS4zAe7UuIyWgGsmwt0= + </data> + <key>202005082006.sql</key> + <data> + sPRSAEQC+yTaqdgJziYdXtgZ0ds= + </data> + <key>202005131009.sql</key> + <data> + NJY2K+A6sUlXqkxFppFza3+wnXI= + </data> + <key>202005281108.sql</key> + <data> + jOlPZd4NfoSdj5pWHKLOXGgdBSQ= + </data> + <key>202006261246.sql</key> + <data> + VYTcx/aA+6CVHpPfn2Fcv+rMV3A= + </data> + <key>202008281408.sql</key> + <data> + o6FNMKUYqxNNHO3FBgGEMsQ8xJA= + </data> + <key>202009151550.sql</key> + <data> + AJGoQ8F3iIc1TnvPG9pVmdx00oQ= + </data> + <key>202011211232.sql</key> + <data> + ki9C/7sznLSli//2c7lmEcMe764= + </data> + <key>202104081038.sql</key> + <data> + yX1JXF4grUcMHpN3pR8lWX41/eg= + </data> + <key>202107231715.sql</key> + <data> + MLC3c56TLdbnZCUsVFAz9o6+ibU= + </data> + <key>202109031803.sql</key> + <data> + ceLYlM4H7pmUL9PLcSeH0X15Dvs= + </data> + <key>202109131407.sql</key> + <data> + 19urqO2NhCR77eeEggIJB+3lFAg= + </data> + <key>202110191134.sql</key> + <data> + dWssbXOp8zaK/VrtNoQygY94bzI= + </data> + <key>202110271237.sql</key> + <data> + gHHp8Yw9Z4njEZG216qwNJbJWsA= + </data> + <key>202111051643.sql</key> + <data> + aEluPlX2sLKYV5211gXlEZSNTk0= + </data> + <key>202204121358.sql</key> + <data> + G0vSfELarZBQecm8ZYqts/6PkZU= + </data> + <key>202204151134.sql</key> + <data> + ESh/A9XgF8AdiDWoY/nimNVMuN4= + </data> + <key>202204271323.sql</key> + <data> + spxRjYJ6ySuvRLdYUrS2/ViKVRg= + </data> + <key>202205281139.sql</key> + <data> + IkYm4mLJtiEclUxisP5K0UOneZw= + </data> + <key>202208151642.sql</key> + <data> + bH0zGtFTkAYon1fBeluaUkTnaUA= + </data> + <key>202209191443.sql</key> + <data> + NIIEbaNiHyqoe9Bj3tGNmhW65U8= + </data> + <key>2022112211509.sql</key> + <data> + C1SrAYucl0o6aDMeQD7KeNXTEL4= + </data> + <key>2022112241033.sql</key> + <data> + zVa24qGPCnOizg1VH7LlQVDPYF0= + </data> + </dict> + <key>files2</key> + <dict> + <key>201911270513.sql</key> + <dict> + <key>hash</key> + <data> + zTTFVt4t2IES0H5YtZf9AKfPEwA= + </data> + <key>hash2</key> + <data> + r55J81o/hSumJ8/gc0Dlw7gQdy+nAn0LBHcKT6jOOCc= + </data> + </dict> + <key>202004020916.sql</key> + <dict> + <key>hash</key> + <data> + fPCWrZrpTS4zAe7UuIyWgGsmwt0= + </data> + <key>hash2</key> + <data> + NKkjfaKE9PxximhnLyNY6bbOoJnGyFD7CUQNEmgLZeg= + </data> + </dict> + <key>202005082006.sql</key> + <dict> + <key>hash</key> + <data> + sPRSAEQC+yTaqdgJziYdXtgZ0ds= + </data> + <key>hash2</key> + <data> + tqQkokZEiBuJ5YA5/hbTGbBb/CowRFGFqMxUGq11R+M= + </data> + </dict> + <key>202005131009.sql</key> + <dict> + <key>hash</key> + <data> + NJY2K+A6sUlXqkxFppFza3+wnXI= + </data> + <key>hash2</key> + <data> + X/GwSlnm3Laz1/bFDWze2NsmZPTe+zpCD/soJKlhNeg= + </data> + </dict> + <key>202005281108.sql</key> + <dict> + <key>hash</key> + <data> + jOlPZd4NfoSdj5pWHKLOXGgdBSQ= + </data> + <key>hash2</key> + <data> + I/xp+x3BEBbzJkXIR9QnFAeB2m/25Kp98FCl/4Vl+Lk= + </data> + </dict> + <key>202006261246.sql</key> + <dict> + <key>hash</key> + <data> + VYTcx/aA+6CVHpPfn2Fcv+rMV3A= + </data> + <key>hash2</key> + <data> + jAE9kuPPfTR0nV8/BgQV6tbGf3+b/RP9ueBuBnglbnU= + </data> + </dict> + <key>202008281408.sql</key> + <dict> + <key>hash</key> + <data> + o6FNMKUYqxNNHO3FBgGEMsQ8xJA= + </data> + <key>hash2</key> + <data> + nlg06gg3EUNiiyf9i57pYYtuwgtY/jBgAoS1407nsCk= + </data> + </dict> + <key>202009151550.sql</key> + <dict> + <key>hash</key> + <data> + AJGoQ8F3iIc1TnvPG9pVmdx00oQ= + </data> + <key>hash2</key> + <data> + JsU0vyIzj0yeD9Sp+/ZnKmjQd8ZOv2WEeIWURQSIhK8= + </data> + </dict> + <key>202011211232.sql</key> + <dict> + <key>hash</key> + <data> + ki9C/7sznLSli//2c7lmEcMe764= + </data> + <key>hash2</key> + <data> + RU9jYEdstASkIQ85PAKcU4ii8Nw4/ocFrPvVPGwVGv8= + </data> + </dict> + <key>202104081038.sql</key> + <dict> + <key>hash</key> + <data> + yX1JXF4grUcMHpN3pR8lWX41/eg= + </data> + <key>hash2</key> + <data> + NOM/ST+MiJrei9YtSFxKMIX0i0Hq95UyTDXuKndEmXc= + </data> + </dict> + <key>202107231715.sql</key> + <dict> + <key>hash</key> + <data> + MLC3c56TLdbnZCUsVFAz9o6+ibU= + </data> + <key>hash2</key> + <data> + 4mxzPBN19Zmfi1cTtyllZVHAXtq2bId6JS7cHEeX8co= + </data> + </dict> + <key>202109031803.sql</key> + <dict> + <key>hash</key> + <data> + ceLYlM4H7pmUL9PLcSeH0X15Dvs= + </data> + <key>hash2</key> + <data> + ohblzBIwmam54YQbirGatMsVINz+Sm6G/rXd5Dj4O4A= + </data> + </dict> + <key>202109131407.sql</key> + <dict> + <key>hash</key> + <data> + 19urqO2NhCR77eeEggIJB+3lFAg= + </data> + <key>hash2</key> + <data> + doNj4YD/bsfH350CKciNwPxVRmcesFswQdgFPmklCwk= + </data> + </dict> + <key>202110191134.sql</key> + <dict> + <key>hash</key> + <data> + dWssbXOp8zaK/VrtNoQygY94bzI= + </data> + <key>hash2</key> + <data> + crh4TBILihau1pSxuiD8VYyQBczJ0Jl3rdYrArLGKZE= + </data> + </dict> + <key>202110271237.sql</key> + <dict> + <key>hash</key> + <data> + gHHp8Yw9Z4njEZG216qwNJbJWsA= + </data> + <key>hash2</key> + <data> + PnK2mzWk2ZkyYqSBMdR1NWLaD8xeXMjPQlAJ4Nbez4Q= + </data> + </dict> + <key>202111051643.sql</key> + <dict> + <key>hash</key> + <data> + aEluPlX2sLKYV5211gXlEZSNTk0= + </data> + <key>hash2</key> + <data> + QP/9HP0CFp2001jOlH0tpa4j+6YoITG/Z5g0ib5o/S8= + </data> + </dict> + <key>202204121358.sql</key> + <dict> + <key>hash</key> + <data> + G0vSfELarZBQecm8ZYqts/6PkZU= + </data> + <key>hash2</key> + <data> + N/qQPDdYOvjVSpGI3o6KOABQ2mxnjAxvA9bY/+gIf2M= + </data> + </dict> + <key>202204151134.sql</key> + <dict> + <key>hash</key> + <data> + ESh/A9XgF8AdiDWoY/nimNVMuN4= + </data> + <key>hash2</key> + <data> + 68/0MpjD7Am7JylSkYRCOy26wxi+qIHMoNIDXNvl7Zo= + </data> + </dict> + <key>202204271323.sql</key> + <dict> + <key>hash</key> + <data> + spxRjYJ6ySuvRLdYUrS2/ViKVRg= + </data> + <key>hash2</key> + <data> + U05eapaOUldGj0zw/hm7U/39LD2V+FLcxytTEZyNq2Y= + </data> + </dict> + <key>202205281139.sql</key> + <dict> + <key>hash</key> + <data> + IkYm4mLJtiEclUxisP5K0UOneZw= + </data> + <key>hash2</key> + <data> + jLo7h43Nn/gNBoXfctYVIlau9odt7H57fR97wJKfGtw= + </data> + </dict> + <key>202208151642.sql</key> + <dict> + <key>hash</key> + <data> + bH0zGtFTkAYon1fBeluaUkTnaUA= + </data> + <key>hash2</key> + <data> + 9+l95nB7ndnEeeTFimvo88O54w4B/akjOheZevUm8bg= + </data> + </dict> + <key>202209191443.sql</key> + <dict> + <key>hash</key> + <data> + NIIEbaNiHyqoe9Bj3tGNmhW65U8= + </data> + <key>hash2</key> + <data> + KIldfii11X/oB/aG7rxorXbCjWnTqK8CZARAObltiwc= + </data> + </dict> + <key>2022112211509.sql</key> + <dict> + <key>hash</key> + <data> + C1SrAYucl0o6aDMeQD7KeNXTEL4= + </data> + <key>hash2</key> + <data> + hy47RlOZvdhRoJZD+bGVbs6so4PwcwW7276WjXZUWXc= + </data> + </dict> + <key>2022112241033.sql</key> + <dict> + <key>hash</key> + <data> + zVa24qGPCnOizg1VH7LlQVDPYF0= + </data> + <key>hash2</key> + <data> + lDf4V2GTA+x/M/C9yk4GCkzsHfbodHl6CCkCOJj0xto= + </data> + </dict> + </dict> + <key>rules</key> + <dict> + <key>^.*</key> + <true/> + <key>^.*\.lproj/</key> + <dict> + <key>optional</key> + <true/> + <key>weight</key> + <real>1000</real> + </dict> + <key>^.*\.lproj/locversion.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>1100</real> + </dict> + <key>^Base\.lproj/</key> + <dict> + <key>weight</key> + <real>1010</real> + </dict> + <key>^version.plist$</key> + <true/> + </dict> + <key>rules2</key> + <dict> + <key>.*\.dSYM($|/)</key> + <dict> + <key>weight</key> + <real>11</real> + </dict> + <key>^(.*/)?\.DS_Store$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>2000</real> + </dict> + <key>^.*</key> + <true/> + <key>^.*\.lproj/</key> + <dict> + <key>optional</key> + <true/> + <key>weight</key> + <real>1000</real> + </dict> + <key>^.*\.lproj/locversion.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>1100</real> + </dict> + <key>^Base\.lproj/</key> + <dict> + <key>weight</key> + <real>1010</real> + </dict> + <key>^Info\.plist$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>20</real> + </dict> + <key>^PkgInfo$</key> + <dict> + <key>omit</key> + <true/> + <key>weight</key> + <real>20</real> + </dict> + <key>^embedded\.provisionprofile$</key> + <dict> + <key>weight</key> + <real>20</real> + </dict> + <key>^version\.plist$</key> + <dict> + <key>weight</key> + <real>20</real> + </dict> + </dict> +</dict> +</plist> diff --git a/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeSignature b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeSignature new file mode 100644 index 0000000..f36d903 Binary files /dev/null and b/ios/WuKongIMSDK.framework/WuKongIMSDK.bundle/_CodeSignature/CodeSignature differ diff --git a/ios/lib/libopencore-amrnb.a b/ios/lib/libopencore-amrnb.a new file mode 100644 index 0000000..89ade73 Binary files /dev/null and b/ios/lib/libopencore-amrnb.a differ diff --git a/ios/lib/libopencore-amrwb.a b/ios/lib/libopencore-amrwb.a new file mode 100755 index 0000000..cdd7d8d Binary files /dev/null and b/ios/lib/libopencore-amrwb.a differ diff --git a/ios/lib/libvo-amrwbenc.a b/ios/lib/libvo-amrwbenc.a new file mode 100755 index 0000000..355ece5 Binary files /dev/null and b/ios/lib/libvo-amrwbenc.a differ