JXRoomObject.m 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. //
  2. // JXRoomObject.m
  3. // BaseProject
  4. //
  5. // Created by Huan Cho on 13-8-3.
  6. // Copyright (c) 2013年 ch. All rights reserved.
  7. //
  8. #import "JXRoomObject.h"
  9. //#import "Statics.h"
  10. //#import "KKMessageCell.h"
  11. #import "JXMessageObject.h"
  12. #import "JXXMPP.h"
  13. #import "JXChatViewController.h"
  14. #import "AppDelegate.h"
  15. #import "JXLabel.h"
  16. #import "JXImageView.h"
  17. //#import "JXCell.h"
  18. #import "roomData.h"
  19. #define padding 20
  20. @implementation JXRoomObject
  21. MJCodingImplementation
  22. @synthesize roomName,roomTitle,storage,nickName,fullJid,isConnected,delegate,roomJid,roomId;
  23. #pragma mark - life circle
  24. -(id)init{
  25. self = [super init];
  26. _isNew = NO;
  27. isConnected = NO;
  28. delegate = nil;
  29. return self;
  30. }
  31. - (void)dealloc {
  32. // NSLog(@"JXRoomObject.dealloc");
  33. self.fullJid = nil;
  34. self.roomName = nil;
  35. self.roomTitle = nil;
  36. self.storage = nil;
  37. self.delegate = nil;
  38. self.roomJid = nil;
  39. self.roomId = nil;
  40. // [_xmppRoom deactivate];
  41. // [_xmppRoom release];
  42. // [super dealloc];
  43. }
  44. //成员加入群组
  45. -(void)joinRoom:(bool)isNew{
  46. // NSXMLElement *p = [NSXMLElement elementWithName:@"history"];
  47. // int n = 0;
  48. // if(g_server.lastOfflineTime>0&&!isNew){
  49. // NSArray *arr = [[JXMessageObject sharedInstance] fetchMessageListWithUser:self.roomJid byAllNum:0 pageCount:20 startTime:[NSDate dateWithTimeIntervalSince1970:0]];
  50. // // 最后一条消息
  51. // JXMessageObject *lastMsg = nil;
  52. // for (NSInteger i = 0; i < arr.count; i ++) {
  53. // JXMessageObject *firstMsg = arr[i];
  54. // if ([firstMsg.type integerValue] != kWCMessageTypeRemind) {
  55. // lastMsg = firstMsg;
  56. // break;
  57. // }
  58. // }
  59. // if (lastMsg.timeSend) {
  60. //
  61. // n = [[NSDate date] timeIntervalSince1970]-[lastMsg.timeSend timeIntervalSince1970] + 30;
  62. // }else {
  63. //
  64. // n = [[NSDate date] timeIntervalSince1970]-g_server.lastOfflineTime;
  65. // }
  66. // }
  67. // [p addAttributeWithName:@"seconds" stringValue:[NSString stringWithFormat:@"%d",n]];
  68. _isNew = NO;
  69. self.fullJid = [NSString stringWithFormat:@"%@",self.roomJid];
  70. // NSLog(@"xmpp -- fullJid-%@, n-%d",self.fullJid,n);
  71. // _xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:storage jid:[XMPPJID jidWithString:self.fullJid] dispatchQueue:dispatch_get_global_queue(1, 0)];
  72. // [_xmppRoom activate:[JXXMPP sharedInstance].stream];
  73. // [_xmppRoom joinRoomUsingNickname:nickName history:p];
  74. // [_xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()];
  75. [g_xmpp addRoomWithJid:self.fullJid delegate:self];
  76. // p = nil;
  77. }
  78. //群主创建一个群组
  79. -(void)createRoom{
  80. /*
  81. NSXMLElement *p = [NSXMLElement elementWithName:@"history"];
  82. int n = 0;
  83. if(g_server.lastOfflineTime>0)
  84. n = [[NSDate date] timeIntervalSince1970]-g_server.lastOfflineTime;
  85. [p addAttributeWithName:@"seconds" stringValue:[NSString stringWithFormat:@"%d",n]];
  86. */
  87. _isNew = YES;
  88. self.fullJid = [NSString stringWithFormat:@"%@",self.roomJid];
  89. // _xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:storage jid:[XMPPJID jidWithString:self.fullJid] dispatchQueue:dispatch_get_main_queue()];
  90. // [_xmppRoom activate:[JXXMPP sharedInstance].stream];
  91. // [_xmppRoom joinRoomUsingNickname:nickName history:nil];
  92. // [_xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()];
  93. //
  94. // [self configNewRoom];
  95. [g_xmpp addRoomWithJid:self.fullJid delegate:self];
  96. // isConnected = YES;
  97. // if(delegate != nil && [delegate respondsToSelector:@selector(xmppRoomDidCreate:)])
  98. // [delegate xmppRoomDidCreate:_xmppRoom];
  99. }
  100. //- (void)xmppRoom:(XMPPRoom *)sender didFetchConfigurationForm:(DDXMLElement *)configForm
  101. //{
  102. //// NSLog(@"config : %@", configForm);
  103. // NSXMLElement *newConfig = [configForm copy];
  104. // NSArray* fields = [newConfig elementsForName:@"field"];
  105. // for (NSXMLElement *field in fields) {
  106. // NSString *var = [field attributeStringValueForName:@"var"];
  107. // if ([var isEqualToString:@"muc#roomconfig_persistentroom"]) {
  108. // [field removeChildAtIndex:0];
  109. // [field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
  110. // }
  111. // }
  112. // [sender configureRoomUsingOptions:newConfig];
  113. //}
  114. #pragma mark - XMPPRoom delegate
  115. //创建结果
  116. -(void)xmppRoomDidCreate{
  117. // NSLog(@"xmppRoomDidCreate");
  118. isConnected = YES;
  119. // [_xmppRoom changeRoomSubject:self.roomTitle];
  120. if(delegate != nil && [delegate respondsToSelector:@selector(xmppRoomDidCreate)])
  121. [delegate xmppRoomDidCreate];
  122. }
  123. //是否已经加入房间
  124. -(void)xmppRoomDidJoin{
  125. if (isConnected) {
  126. return;
  127. }
  128. isConnected = YES;
  129. // NSLog(@"xmppRoomDidJoin");
  130. // [_xmppRoom chageNickname:@"fuck"];
  131. // [_xmppRoom changeRoomSubject:@"聊天室主题名"];
  132. // [_xmppRoom changeToMember:self.roomJid nickName:@"tjx"];
  133. // if(_isNew){
  134. // [self configNewRoom];
  135. // }
  136. // else{
  137. // [_xmppRoom configureRoomUsingOptions:nil];
  138. // [_xmppRoom fetchConfigurationForm];
  139. // }
  140. if(delegate != nil && [delegate respondsToSelector:@selector(xmppRoomDidJoin)])
  141. [delegate xmppRoomDidJoin];
  142. }
  143. //是否已经离开
  144. -(void)xmppRoomDidLeave{
  145. isConnected = NO;
  146. // NSLog(@"xmppRoomDidLeave");
  147. if(delegate != nil && [delegate respondsToSelector:@selector(xmppRoomDidLeave)])
  148. [delegate xmppRoomDidLeave];
  149. }
  150. //是否已经离开
  151. -(void)xmppRoomDidDestroy{
  152. isConnected = NO;
  153. // NSLog(@"xmppRoomDidDestroy");
  154. if(delegate != nil && [delegate respondsToSelector:@selector(xmppRoomDidDestroy)])
  155. [delegate xmppRoomDidDestroy];
  156. }
  157. //收到群聊消息
  158. //-(void)xmppRoom:(XMPPRoom *)sender didReceiveMessage:(XMPPMessage *)message fromOccupant:(XMPPJID *)occupantJID{
  159. // return;
  160. //}
  161. //房间人员加入
  162. //- (void)xmppRoom:(XMPPRoom *)sender occupantDidJoin:(XMPPJID *)occupantJID withPresence:(XMPPPresence *)presence{
  163. //// NSLog(@"occupantDidJoin");
  164. //// NSString *jid = occupantJID.user;
  165. //// NSString *domain = occupantJID.domain;
  166. //// NSString *resource = occupantJID.resource;
  167. // NSString *presenceType = [presence type];
  168. // NSString *userId = [sender myRoomJID].user;
  169. // NSString *presenceFromUser = [[presence from] user];
  170. //
  171. //// NSLog(@"occupantDidJoin----jid=%@,domain=%@,resource=%@,当前用户:%@ ,出席用户:%@,presenceType:%@",jid,domain,resource,userId,presenceFromUser,presenceType);
  172. //
  173. // if (![presenceFromUser isEqualToString:userId]) {
  174. // //对收到的用户的在线状态的判断在线状态
  175. //
  176. // //在线用户
  177. // if ([presenceType isEqualToString:@"available"]) {
  178. //// NSString *buddy = [NSString stringWithFormat:@"%@@%@", presenceFromUser, g_config.XMPPDomain];
  179. // // [chatDelegate newBuddyOnline:buddy];//用户列表委托
  180. // }
  181. //
  182. // //用户下线
  183. // else if ([presenceType isEqualToString:@"unavailable"]) {
  184. // // [chatDelegate buddyWentOffline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, OpenFireHostName]];//用户列表委托
  185. // }
  186. // }
  187. //}
  188. //房间人员离开
  189. //-(void)xmppRoom:(XMPPRoom *)sender occupantDidLeave:(XMPPJID *)occupantJID withPresence:(XMPPPresence *)presence{
  190. ///*
  191. // NSString *jid = occupantJID.user;
  192. // NSString *domain = occupantJID.domain;
  193. // NSString *resource = occupantJID.resource;
  194. // NSString *presenceType = [presence type];
  195. // NSString *userId = [sender myRoomJID].user;
  196. // NSString *presenceFromUser = [[presence from] user];
  197. // NSLog(@"occupantDidLeave----jid=%@,domain=%@,resource=%@,当前用户:%@ ,出席用户:%@,presenceType:%@",jid,domain,resource,userId,presenceFromUser,presenceType);*/
  198. //}
  199. //房间人员加入
  200. //-(void)xmppRoom:(XMPPRoom *)sender occupantDidUpdate:(XMPPJID *)occupantJID withPresence:(XMPPPresence *)presence{
  201. ///*
  202. // NSString *jid = occupantJID.user;
  203. // NSString *domain = occupantJID.domain;
  204. // NSString *resource = occupantJID.resource;
  205. // NSString *presenceType = [presence type];
  206. // NSString *userId = [sender myRoomJID].user;
  207. // NSString *presenceFromUser = [[presence from] user];
  208. // NSLog(@"occupantDidUpdate----jid=%@,domain=%@,resource=%@,当前用户:%@ ,出席用户:%@,presenceType:%@",jid,domain,resource,userId,presenceFromUser,presenceType);*/
  209. //}
  210. //- (void)xmppRoom:(XMPPRoom *)sender didFetchMembersList:(NSArray *)items{
  211. // NSLog(@"didFetchMembersList");
  212. //}
  213. //
  214. //- (void)xmppRoom:(XMPPRoom *)sender didFetchModeratorsList:(NSArray *)items{
  215. // NSLog(@"didFetchModeratorsList");
  216. //}
  217. //- (void)noSendHistory
  218. //{
  219. //// <presence
  220. //// from='hag66@shakespeare.lit/pda'
  221. //// to='darkcave@chat.shakespeare.lit/thirdwitch'>
  222. //// <x xmlns='http://jabber.org/protocol/muc'>
  223. //// <history since='1970-01-01T00:00:00Z'/>
  224. //// </x>
  225. //// </presence>
  226. //
  227. // XMPPPresence* y = [[XMPPPresence alloc] initWithType:@"" to:[XMPPJID jidWithString:self.fullJid]];
  228. // NSString *myJID = MY_USER_ID;
  229. // [y addAttributeWithName:@"from" stringValue:[NSString stringWithFormat:@"%@@%@",myJID,g_config.XMPPDomain]];
  230. // [y removeAttributeForName:@"type"];
  231. //
  232. // NSXMLElement *x = [NSXMLElement elementWithName:@"x" xmlns:@"http://jabber.org/protocol/muc"];
  233. // NSXMLElement *p = [NSXMLElement elementWithName:@"history"];
  234. // [p addAttributeWithName:@"maxchars" stringValue:@"0"];
  235. //
  236. // NSDate* d = [NSDate dateWithTimeIntervalSince1970:g_server.lastOfflineTime];
  237. // NSString* s = [TimeUtil formatDate:d format:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
  238. //// [p addAttributeWithName:@"since" stringValue:s];
  239. // d = nil;
  240. // s = nil;
  241. //
  242. // [x addChild:p];
  243. // [y addChild:x];
  244. // [[JXXMPP sharedInstance].stream sendElement:y];
  245. //// [y release];
  246. //}
  247. //-(void)configNewRoom{
  248. // NSXMLElement *x = [NSXMLElement elementWithName:@"x" xmlns:@"jabber:x:data"];
  249. // NSXMLElement *p;
  250. // p = [NSXMLElement elementWithName:@"field" ];
  251. // [p addAttributeWithName:@"var" stringValue:@"muc#roomconfig_persistentroom"];//永久房间
  252. // [p addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
  253. // [x addChild:p];
  254. //
  255. // p = [NSXMLElement elementWithName:@"field" ];
  256. // [p addAttributeWithName:@"var" stringValue:@"muc#roomconfig_maxusers"];//最大用户
  257. // [p addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1000"]];
  258. // [x addChild:p];
  259. //
  260. // p = [NSXMLElement elementWithName:@"field" ];
  261. // [p addAttributeWithName:@"var" stringValue:@"muc#roomconfig_changesubject"];//允许改变主题
  262. // [p addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
  263. // [x addChild:p];
  264. //
  265. // p = [NSXMLElement elementWithName:@"field" ];
  266. // [p addAttributeWithName:@"var" stringValue:@"muc#roomconfig_publicroom"];//公共房间
  267. // [p addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
  268. // [x addChild:p];
  269. //
  270. // p = [NSXMLElement elementWithName:@"field" ];
  271. // [p addAttributeWithName:@"var" stringValue:@"muc#roomconfig_allowinvites"];//允许邀请
  272. // [p addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
  273. // [x addChild:p];
  274. //
  275. // /*
  276. // p = [NSXMLElement elementWithName:@"field" ];
  277. // [p addAttributeWithName:@"var" stringValue:@"muc#roomconfig_roomname"];//房间名称
  278. // [p addChild:[NSXMLElement elementWithName:@"value" stringValue:self.roomTitle]];
  279. // [x addChild:p];
  280. //
  281. // p = [NSXMLElement elementWithName:@"field" ];
  282. // [p addAttributeWithName:@"var" stringValue:@"muc#roomconfig_enablelogging"];//允许登录对话
  283. // [p addChild:[NSXMLElement elementWithName:@"value" stringValue:@"0"]];
  284. // [x addChild:p];
  285. // */
  286. //
  287. // [_xmppRoom configureRoomUsingOptions:x];
  288. //}
  289. //-(void)reconnect{
  290. // if(!isConnected){
  291. // NSXMLElement *p = [NSXMLElement elementWithName:@"history"];
  292. // int n = 0;
  293. // if(g_server.lastOfflineTime>0){
  294. // n = [[NSDate date] timeIntervalSince1970]-g_server.lastOfflineTime;
  295. //
  296. // }
  297. // [p addAttributeWithName:@"seconds" stringValue:[NSString stringWithFormat:@"%d",n]];
  298. // [_xmppRoom joinRoomUsingNickname:nickName history:p];
  299. // }
  300. //
  301. //}
  302. //-(void)reconnect:(bool)isNew{
  303. // int n = 0;
  304. // if(!isNew&&!isConnected){
  305. //
  306. // NSXMLElement *p = [NSXMLElement elementWithName:@"history"];
  307. //
  308. // if(g_server.lastOfflineTime>0){
  309. // n = [[NSDate date] timeIntervalSince1970]-g_server.lastOfflineTime;
  310. //
  311. // }
  312. // [p addAttributeWithName:@"seconds" stringValue:[NSString stringWithFormat:@"%d",n]];
  313. // [_xmppRoom joinRoomUsingNickname:nickName history:p];
  314. // }
  315. //}
  316. //-(void)removeUser:(memberData*)user{
  317. // NSXMLElement* query = [NSXMLElement elementWithName:@"query" xmlns:@"http://jabber.org/protocol/muc#admin"];
  318. // NSXMLElement* sub = [NSXMLElement elementWithName:@"item" ];
  319. // [sub addAttributeWithName:@"nick" stringValue:[NSString stringWithFormat:@"%ld",user.userId]];
  320. // [sub addAttributeWithName:@"role" stringValue:@"none"];
  321. // [sub addChild:[NSXMLElement elementWithName:@"reason" stringValue:@"Avaunt, you cullion!"]];
  322. // [query addChild:sub];
  323. //
  324. // NSString* to = [NSString stringWithFormat:@"%@@muc.%@",roomJid,g_config.XMPPDomain];
  325. // XMPPIQ *iq = [XMPPIQ iqWithType:@"set" to:[XMPPJID jidWithString:to] elementID:nil child:query];
  326. // NSString* from = [NSString stringWithFormat:@"%@@%@",MY_USER_ID,g_config.XMPPDomain];
  327. // [iq addAttributeWithName:@"from" stringValue:from];
  328. // [iq addAttributeWithName:@"id" stringValue:@"kick1"];
  329. //
  330. // [[JXXMPP sharedInstance].stream sendElement:iq];
  331. //}
  332. -(void)insertRoom{//无用
  333. JXUserObject* user = [[JXUserObject alloc]init];
  334. user.userNickname = self.roomName;
  335. user.userId = self.roomJid;
  336. user.roomId = self.roomId;
  337. user.userDescription = self.roomTitle;
  338. [user insertRoom];
  339. // [user release];
  340. }
  341. -(void)leave{
  342. if(isConnected) {
  343. [g_xmpp exitRoomWithJid:self.fullJid delegate:self];
  344. }
  345. }
  346. // 群组请求结果
  347. - (void)roomRequestResultWithStatus:(int)status isExit:(BOOL)isExit {
  348. if (isExit) {
  349. if (status == 1) {
  350. isConnected = NO;
  351. if(delegate != nil && [delegate respondsToSelector:@selector(xmppRoomDidLeave)])
  352. [delegate xmppRoomDidLeave];
  353. }else {
  354. }
  355. }else {
  356. if (status == 1) {
  357. isConnected = YES;
  358. if(delegate != nil && [delegate respondsToSelector:@selector(xmppRoomDidJoin)])
  359. [delegate xmppRoomDidJoin];
  360. }else {
  361. }
  362. }
  363. }
  364. @end