QYCustomSessionViewController.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. //
  2. // QYCustomSessionViewController.h
  3. // QYSDK
  4. //
  5. // Created by Netease on 2018/11/23.
  6. // Copyright © 2018 Netease. All rights reserved.
  7. //
  8. #import "QYSessionViewController.h"
  9. @protocol QYCustomMessageDelegate;
  10. @protocol QYCustomContentViewDelegate;
  11. /**
  12. * 错误码
  13. */
  14. typedef NS_ENUM(NSInteger, QYCustomMessageErrorCode) {
  15. QYCustomMessageErrorCodeUnknown = 0, //未知错误
  16. QYCustomMessageErrorCodeInvalidParam = 1, //错误参数
  17. QYCustomMessageErrorCodeInvalidMessage = 2, //无效消息体
  18. QYCustomMessageErrorCodeSQLFailed = 3, //SQL语句执行失败
  19. };
  20. /**
  21. * 消息持久化结果block
  22. * @param error 错误信息
  23. */
  24. typedef void(^QYCustomMessageCompletion)(NSError *error);
  25. /**
  26. * QYSessionViewController的分类,扩展自定义消息相关接口
  27. */
  28. @interface QYSessionViewController (CustomMessage)
  29. /**
  30. * 注册message-model-contentView的映射关系(必须)
  31. * @discussion 若要使用自定义消息,必须调用此方法设置映射关系!
  32. * @param messageClass 消息类
  33. * @param modelClass 消息对应的数据模型类
  34. * @param contentViewClass 消息对应的视图
  35. */
  36. - (void)registerCustomMessageClass:(Class)messageClass
  37. modelClass:(Class)modelClass
  38. contentViewClass:(Class)contentViewClass;
  39. /**
  40. * 设置消息事件委托对象
  41. * @param delegate 被委托对象
  42. */
  43. - (void)addCustomMessageDelegate:(id<QYCustomMessageDelegate>)delegate;
  44. /**
  45. * 设置消息视图委托对象
  46. * @param delegate 被委托对象
  47. */
  48. - (void)addCustomContentViewDelegate:(id<QYCustomContentViewDelegate>)delegate;
  49. /**
  50. * 清除消息事件委托对象
  51. * @param delegate 被清除的委托对象
  52. */
  53. - (void)removeCustomMessageDelegate:(id<QYCustomMessageDelegate>)delegate;
  54. /**
  55. * 清除消息视图委托对象
  56. * @param delegate 被清除的委托对象
  57. */
  58. - (void)removeCustomContentViewDelegate:(id<QYCustomContentViewDelegate>)delegate;
  59. /**
  60. * 从尾部追加消息
  61. * @param message 消息对象
  62. * @param save 是否需要持久化消息数据
  63. * @param reload 是否需要刷新界面
  64. * @param completion 消息持久化结果回调
  65. */
  66. - (void)addCustomMessage:(QYCustomMessage *)message
  67. needSaveData:(BOOL)save
  68. needReloadView:(BOOL)reload
  69. completion:(QYCustomMessageCompletion)completion;
  70. /**
  71. * 从头部插入消息
  72. * @discussion 插入消息不支持持久化数据
  73. * @param message 消息对象
  74. */
  75. - (void)insertCustomMessage:(QYCustomMessage *)message;
  76. /**
  77. * 从中间插入消息
  78. * @discussion 插入消息不支持持久化数据
  79. * @param message 消息对象
  80. * @param index 插入位置
  81. */
  82. - (void)insertCustomMessage:(QYCustomMessage *)message index:(NSInteger)index;
  83. /**
  84. * 刷新消息
  85. * @param message 消息对象
  86. * @param save 是否需要持久化消息数据
  87. * @param reload 是否需要刷新界面
  88. * @param completion 消息持久化结果回调
  89. */
  90. - (void)updateCustomMessage:(QYCustomMessage *)message
  91. needSaveData:(BOOL)save
  92. needReloadView:(BOOL)reload
  93. completion:(QYCustomMessageCompletion)completion;
  94. /**
  95. * 删除消息
  96. * @param message 消息对象
  97. * @param save 删除记录是否同步至数据库
  98. * @param reload 是否需要刷新界面
  99. */
  100. - (void)deleteCustomMessage:(QYCustomMessage *)message
  101. needSaveData:(BOOL)save
  102. needReloadView:(BOOL)reload;
  103. /**
  104. * 从数据库中取出消息
  105. * @param messageId 消息的唯一ID
  106. * @return 取出的消息体
  107. */
  108. - (QYCustomMessage *)fetchCustomMessageFromDatabaseForMessageId:(NSString *)messageId;
  109. /**
  110. * 从当前table的dataSource中取出消息
  111. * @param messageId 消息的唯一ID
  112. * @return 取出的消息体
  113. */
  114. - (QYCustomMessage *)fetchCustomMessageFromDataSourceForMessageId:(NSString *)messageId;
  115. @end