JXXMPP.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. //
  2. // JXXMPPManager.h
  3. // WeChat
  4. //
  5. // Created by Reese on 13-8-10.
  6. // Copyright (c) 2013年 Reese. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import <QuartzCore/QuartzCore.h>
  10. #import "JXRoomObject.h"
  11. #import "FMDatabaseQueue.h"
  12. #define login_status_yes 1 //登录成功
  13. #define login_status_ing 0 //登录中
  14. #define login_status_no -1 //登录失败
  15. // 消息密令码
  16. enum kWCCommandType {
  17. kWCCommandTypeUnknow = 0, //无效
  18. kWCCommandTypeHandShakeReq = 1, // 握手请求
  19. kWCCommandTypeHandShakeResp = 2, // 握手响应
  20. kWCCommandTypeAuthReq = 5, // 登录消息请求
  21. kWCCommandTypeAuthResp = 6, // 登录消息结果
  22. kWCCommandTypeClose = 7, // 关闭请求
  23. kWCCommandTypeChat = 10, // 聊天请求
  24. kWCCommandTypeReceipt = 11, // 消息回执
  25. kWCCommandTypeRecordReq = 12, // 拉取漫游消息记录
  26. kWCCommandTypeRecordResp = 13, // 拉取漫游消息结果
  27. kWCCommandTypePullMessageReq = 14, // 批量拉取群组离线消息
  28. kWCCommandTypePullMessageResp = 15, // 批量拉取群组离线消息结果
  29. kWCCommandTypeError = -1, // 失败错误
  30. kWCCommandTypeLoginConflict = -3, // 登录被挤下线
  31. kWCCommandTypeJoinGroupReq = 20, // 加入群组
  32. kWCCommandTypeExitGroupReq = 21, // 退出群组
  33. kWCCommandTypeRoomRequestResult = 22, // 群组请求结果
  34. kWCCommandTypePingReq = 99, // 心跳消息
  35. kWCCommandTypeTypeSuccess = 100, // 成功请求
  36. };
  37. @class JXMessageObject;
  38. @class JXRoomPool;
  39. @class XMPPMessage,XMPPRoster,XMPPRosterCoreDataStorage,FMDatabase,emojiViewController;
  40. @interface JXXMPP : NSObject <UIApplicationDelegate>
  41. {
  42. XMPPRoster *xmppRoster;
  43. XMPPRosterCoreDataStorage *xmppRosterStorage;
  44. int pingTimeoutCount;
  45. NSString *password;
  46. BOOL allowSelfSignedCertificates;
  47. BOOL allowSSLHostNameMismatch;
  48. BOOL isXmppConnected;
  49. FMDatabase* _db;
  50. FMDatabaseQueue* _dbQueue;
  51. NSString* _userIdOld;
  52. }
  53. - (NSManagedObjectContext *)managedObjectContext_roster;
  54. @property (readonly, nonatomic) NSManagedObjectContext *managedObjectContext;
  55. @property (readonly, nonatomic) NSManagedObjectModel *managedObjectModel;
  56. @property (readonly, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
  57. @property (assign, nonatomic) int isLogined;
  58. @property (strong, nonatomic) JXRoomPool* roomPool;
  59. @property (strong, nonatomic) NSMutableDictionary * poolSend;
  60. @property (strong, nonatomic) NSMutableArray * poolSendRead;
  61. @property (strong, nonatomic) NSMutableSet * blackList;
  62. @property (strong, nonatomic) NSMutableArray * chatingUserIds;
  63. //@property (assign, nonatomic) BOOL isEncryptAll;
  64. @property (assign, nonatomic) int newMsgAfterLogin;//刚连线时,收到的新消息总数量(刚连线时,此值为0,在一定时间内收完所有新消息后,才发通知更新界面,避免重复刷新UI;之后有一条消息,就累加1)
  65. @property (assign, nonatomic) NSTimeInterval lastNewMsgTime;//最近一条新消息的时间
  66. @property (nonatomic, assign) BOOL isReconnect;
  67. @property (nonatomic, strong) NSTimer *reconnectTimer;
  68. // 是否弹登录状态提示
  69. @property (nonatomic, assign) BOOL isShowLoginChange;
  70. // 是否关闭流
  71. @property (nonatomic, assign) BOOL isCloseStream;
  72. // XMPP密码是否错误
  73. @property (nonatomic, assign) BOOL isPasswordError;
  74. // 是否是消息记录迁移,如果在迁移就暂时不跳转到登录页面
  75. @property (nonatomic, assign) BOOL isChatLogMove;
  76. @property (nonatomic, strong) dispatch_source_t msgTimer;
  77. @property (nonatomic, assign) float lastMsgTime;
  78. /*
  79. 原理就是2秒之内没有新消息到达,则认为收取完毕,一次性刷新
  80. 连线收消息时,批量收消息,刷新界面只刷一次:
  81. 1.声明2个变量:新消息数量A(刚连线时,此值为0;收完所有消息并刷新后再有新消息,此值累加);最近一条消息的收到时间B
  82. 2.收到消息时,A=0,则B=Now,并在2秒后执行C函数;A>0,则A++,并刷新单条消息
  83. 3.C判断Now-B>2,则A=1,并刷新全部消息;
  84. */
  85. //- (void)saveContext;
  86. - (NSURL *)applicationDocumentsDirectory;
  87. - (BOOL)connect;
  88. - (void)disconnect;
  89. //- (FMDatabase*)getDatabase;
  90. - (FMDatabase*)openUserDb:(NSString*)userId;
  91. +(JXXMPP*)sharedInstance;
  92. #pragma mark -------配置XML流-----------
  93. - (void)setupStream;
  94. - (void)teardownStream;
  95. // 关闭流
  96. -(void)applicationWillTerminate;
  97. #pragma mark ----------收发信息------------
  98. - (void)goOnline;
  99. - (void)goOffline;
  100. - (void)login;
  101. - (void)logout;
  102. - (void)sendMessageInvite:(JXMessageObject *)msg;
  103. - (void)sendMessage:(JXMessageObject*)msg roomName:(NSString*)roomName;
  104. //临时发消息
  105. - (void)sendMessage:(JXMessageObject*)msg roomName:(NSString*)roomName tempChate:(NSString*)tempChate;
  106. #pragma mark ------------多点登录转发发消息------------
  107. - (void)relaySendMessage:(JXMessageObject*)msg relayUserId:(NSString *)relayUserId roomName:(NSString*)roomName;
  108. -(void)notifyNewMsg;
  109. #pragma mark ---------文件传输-----------
  110. //-(void)sendFile:(NSData*)aData toJID:(XMPPJID*)aJID;
  111. // XMPP没连上时弹框询问是否重连
  112. - (void) showXmppOfflineAlert;
  113. -(BOOL)deleteMessageWithUserId:(NSString *)userId messageId:(NSString *)msgId;//删除一条聊天记录
  114. -(JXMessageObject*)findMessageWithUserId:(NSString *)userId messageId:(NSString *)msgId;//搜索一条记录
  115. #pragma mark ------------新版socket------------
  116. // 加入群组
  117. - (void)addRoomWithJid:(NSString *)jid delegate:(JXRoomObject *)delegate;
  118. // 退出群组
  119. - (void)exitRoomWithJid:(NSString *)jid delegate:(JXRoomObject *)delegate;
  120. // 获取群离线消息
  121. - (void)pullBatchGroupMessageReqWithJidListArray:(NSMutableArray *)listArr;
  122. @end