JXRoomPool.m 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. //
  2. // JXRoomPool.m
  3. // shiku_im
  4. //
  5. // Created by flyeagleTang on 14-4-21.
  6. // Copyright (c) 2014年 Reese. All rights reserved.
  7. //
  8. #import "JXRoomPool.h"
  9. #import "JXRoomObject.h"
  10. #import "JXUserObject.h"
  11. #import "JXGroupViewController.h"
  12. @implementation JXRoomPool
  13. -(id)init{
  14. self = [super init];
  15. _pool = [[NSMutableDictionary alloc] init];
  16. [g_notify addObserver:self selector:@selector(onQuitRoom:) name:kQuitRoomNotifaction object:nil];
  17. return self;
  18. }
  19. -(void)dealloc{
  20. // NSLog(@"JXRoomPool.dealloc");
  21. [g_notify removeObserver:self name:kQuitRoomNotifaction object:nil];
  22. [self deleteAll];
  23. // [_storage release];
  24. // [_pool release];
  25. // [super dealloc];
  26. }
  27. -(JXRoomObject*)createRoom:(NSString*)jid title:(NSString*)title{
  28. if(jid==nil)
  29. return nil;
  30. JXRoomObject* room = [[JXRoomObject alloc] init];
  31. room.roomJid = jid;
  32. room.roomTitle = title;
  33. room.storage = _storage;
  34. room.nickName = MY_USER_ID;
  35. [room createRoom];
  36. [_pool setObject:room forKey:room.roomJid];
  37. // [room release];
  38. return room;
  39. }
  40. -(JXRoomObject*)joinRoom:(NSString*)jid title:(NSString*)title lastDate:(NSDate *)lastDate isNew:(bool)isNew{
  41. if([_pool objectForKey:jid])
  42. return [_pool objectForKey:jid];
  43. if(jid==nil)
  44. return nil;
  45. JXRoomObject* room = [[JXRoomObject alloc] init];
  46. room.roomJid = jid;
  47. room.roomTitle = title;
  48. room.storage = _storage;
  49. room.nickName = MY_USER_ID;
  50. room.lastDate = lastDate;
  51. [room joinRoom:isNew];
  52. [_pool setObject:room forKey:room.roomJid];
  53. // [room release];
  54. return room;
  55. }
  56. -(void)setRoomPool:(NSString*)jid title:(NSString*)title{
  57. if([_pool objectForKey:jid])
  58. return;
  59. if(jid==nil)
  60. return;
  61. JXRoomObject* room = [[JXRoomObject alloc] init];
  62. room.roomJid = jid;
  63. room.roomTitle = title;
  64. room.storage = _storage;
  65. room.nickName = MY_USER_ID;
  66. room.isConnected = YES;
  67. [_pool setObject:room forKey:room.roomJid];
  68. }
  69. -(void)connectRoom{
  70. for (int i = 0; i < [[_pool allValues] count]; i++) {
  71. JXRoomObject * obj = [_pool allValues][i];
  72. if (!obj.isConnected) {
  73. [obj reconnect];
  74. }
  75. }
  76. // g_App.groupVC.sel = -1;
  77. }
  78. -(void)deleteAll{
  79. for(NSInteger i=[_pool count]-1;i>=0;i--){
  80. JXRoomObject* p = (JXRoomObject*)[_pool.allValues objectAtIndex:i];
  81. [p leave];
  82. p = nil;
  83. }
  84. [_pool removeAllObjects];
  85. }
  86. -(void)createAll{
  87. #if IS_AUTO_JOIN_ROOM
  88. #else
  89. NSMutableArray* array = [[JXUserObject sharedInstance] fetchAllRoomsFromLocal];
  90. for(int i=0;i<[array count];i++){
  91. JXUserObject *room = [array objectAtIndex:i];
  92. if ([room.groupStatus intValue] == 0) {
  93. [self joinRoom:room.userId title:room.userNickname lastDate:nil isNew:NO];
  94. }
  95. }
  96. #endif
  97. }
  98. -(void)reconnectAll{
  99. for(int i=0;i<[_pool count];i++){
  100. JXRoomObject* p = (JXRoomObject*)[_pool.allValues objectAtIndex:i];
  101. [p reconnect];
  102. p = nil;
  103. }
  104. }
  105. -(void)onQuitRoom:(NSNotification *)notifacation//退出房间
  106. {
  107. JXRoomObject* p = (JXRoomObject *)notifacation.object;
  108. for(NSInteger i=[_pool count]-1;i>=0;i--){
  109. if(p == [_pool.allValues objectAtIndex:i]){
  110. [_pool removeObjectForKey:p.roomJid];
  111. break;
  112. }
  113. }
  114. p = nil;
  115. }
  116. -(void)delRoom:(NSString*)jid{
  117. if([_pool objectForKey:jid]){
  118. JXRoomObject* p = [_pool objectForKey:jid];
  119. [p leave];
  120. [_pool removeObjectForKey:jid];
  121. p = nil;
  122. }
  123. }
  124. -(JXRoomObject*)getRoom:(NSString*)jid{
  125. return [_pool objectForKey:jid];
  126. }
  127. @end