JMSGConstants.h 15.8 KB
Newer Older
李晓兵's avatar
李晓兵 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502
/*
 *	| |    | |  \ \  / /  | |    | |   / _______|
 *	| |____| |   \ \/ /   | |____| |  / /
 *	| |____| |    \  /    | |____| |  | |   _____
 * 	| |    | |    /  \    | |    | |  | |  |____ |
 *  | |    | |   / /\ \   | |    | |  \ \______| |
 *  | |    | |  /_/  \_\  | |    | |   \_________|
 *
 * Copyright (c) 2011 ~ 2015 Shenzhen HXHG. All rights reserved.
 */

#ifndef JMessage_JMSGConstants____FILEEXTENSION___
#define JMessage_JMSGConstants____FILEEXTENSION___

#import <Foundation/Foundation.h>


///----------------------------------------------------
/// @name type & define
///----------------------------------------------------

/*!
 * @abstract 异步回调 block
 *
 * @discussion 大多数异步 API 都会以过个 block 回调。
 *
 * - 如果调用出错,则 error 不为空,可根据 error.code 来获取错误码。该错误码 JMessage 相关文档里有详细的定义。
 * - 如果返回正常,则 error 为空。从 resultObject 去获取相应的返回。每个 API 的定义上都会有进一步的定义。
 *
 */
typedef void (^JMSGCompletionHandler)(id resultObject, NSError *error);

/*!
 * @abstract 空的 CompletionHandler.
 *
 * @discussion 用于不需要进行处理时.
 */
#define JMSG_NULL_COMPLETION_BLOCK ^(id resultObject, NSError *error){}

/*!
 * @abstract 数据返回的异步回调
 *
 * @discussion 专用于数据返回 API.
 *
 * - objectId 当前数据的ID标识.
 *   - 消息里返回 voice/image 的 media data 时, objectId 是 msgId;
 *   - 用户里返回 avatar 头像数据时, objectId 是 username.
 *
 */
typedef void (^JMSGAsyncDataHandler)(NSData *data, NSString *objectId, NSError *error);

/*!
 * @abstract 媒体上传进度 block
 *
 * @discussion 在发送消息时,可向 JMSGMessage 对象设置此 block,从而可以得到上传的进度
 */
typedef void (^JMSGMediaProgressHandler)(float percent, NSString *msgId);

/*!
 * @abstract Generic 泛型
 */
#if __has_feature(objc_generics) || __has_extension(objc_generics)
#  define JMSG_GENERIC(...) <__VA_ARGS__>
#else
#  define JMSG_GENERIC(...)
#endif

/*!
 * @abstract nullable 用于定义某属性或者变量是否可允许为空
 */
#if __has_feature(nullability)
#  define JMSG_NONNULL __nonnull
#  define JMSG_NULLABLE __nullable
#else
#  define JMSG_NONNULL
#  define JMSG_NULLABLE
#endif

#if __has_feature(assume_nonnull)
#  ifdef NS_ASSUME_NONNULL_BEGIN
#    define JMSG_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
#  else
#    define JMSG_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin")
#  endif
#  ifdef NS_ASSUME_NONNULL_END
#    define JMSG_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END
#  else
#    define JMSG_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end")
#  endif
#else
#  define JMSG_ASSUME_NONNULL_BEGIN
#  define JMSG_ASSUME_NONNULL_END
#endif


///----------------------------------------------------
/// @name enums
///----------------------------------------------------

/*!
 * 会话类型 - 单聊、群聊
 */
typedef NS_ENUM(NSInteger, JMSGConversationType) {
  /// 单聊
  kJMSGConversationTypeSingle = 1,
  /// 群聊
  kJMSGConversationTypeGroup = 2,
  /// 聊天室
  kJMSGConversationTypeChatRoom = 3,
};

/*!
 * 群组类型 - 私有、公开
 */
typedef NS_ENUM(NSInteger, JMSGGroupType) {
  /// 私有群
  kJMSGGroupTypePrivate = 1,
  /// 公开群
  kJMSGGroupTypePublic = 2,
};

