NTESCustomAttachmentDecoder.m 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. //
  2. // NTESCustomAttachmentDecoder.m
  3. // NIM
  4. //
  5. // Created by amao on 7/2/15.
  6. // Copyright (c) 2015 Netease. All rights reserved.
  7. //
  8. #import "NTESCustomAttachmentDecoder.h"
  9. #import "NTESCustomAttachmentDefines.h"
  10. #import "NTESJanKenPonAttachment.h"
  11. #import "NTESSnapchatAttachment.h"
  12. #import "NTESChartletAttachment.h"
  13. #import "NTESWhiteboardAttachment.h"
  14. #import "NTESRedPacketAttachment.h"
  15. #import "NTESRedPacketTipAttachment.h"
  16. #import "NSDictionary+NTESJson.h"
  17. #import "NTESSessionUtil.h"
  18. @implementation NTESCustomAttachmentDecoder
  19. - (id<NIMCustomAttachment>)decodeAttachment:(NSString *)content
  20. {
  21. id<NIMCustomAttachment> attachment = nil;
  22. NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
  23. if (data) {
  24. NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data
  25. options:0
  26. error:nil];
  27. if ([dict isKindOfClass:[NSDictionary class]])
  28. {
  29. NSInteger type = [dict jsonInteger:CMType];
  30. NSDictionary *data = [dict jsonDict:CMData];
  31. switch (type) {
  32. case CustomMessageTypeJanKenPon:
  33. {
  34. attachment = [[NTESJanKenPonAttachment alloc] init];
  35. ((NTESJanKenPonAttachment *)attachment).value = [data jsonInteger:CMValue];
  36. }
  37. break;
  38. case CustomMessageTypeSnapchat:
  39. {
  40. attachment = [[NTESSnapchatAttachment alloc] init];
  41. ((NTESSnapchatAttachment *)attachment).md5 = [data jsonString:CMMD5];
  42. ((NTESSnapchatAttachment *)attachment).url = [data jsonString:CMURL];
  43. ((NTESSnapchatAttachment *)attachment).isFired = [data jsonBool:CMFIRE];
  44. }
  45. break;
  46. case CustomMessageTypeChartlet:
  47. {
  48. attachment = [[NTESChartletAttachment alloc] init];
  49. ((NTESChartletAttachment *)attachment).chartletCatalog = [data jsonString:CMCatalog];
  50. ((NTESChartletAttachment *)attachment).chartletId = [data jsonString:CMChartlet];
  51. }
  52. break;
  53. case CustomMessageTypeWhiteboard:
  54. {
  55. attachment = [[NTESWhiteboardAttachment alloc] init];
  56. ((NTESWhiteboardAttachment *)attachment).flag = [data jsonInteger:CMFlag];
  57. }
  58. break;
  59. case CustomMessageTypeRedPacket:
  60. {
  61. attachment = [[NTESRedPacketAttachment alloc] init];
  62. ((NTESRedPacketAttachment *)attachment).title = [data jsonString:CMRedPacketTitle];
  63. ((NTESRedPacketAttachment *)attachment).content = [data jsonString:CMRedPacketContent];
  64. ((NTESRedPacketAttachment *)attachment).redPacketId = [data jsonString:CMRedPacketId];
  65. }
  66. break;
  67. case CustomMessageTypeRedPacketTip:
  68. {
  69. attachment = [[NTESRedPacketTipAttachment alloc] init];
  70. ((NTESRedPacketTipAttachment *)attachment).sendPacketId = [data jsonString:CMRedPacketSendId];
  71. ((NTESRedPacketTipAttachment *)attachment).packetId = [data jsonString:CMRedPacketId];
  72. ((NTESRedPacketTipAttachment *)attachment).isGetDone = [data jsonString:CMRedPacketDone];
  73. ((NTESRedPacketTipAttachment *)attachment).openPacketId = [data jsonString:CMRedPacketOpenId];
  74. }
  75. break;
  76. default:
  77. break;
  78. }
  79. attachment = [self checkAttachment:attachment] ? attachment : nil;
  80. }
  81. }
  82. return attachment;
  83. }
  84. - (BOOL)checkAttachment:(id<NIMCustomAttachment>)attachment{
  85. BOOL check = NO;
  86. if ([attachment isKindOfClass:[NTESJanKenPonAttachment class]])
  87. {
  88. NSInteger value = [((NTESJanKenPonAttachment *)attachment) value];
  89. check = (value>=CustomJanKenPonValueKen && value<=CustomJanKenPonValuePon) ? YES : NO;
  90. }
  91. else if ([attachment isKindOfClass:[NTESSnapchatAttachment class]])
  92. {
  93. check = YES;
  94. }
  95. else if ([attachment isKindOfClass:[NTESChartletAttachment class]])
  96. {
  97. NSString *chartletCatalog = ((NTESChartletAttachment *)attachment).chartletCatalog;
  98. NSString *chartletId =((NTESChartletAttachment *)attachment).chartletId;
  99. check = chartletCatalog.length&&chartletId.length ? YES : NO;
  100. }
  101. else if ([attachment isKindOfClass:[NTESWhiteboardAttachment class]])
  102. {
  103. NSInteger flag = [((NTESWhiteboardAttachment *)attachment) flag];
  104. check = ((flag >= CustomWhiteboardFlagInvite) && (flag <= CustomWhiteboardFlagClose)) ? YES : NO;
  105. }
  106. else if([attachment isKindOfClass:[NTESRedPacketAttachment class]] || [attachment isKindOfClass:[NTESRedPacketTipAttachment class]])
  107. {
  108. check = YES;
  109. }
  110. return check;
  111. }
  112. @end