/*!
 * 消息内容类型 - 文本、语音、图片等
 */
typedef NS_ENUM(NSInteger, JMSGContentType) {
  /// 不知道类型的消息
  kJMSGContentTypeUnknown = 0,
  /// 文本消息
  kJMSGContentTypeText = 1,
  /// 图片消息
  kJMSGContentTypeImage = 2,
  /// 语音消息
  kJMSGContentTypeVoice = 3,
  /// 自定义消息
  kJMSGContentTypeCustom = 4,
  /// 事件通知消息。服务器端下发的事件通知,本地展示为这个类型的消息展示出来
  kJMSGContentTypeEventNotification = 5,
  /// 文件消息
  kJMSGContentTypeFile = 6,
  /// 地理位置消息
  kJMSGContentTypeLocation = 7,
  /// 提示性消息
  kJMSGContentTypePrompt = 8,
};

/*!
 * 提示性消息的类型 - 消息撤回提示、后台自定义消息提示等
 */
typedef NS_ENUM(NSInteger, JMSGPromptContentType) {
  /// 消息撤回提示
  kJMSGPromptContentTypeRetractMessage = 0,
  /// 自定义提示
  kJMSGPromptContentTypeAPPRbag   = 1 << 0,
};

/*!
 * 消息状态
 */
typedef NS_ENUM(NSInteger, JMSGMessageStatus) {
  /// 发送息创建时的初始状态
  kJMSGMessageStatusSendDraft = 0,
  /// 消息正在发送过程中. UI 一般显示进度条
  kJMSGMessageStatusSending = 1,
  /// 媒体类消息文件上传失败
  kJMSGMessageStatusSendUploadFailed = 2,
  /// 媒体类消息文件上传成功
  kJMSGMessageStatusSendUploadSucceed = 3,
  /// 消息发送失败
  kJMSGMessageStatusSendFailed = 4,
  /// 消息发送成功
  kJMSGMessageStatusSendSucceed = 5,
  /// 接收中的消息(还在处理)
  kJMSGMessageStatusReceiving = 6,
  /// 接收消息时自动下载媒体失败
  kJMSGMessageStatusReceiveDownloadFailed = 7,
  /// 接收消息成功
  kJMSGMessageStatusReceiveSucceed = 8,
};


/*!
 * 上传文件的类型
 */
typedef NS_ENUM(NSInteger, JMSGFileType) {
  /// 未知的文件类型
  kJMSGFileTypeUnknown,
  /// 图片类型
  kJMSGFileTypeImage,
  /// 语音类型
  kJMSGFileTypeVoice,
  /// 文件类型
  kJMSGFileTypeFile,
};

/*!
 * 通知事件类型
 *
 * 本类 JMSGEventNotificationType 是 SDK 下发的通知事件类型,主要分为:消息事件、非消息事件
 *
 * #### 消息事件
 *
 * 如:群事件,SDK 会作为一个特殊的消息类型下发,上层通过 JMSGMessageDelegate 类接收消息的代理方法接收消息事件.
 *
 * #### 非消息事件
 *
 * 如:被踢、登录状态异常、加好友等,SDK 会作为通知事件下发,上层通过 JMSGEventDelegate 类的代理方法可监听此类事件.
 *
 */
typedef NS_ENUM(NSInteger, JMSGEventNotificationType) {
  
  // 用户登录状态变更事件
  /// 事件类型: 登录被踢
  kJMSGEventNotificationLoginKicked = 1,
  /// 事件类型: 非客户端修改密码强制登出事件
  kJMSGEventNotificationServerAlterPassword = 2,
  /// 事件类型:用户登录状态异常事件(需要重新登录)
  kJMSGEventNotificationUserLoginStatusUnexpected = 70,
  /// 事件类型:当前登录用户信息变更通知事件(非客户端修改)
  kJMSGEventNotificationCurrentUserInfoChange = 40,
  
  // 好友相关事件
  /// 事件类型: 收到好友邀请
  kJMSGEventNotificationReceiveFriendInvitation   = 51,
  /// 事件类型: 对方接受了你的好友邀请
  kJMSGEventNotificationAcceptedFriendInvitation  = 52,
  /// 事件类型: 对方拒绝了你的好友邀请
  kJMSGEventNotificationDeclinedFriendInvitation  = 53,
  /// 事件类型: 对方将你从好友中删除
  kJMSGEventNotificationDeletedFriend             = 6,
  /// 事件类型:非客户端修改好友关系收到好友更新事件
  kJMSGEventNotificationReceiveServerFriendUpdate = 7,
  
  /// 事件类型: 消息撤回
  kJMSGEventNotificationMessageRetract = 55,
  /// 事件类型: 消息透传
  kJMSGEventNotificationMessageTransparent = 58,
  /// 事件类型: 消息回执变更
  kJMSGEventNotificationMessageReceiptStatusChange = 68,

  // 消息事件
  /// 事件类型: 群组被创建
  kJMSGEventNotificationCreateGroup = 8,
  /// 事件类型: 退出群组
  kJMSGEventNotificationExitGroup = 9,
  /// 事件类型: 群组添加新成员
  kJMSGEventNotificationAddGroupMembers = 10,
  /// 事件类型: 群组成员被踢出
  kJMSGEventNotificationRemoveGroupMembers = 11,
  /// 事件类型: 群信息更新
  kJMSGEventNotificationUpdateGroupInfo = 12,
  /// 事件类型: 群禁言通知事件
  kJMSGEventNotificationGroupMemberSilence = 65,
};

///----------------------------------------------------
/// @name errors
///----------------------------------------------------

/*!
 * @abstract JMessage SDK 的错误码汇总
 *
 * @discussion 错误码以 86 打头,都为 iOS SDK 内部的错误码
 */
typedef NS_ENUM(NSInteger, JMSGSDKErrorCode) {

  // --------------------- Network (860xxx)

  /// 下载失败
  kJMSGErrorSDKNetworkDownloadFailed = 860015,
  /// 其他网络原因
  kJMSGErrorSDKNetworkOtherError = 860016,
  /// 服务器获取用户Token失败
  kJMSGErrorSDKNetworkTokenFailed = 860017,
  /// 上传资源文件失败
  kJMSGErrorSDKNetworkUploadFailed = 860018,
  /// 上传资源文件Token验证失败
  kJMSGErrorSDKNetworkUploadTokenVerifyFailed = 860019,
  /// 获取服务器Token失败
  kJMSGErrorSDKNetworkUploadTokenGetFailed = 860020,
  /// 服务器返回数据错误(没有按约定返回)
  kJMSGErrorSDKNetworkResultUnexpected = 860021,
  /// 服务器端返回数据格式错误
  kJMSGErrorSDKNetworkDataFormatInvalid = 860030,

  // --------------------- DB & Global params (861xxx)

  /// 数据库删除失败 (预期应该成功)
  kJMSGErrorSDKDBDeleteFailed = 861000,
  /// 数据库更新失败 (预期应该成功)
  kJMSGErrorSDKDBUpdateFailed = 861001,
  /// 数据库查询失败 (预期应该成功)
  kJMSGErrorSDKDBSelectFailed = 861002,
  /// 数据库插入失败 (预期应该成功)
  kJMSGErrorSDKDBInsertFailed = 861003,
  /// 数据库迁移失败
  kJMSGErrorSDKDBMigrateFailed = 861004,
  
  /// Appkey 不合法
  kJMSGErrorSDKParamAppkeyInvalid = 861100,
  /// SDK 内部方法参数检查错误
  kJMSGErrorSDKParamInternalInvalid = 861101,

  // ------------------------ Third party (862xxx)

  /// 七牛相关
  kJMSGQiniuTokenInvalid = 862001,

  // ------------------------ User (863xxx)

  /// 用户名不合法
  kJMSGErrorSDKParamUsernameInvalid = 863001,
  /// 用户密码不合法
  kJMSGErrorSDKParamPasswordInvalid = 863002,
  /// 用户未登录
  kJMSGErrorSDKUserNotLogin = 863004,
  // 请求用户数量超出限制(目前单次最大请求500个)
  kJMSGErrorSDKUserNumberOverflow = 863005,
  // 用户已登录
  kJMSGErrorSDKUserInvalidState = 863006,
  // 用户正在退出的过程中
  kJMSGErrorSDKUserLogoutingState = 863007,
  // 添加好友失败
  kJMSGErrorSDKUserAddFriendFailState = 863008,
  // 删除好友失败
  kJMSGErrorSDKUserDeleteFriendFailState = 863009,
  
  // ------------------------ Media Resource (864xxx)

  /// 这不是一条媒体消息
  kJMSGErrorSDKNotMediaMessage = 864001,
  /// 下载媒体资源路径或者数据意外丢失
  kJMSGErrorSDKMediaResourceMissing = 864002,
  /// 媒体CRC码无效
  kJMSGErrorSDKMediaCrcCodeIllegal = 864003,
  /// 媒体CRC校验失败
  kJMSGErrorSDKMediaCrcVerifyFailed = 864004,
  /// 上传媒体文件时, 发现文件不存在
  kJMSGErrorSDKMediaUploadEmptyFile = 864005,
  /// 媒体HASH码无效
  kJMSGErrorSDKMediaHashCodeIllegal = 864006,
  /// 媒体HASH校验失败
  kJMSGErrorSDKMediaHashVerifyFailed = 864007,
  /// 这条消息不支持转发
  kJMSGErrorSDKMessageNotSupportForward = 864008,
  
  // ------------------------ Message (865xxx)

  /// 无效的消息内容
  kJMSGErrorSDKParamContentInvalid = 865001,
  /// 空消息
  kJMSGErrorSDKParamMessageNil = 865002,
  /// 消息不符合发送的基本条件检查
  kJMSGErrorSDKMessageNotPrepared = 865003,
  /// 你不是群组成员
  kJMSGErrorSDKMessageNotInGroup = 865004,
  /// 非法的 JSON 格式, 无法解析 Message JSON Protocol
  kJMSGErrorSDKMessageProtocolInvalidJsonFormat = 865005,
  /// 消息协议格式不正确, 可能缺少了字段
  kJMSGErrorSDKMessageProtocolLackFields = 865006,
  /// 消息协议格式不正确, 字段值非法
  kJMSGErrorSDKMessageProtocolInvalidFieldValue = 865007,
  /// 本地消息协议需要升级(收到新版本)
  kJMSGErrorSDKMessageProtocolUpgradeNeeded = 865008,
  /// 收到不支持消息内容类型(建议升级)
  kJMSGErrorSDKMessageProtocolContentTypeNotSupport = 865009,


  // ------------------------ Conversation (866xxx)

  /// 未知的会话类型
  kJMSGErrorSDKParamConversationTypeUnknown = 866001,
  /// 会话 username 无效
  kJMSGErrorSDKParamConversationUsernameInvalid = 866002,
  /// 会话 groupId 无效
  kJMSGErrorSDKParamConversationGroupIdInvalid = 866003,
  /// 会话没有找到
  kJMSGErrorSDKparamConversationNotFound = 866004,
  /// 会话头像没找到
  kJMSGErrorSDKConversationAvatarNotFound = 866005,

  // ------------------------ Group (867xxx)

  /// groupId 无效
  kJMSGErrorSDKParamGroupGroupIdInvalid = 867001,
  /// group 相关字段无效
  kJMSGErrorSDKParamGroupGroupInfoInvalid = 867002,

  // ------------------------ ChatRoom (868xxx)
  
  /// ChatRoom 不支持
  kJMSGErrorSDKChatRoomNotSupport = 868001,
  /// ChatRoom 不存在
  kJMSGErrorSDKChatRoomNotExist   = 868002,
  
  /// unknown
  kJMSGErrorSDKUnknownError = 869999,
};

/*!
 * @abstract SDK依赖的内部 HTTP 服务返回的错误码。
 *
 * @discussion 这些错误码也会直接通过 SDK API 返回给应用层。
 */
typedef NS_ENUM(NSUInteger, JMSGHttpErrorCode) {
  /// 服务器端内部错误
  kJMSGErrorHttpServerInternal = 898000,
  /// 注册用户已经存在 (403)
  kJMSGErrorHttpUserExist = 898001,
  /// 用户不存在 (403)
  kJMSGErrorHttpUserNotExist = 898002,
  /// 参数无效 (400)
  kJMSGErrorHttpPrameterInvalid = 898003,
  /// 密码错误 (403)
  kJMSGErrorHttpPasswordError = 898004,
  /// 内部UID 无效 (403)
  kJMSGErrorHttpUidInvalid = 898005,
  /// Gid不存在 (403)
  kJMSGErrorHttpGroupNotExist = 898006,
  /// Http 请求没有验证信息
  kJMSGErrorHttpMissingAuthenInfo = 898007,
  /// Http 请求验证失败
  kJMSGErrorHttpAuthenticationFailed = 898008,
  /// Appkey 不存在
  kJMSGErrorHttpAppkeyNotExist = 898009,
  /// Http 请求 token 过期
  kJMSGErrorHttpTokenExpired = 898010,
  /// 服务器端响应超时
  kJMSGErrorHttpServerResponseTimeout = 898030,
};

/*!
 * @abstract SDK依赖的内部 TCP 服务返回的错误码
 *
 * @discussion 这些错误码也会直接通过 SDK API 返回给应用层。
 */
typedef NS_ENUM(NSUInteger, JMSGTcpErrorCode) {
  /// appKey 未被注册
  kJMSGErrorTcpAppkeyNotRegistered = 800003,
  /// 服务器端内部错误
  kJMSGErrorTcpServerInternalError = 800009,
  /// 用户在登出状态
  kJMSGErrorTcpUserLogoutState = 800012,
  /// 用户在离线状态
  kJMSGErrorTcpUserOfflineState = 800013,
  /// 发起请求的用户设备不匹配
  kJMSGErrorTcpUserDeviceNotMatch = 800016,
  /// 用户未注册
  kJMSGErrorTcpUserNotRegistered = 801003,
  /// 用户密码错误
  kJMSGErrorTcpUserPasswordError = 801004,
  /// 多通道同时登录错误,登录失败
  kJMSGErrorTcpLoginMultiChannelError = 801007,
  /// 目标用户不存在
  kJMSGErrorTcpTargetUserNotExist = 803003,
  /// 目标群组不存在
  kJMSGErrorTcpTargetGroupNotExist = 803004,
  /// 用户不在群组里
  kJMSGErrorTcpUserNotInGroup = 803005,
  /// 用户在黒名单里
  kJMSGErrorTcpUserInBlacklist = 803008,
  /// 内容不合法
  kJMSGErrorTcpContentIsIllegal = 803009,
  /// 发送消息失败,请求用户被禁言
  kJMSGErrorTcpUserBannedSendMessage = 803012,
  /// 群组成员列表为空
  kJMSGErrorTcpGroupMembersEmpty = 810002,
  /// 群组成员重复
  kJMSGErrorTcpGroupMembersDuplicated = 810007,
};


///----------------------------------------------------
/// @name Global keys 全局静态变量定义
///----------------------------------------------------

// General key

static NSString *const KEY_APP_KEY = @"appkey";


// User

static NSString *const KEY_USERNAME = @"username";
static NSString *const KEY_PASSWORD = @"password";

static NSString *const KEY_NEW_PASSWORD = @"new_password";
static NSString *const KEY_OLD_PASSWORD = @"old_password";

static NSString *const KEY_NICKNAME = @"nickname";  //昵称
static NSString *const KEY_AVATAR = @"avatar";      //头像
static NSString *const KEY_GENDER = @"gender";      //性别
static NSString *const KEY_BIRTHDAY = @"birthday";  //生日
static NSString *const KEY_REGION = @"region";      //区域
static NSString *const KEY_SIGNATURE = @"signature";//签名
static NSString *const KEY_ADDRESS = @"address";    //地址
static NSString *const KEY_STAR = @"star";




#endif