JXFriendObject.m 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612
  1. //
  2. // JXFriendObject.m
  3. //
  4. // Created by Reese on 13-8-11.
  5. // Copyright (c) 2013年 Reese. All rights reserved.
  6. //
  7. #import "JXFriendObject.h"
  8. #import "FMDatabase.h"
  9. #import "FMResultSet.h"
  10. #import "AppDelegate.h"
  11. #import "SBJsonParser.h"
  12. @interface JXFriendObject ()
  13. @property (nonatomic, assign) BOOL isNewFriend;
  14. @end
  15. @implementation JXFriendObject
  16. static JXFriendObject *sharedUser;
  17. +(JXFriendObject*)sharedInstance{
  18. static dispatch_once_t onceToken;
  19. dispatch_once(&onceToken, ^{
  20. sharedUser=[[JXFriendObject alloc]init];
  21. });
  22. return sharedUser;
  23. }
  24. -(id)init{
  25. self = [super init];
  26. if(self){
  27. _tableName = @"newFriend";
  28. }
  29. return self;
  30. }
  31. -(void)dealloc{
  32. NSLog(@"JXFriendObject.dealloc");
  33. // [super dealloc];
  34. }
  35. -(BOOL)insert{
  36. self.roomFlag = [NSNumber numberWithInt:0];
  37. self.companyId = [NSNumber numberWithInt:0];
  38. self.offlineNoPushMsg = [NSNumber numberWithInt:0];
  39. self.talkTime = [NSNumber numberWithLong:0];
  40. return [super insert];
  41. }
  42. - (BOOL)update {
  43. if (!self.content || self.content.length <= 0) {
  44. self.content = [self getLastContent:self.userId];
  45. }
  46. return [super update];
  47. }
  48. -(JXFriendObject*)userFromDictionary:(NSDictionary*)aDic
  49. {
  50. JXFriendObject* user = [[JXFriendObject alloc]init];
  51. [super userFromDictionary:user dict:aDic];
  52. return user;
  53. }
  54. -(NSMutableArray*)fetchAllFriendsFromLocal
  55. {
  56. NSString* sql = @"select a.*,b.status as trueStatus from newfriend as a LEFT JOIN friend as b on a.userId=b.userId order by a.timeCreate desc";
  57. return [self doFetch:sql];
  58. }
  59. -(NSMutableArray*)doFetch:(NSString*)sql
  60. {
  61. NSMutableArray *resultArr=[[NSMutableArray alloc]init];
  62. NSString* myUserId = MY_USER_ID;
  63. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  64. [super checkTableCreatedInDb:db];
  65. FMResultSet *rs=[db executeQuery:sql];
  66. while ([rs next]) {
  67. JXFriendObject *user=[[JXFriendObject alloc] init];
  68. [super userFromDataset:user rs:rs];
  69. [resultArr addObject:user];
  70. // [user release];
  71. }
  72. [rs close];
  73. if([resultArr count]==0){
  74. // [resultArr release];
  75. resultArr = nil;
  76. }
  77. return resultArr;
  78. }
  79. -(void)notifyNewRequest{
  80. //发送全局通知
  81. [g_notify postNotificationName:kXMPPNewRequestNotifaction object:self userInfo:nil];
  82. }
  83. -(void)doSaveUser{
  84. // [self update];
  85. JXUserObject* user = [[JXUserObject alloc]init];
  86. [user loadFromObject:self];
  87. user.status = self.status;
  88. user.msgsNew = [NSNumber numberWithInt:0];
  89. user.content = nil;//很重要,必须有
  90. if([user haveTheUser]) {
  91. JXUserObject *oldUser = [[JXUserObject sharedInstance] getUserById:user.userId];
  92. user.userType = oldUser.userType;
  93. [user update];
  94. }
  95. else{
  96. [user insert];
  97. [user notifyNewFriend];
  98. }
  99. // [user release];
  100. }
  101. //- (void)doSaveAddressBook{
  102. // NSDictionary *dict = (NSDictionary *)self.content;
  103. // JXAddressBook *addressBook = [[JXAddressBook alloc] init];
  104. // addressBook.toUserId = [NSString stringWithFormat:@"%@",dict[@"toUserId"]];
  105. // addressBook.toUserName = dict[@"toUserName"];
  106. // addressBook.toTelephone = dict[@"toTelephone"];
  107. // addressBook.telephone = dict[@"telephone"];
  108. // addressBook.registerEd = dict[@"registerEd"];
  109. // addressBook.registerTime = [NSDate dateWithTimeIntervalSince1970:[dict[@"registerTime"] longLongValue]];
  110. // addressBook.isRead = [NSNumber numberWithBool:0];
  111. // [addressBook insert];
  112. //}
  113. -(void)doDelUser{
  114. self.status = [NSNumber numberWithInt:friend_status_none];
  115. [self update];
  116. [JXUserObject deleteUserAndMsg:self.userId];
  117. }
  118. -(NSString*)doMsgForNewUser{
  119. NSString* s;
  120. JXMessageObject* p = [[JXMessageObject alloc] init];
  121. if([self.isMySend boolValue]){
  122. p.fromUserId = MY_USER_ID;
  123. p.fromUserName = g_server.myself.userNickname;
  124. p.toUserId = self.userId;
  125. s = Localized(@"JXFriendObject_ChatNow");
  126. p.isMySend = YES;
  127. }else{
  128. p.fromUserId = self.userId;
  129. p.fromUserName = self.userNickname;
  130. p.toUserId = MY_USER_ID;
  131. s = Localized(@"JXFriendObject_StartChat");
  132. p.isMySend = NO;
  133. }
  134. if ([self.type intValue] == XMPP_TYPE_FRIEND) {
  135. p.fromUserId = self.userId;
  136. p.toUserId = MY_USER_ID;
  137. if ([self.isMySend boolValue]) {
  138. p.fromUserId = MY_USER_ID;
  139. p.toUserId = self.userId;
  140. }
  141. s = Localized(@"JXFriendObject_AddedFriend");
  142. }
  143. JXUserObject *serverUser = [[JXUserObject sharedInstance] getUserById:self.userId];
  144. if ([serverUser.userType intValue] == 2) {
  145. s = @" ";
  146. }else {
  147. p.content = s;
  148. p.type = [NSNumber numberWithInt:kWCMessageTypeText];
  149. p.isSend = [NSNumber numberWithInt:transfer_status_yes];
  150. p.isRead = [NSNumber numberWithInt:1];
  151. p.timeSend = [NSDate date];
  152. [p insert:nil];
  153. [p notifyNewMsg];
  154. }
  155. JXUserObject *user = [[JXUserObject alloc] init];
  156. user.userId = self.userId;
  157. user.userNickname = self.userNickname;
  158. user.content = s;
  159. [user insert];
  160. return s;
  161. }
  162. -(void)onSendRequest{
  163. if(![self.isMySend boolValue])
  164. return;
  165. NSNumber* tempStatus=nil;
  166. JXUserObject* user = [[JXUserObject sharedInstance] getUserById:self.userId];
  167. if(user)
  168. tempStatus = user.status;//先记住之前的关系
  169. switch ([self.type intValue]) {
  170. case XMPP_TYPE_SAYHELLO:
  171. if([tempStatus intValue]<=friend_status_none){
  172. self.status = [NSNumber numberWithInt:friend_status_see];
  173. [self doSaveUser];
  174. }
  175. break;
  176. case XMPP_TYPE_PASS:
  177. case XMPP_TYPE_CONTACTFRIEND:
  178. self.status = [NSNumber numberWithInt:friend_status_friend];
  179. [self doSaveUser];
  180. [self doMsgForNewUser];
  181. [g_notify postNotificationName:kFriendPassNotif object:self];
  182. break;
  183. case XMPP_TYPE_FEEDBACK:
  184. break;
  185. case XMPP_TYPE_NEWSEE:
  186. if([tempStatus intValue]<=friend_status_none){//新关注他人时,除非关系小于0,否则都用原来的关系,有可能已为2
  187. self.status = [NSNumber numberWithInt:friend_status_see];
  188. [self doSaveUser];
  189. }
  190. break;
  191. case XMPP_TYPE_DELSEE://删除关注
  192. [self doDelUser];
  193. break;
  194. case XMPP_TYPE_SEVERDELFRIEND:
  195. case XMPP_TYPE_DELALL:
  196. [self doDelUser];
  197. break;
  198. case XMPP_TYPE_SEVERDEL:
  199. [self doDelUser];
  200. break;
  201. case XMPP_TYPE_SEVERBLACK:
  202. case XMPP_TYPE_BLACK:
  203. self.status = [NSNumber numberWithInt:friend_status_black];
  204. [self doSaveUser];//建立黑名单
  205. [self notifyDelFriend];
  206. break;
  207. case XMPP_TYPE_SEVERNOBLACK:
  208. case XMPP_TYPE_NOBLACK:
  209. self.status = [NSNumber numberWithInt:friend_status_friend];
  210. [self doSaveUser];//取消黑名单
  211. [self doMsgForNewUser];
  212. break;
  213. case XMPP_TYPE_FRIEND:
  214. self.status = [NSNumber numberWithInt:friend_status_friend];
  215. // 加好友无法获取userType,此处调个接口
  216. [g_server getUser:self.userId toView:self];
  217. break;
  218. default:
  219. break;
  220. }
  221. // [user release];
  222. }
  223. -(void)onReceiveRequest{
  224. if([self.isMySend boolValue])
  225. return;
  226. NSNumber* tempStatus=nil;
  227. JXUserObject* user = [[JXUserObject sharedInstance] getUserById:self.userId];
  228. if(user)
  229. tempStatus = user.status;//先记住之前的关系
  230. // if([tempStatus intValue]<friend_status_none){//来者是我的黑名单时,直接忽略
  231. //// [user release];
  232. // return;
  233. // }
  234. switch ([self.type intValue]) {
  235. case XMPP_TYPE_SAYHELLO:
  236. break;
  237. case XMPP_TYPE_PASS:
  238. case XMPP_TYPE_CONTACTFRIEND:
  239. self.status = [NSNumber numberWithInt:friend_status_friend];
  240. [self doSaveUser];
  241. [self doMsgForNewUser];
  242. [g_notify postNotificationName:kFriendPassNotif object:self];
  243. break;
  244. case XMPP_TYPE_FEEDBACK:
  245. break;
  246. case XMPP_TYPE_NEWSEE:
  247. if([tempStatus intValue]==friend_status_see){//如果原来已关注,则升级为互粉
  248. self.status = [NSNumber numberWithInt:friend_status_friend];
  249. [self doSaveUser];
  250. }
  251. break;
  252. case XMPP_TYPE_DELSEE:
  253. if([tempStatus intValue]==friend_status_friend){//如果原来已关注,则降级为单方
  254. self.status = [NSNumber numberWithInt:friend_status_see];
  255. [self doSaveUser];
  256. }
  257. break;
  258. case XMPP_TYPE_SEVERDELFRIEND:
  259. case XMPP_TYPE_DELALL:
  260. [self doDelUser];
  261. break;
  262. case XMPP_TYPE_SEVERDEL:
  263. [self doDelUser];
  264. break;
  265. case XMPP_TYPE_SEVERBLACK:
  266. case XMPP_TYPE_BLACK:
  267. self.status = [NSNumber numberWithInt:friend_status_hisBlack];
  268. [self doSaveUser];//建立黑名单
  269. [self notifyDelFriend];
  270. break;
  271. case XMPP_TYPE_SEVERNOBLACK:
  272. case XMPP_TYPE_NOBLACK:
  273. self.status = [NSNumber numberWithInt:friend_status_friend];
  274. [self doSaveUser];
  275. [self doMsgForNewUser];
  276. break;
  277. case XMPP_TYPE_FRIEND:
  278. self.status = [NSNumber numberWithInt:friend_status_friend];
  279. [self doSaveUser];
  280. [self doMsgForNewUser];
  281. break;
  282. // case XMPP_TYPE_CONTACTREGISTER:
  283. // [self doSaveAddressBook];
  284. // [g_notify postNotificationName:kRefreshAddressBookNotif object:nil];
  285. // break;
  286. default:
  287. break;
  288. }
  289. // [user release];
  290. }
  291. -(void)loadFromMessageObj:(JXMessageObject*)msg{
  292. self.type = msg.type;
  293. self.content = msg.content;
  294. self.timeSend = msg.timeSend;
  295. self.isMySend = [NSNumber numberWithBool:msg.isMySend];
  296. if([self.isMySend boolValue]){
  297. self.userId = msg.toUserId;
  298. self.userNickname = msg.toUserName;
  299. }else{
  300. self.userId = msg.fromUserId;
  301. self.userNickname = msg.fromUserName;
  302. }
  303. if ([msg.type integerValue] == XMPP_TYPE_SEVERDEL) {
  304. self.userId = [NSString stringWithFormat:@"%@",msg.objectId];
  305. NSString *name = [JXUserObject getUserNameWithUserId:self.userId];
  306. if (name && name.length > 0) {
  307. self.userNickname = name;
  308. }
  309. }
  310. if ([msg.type integerValue] == XMPP_TYPE_SEVERBLACK || [msg.type integerValue] == XMPP_TYPE_SEVERNOBLACK || [msg.type integerValue] == XMPP_TYPE_SEVERDELFRIEND) {
  311. SBJsonParser * resultParser = [[SBJsonParser alloc] init] ;
  312. NSDictionary *resultObject = [resultParser objectWithString:msg.objectId];
  313. if ([resultObject[@"toUserId"] isEqualToString:MY_USER_ID]) {
  314. self.userId = resultObject[@"fromUserId"];
  315. self.userNickname = resultObject[@"fromUserName"];
  316. self.isMySend = [NSNumber numberWithBool:NO];
  317. }else {
  318. self.userNickname = resultObject[@"toUserName"];
  319. self.userId = resultObject[@"toUserId"];
  320. self.isMySend = [NSNumber numberWithBool:YES];
  321. }
  322. }
  323. JXFriendObject *user = [self selectUser:self.userId];
  324. self.status = user.status;
  325. self.msgsNew = user.msgsNew;
  326. if (user.userNickname.length > 0) {
  327. self.userNickname = user.userNickname;
  328. }
  329. [self insert];
  330. }
  331. -(void)doWriteDb{
  332. if([self.isMySend boolValue])
  333. [self onSendRequest];
  334. else
  335. [self onReceiveRequest];
  336. }
  337. -(NSString*)getLastContent:(NSString *)userId{
  338. NSString* myUserId = MY_USER_ID;
  339. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  340. [self checkTableCreatedInDb:db];
  341. FMResultSet *rs=[db executeQuery:[NSString stringWithFormat:@"select * from %@ where userId=?",_tableName],userId];
  342. JXFriendObject *user=[[JXFriendObject alloc] init];
  343. while ([rs next]) {
  344. [super userFromDataset:user rs:rs];
  345. }
  346. [rs close];
  347. return user.content;
  348. }
  349. // 查找user
  350. - (JXFriendObject *)selectUser:(NSString *)userId {
  351. NSString* myUserId = MY_USER_ID;
  352. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  353. [self checkTableCreatedInDb:db];
  354. FMResultSet *rs=[db executeQuery:[NSString stringWithFormat:@"select * from %@ where userId=?",_tableName],userId];
  355. JXFriendObject *user=[[JXFriendObject alloc] init];
  356. while ([rs next]) {
  357. [super userFromDataset:user rs:rs];
  358. // [user release];
  359. }
  360. [rs close];
  361. return user;
  362. }
  363. -(JXFriendObject*)getFriendById:(NSString*)userId {
  364. NSString* myUserId = MY_USER_ID;
  365. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  366. FMResultSet *rs=[db executeQuery:[NSString stringWithFormat:@"select * from %@ where userId=?",_tableName],userId];
  367. if ([rs next]) {
  368. JXFriendObject *friend=[[JXFriendObject alloc]init];
  369. [super userFromDataset:friend rs:rs];
  370. [rs close];
  371. return friend;
  372. };
  373. return nil;
  374. }
  375. // 更新新消息
  376. - (BOOL)updateNewMsgUserId:(NSString *)userId num:(int)num {
  377. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  378. [self checkTableCreatedInDb:db];
  379. NSString *sql = [NSString stringWithFormat:@"update %@ set newMsgs=? where userId=?",_tableName];
  380. BOOL worked=[db executeUpdate:sql,[NSNumber numberWithInt:num],userId];
  381. return worked;
  382. }
  383. // 更新新朋友列表最后一条消息
  384. - (void)updateNewFriendLastContent {
  385. self.isNewFriend = YES;
  386. [g_server getUser:self.userId toView:self];
  387. }
  388. - (BOOL)updateLastContent:(NSString *)s userId:(NSString *)userId {
  389. NSString* myUserId = MY_USER_ID;
  390. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
  391. NSString *sql = [NSString stringWithFormat:@"update %@ set content=? where userId=?",_tableName];
  392. BOOL worked=[db executeUpdate:sql,s,userId];
  393. return worked;
  394. }
  395. -(NSString*)getUserNameWithUserId:(NSString*)userId{
  396. if(userId==nil)
  397. return nil;
  398. FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
  399. //获取用户名
  400. NSString* sql= [NSString stringWithFormat:@"select userNickname from %@ where userId=%@",_tableName,userId];
  401. FMResultSet *rs=[db executeQuery:sql];
  402. if([rs next]) {
  403. NSString* s = [rs objectForColumnName:@"userNickname"];
  404. return s;
  405. }
  406. return nil;
  407. }
  408. -(void) didServerResultSucces:(JXConnection*)aDownload dict:(NSDictionary*)dict array:(NSArray*)array1{
  409. if([aDownload.action isEqualToString:act_UserGet]){
  410. JXUserObject *user = [[JXUserObject alloc] init];
  411. [user getDataFromDict:dict];
  412. if (self.isNewFriend) {
  413. self.isNewFriend = NO;
  414. NSString* s = self.content;
  415. int n = [self.type intValue];
  416. if([self.isMySend boolValue]){
  417. switch (n) {
  418. case XMPP_TYPE_SAYHELLO:
  419. s= Localized(@"JXFriendObject_WaitPass");
  420. break;
  421. case XMPP_TYPE_PASS:
  422. s = Localized(@"JXFriendObject_Passed");
  423. break;
  424. case XMPP_TYPE_FEEDBACK:
  425. s = self.content;
  426. break;
  427. case XMPP_TYPE_NEWSEE:
  428. s = Localized(@"JXFriendObject_Followed");
  429. break;
  430. case XMPP_TYPE_DELSEE:
  431. s = Localized(@"JXFriendObject_CencalFollowed");
  432. break;
  433. case XMPP_TYPE_SEVERDELFRIEND:
  434. case XMPP_TYPE_DELALL:
  435. if ([user.userType intValue] == 2) {
  436. s = [NSString stringWithFormat:@"已取消关注公众号 %@",self.userNickname];
  437. }else {
  438. s = [NSString stringWithFormat:@"%@ %@",Localized(@"JXAlert_DeleteFirend"),self.userNickname];
  439. }
  440. break;
  441. case XMPP_TYPE_SEVERDEL:
  442. s = self.content;
  443. break;
  444. case XMPP_TYPE_SEVERBLACK:
  445. case XMPP_TYPE_BLACK:
  446. s = [NSString stringWithFormat:@"%@ %@",Localized(@"JXFriendObject_AddedBlackList"),self.userNickname];
  447. break;
  448. case XMPP_TYPE_SEVERNOBLACK:
  449. case XMPP_TYPE_NOBLACK: {
  450. if (self.isMySend) {
  451. s = [NSString stringWithFormat:@"我%@",Localized(@"JXFriendObject_NoBlack")];
  452. }else {
  453. s = [NSString stringWithFormat:@"%@ %@",MY_USER_NAME,Localized(@"JXFriendObject_NoBlack")];
  454. }
  455. }
  456. break;
  457. case XMPP_TYPE_FRIEND: {
  458. if ([user.userType intValue] == 2) {
  459. s = @"已关注公众号";
  460. }else {
  461. s = Localized(@"JXFriendObject_AddedFriend");
  462. }
  463. }
  464. break;
  465. case XMPP_TYPE_CONTACTFRIEND:
  466. s = Localized(@"JX_FriendsViaMobileContacts");
  467. break;
  468. default:
  469. break;
  470. }
  471. }else{
  472. switch (n) {
  473. case XMPP_TYPE_SAYHELLO:
  474. s = self.content;
  475. break;
  476. case XMPP_TYPE_PASS:
  477. s = Localized(@"JXFriendObject_PassGo");
  478. break;
  479. case XMPP_TYPE_FEEDBACK:
  480. s = self.content;
  481. break;
  482. case XMPP_TYPE_NEWSEE:
  483. s = Localized(@"JXFriendObject_FollowYour");
  484. break;
  485. case XMPP_TYPE_DELSEE:
  486. s = Localized(@"JXFriendObject_CancelFollow");
  487. break;
  488. case XMPP_TYPE_SEVERDELFRIEND:
  489. case XMPP_TYPE_DELALL:
  490. s = [NSString stringWithFormat:@"%@ %@",self.userNickname,Localized(@"JXFriendObject_Deleted")];
  491. break;
  492. case XMPP_TYPE_SEVERDEL:
  493. s = self.content;
  494. break;
  495. case XMPP_TYPE_RECOMMEND:
  496. s = Localized(@"JXFriendObject_RecomYou");
  497. break;
  498. case XMPP_TYPE_SEVERBLACK:
  499. case XMPP_TYPE_BLACK:
  500. s = [NSString stringWithFormat:@"%@ %@",self.userNickname,Localized(@"JXFriendObject_PulledBlack")];
  501. break;
  502. case XMPP_TYPE_SEVERNOBLACK:
  503. case XMPP_TYPE_NOBLACK:
  504. s = [NSString stringWithFormat:@"%@ %@",self.userNickname,Localized(@"JXFriendObject_NoBlack")];
  505. break;
  506. case XMPP_TYPE_FRIEND:
  507. s = Localized(@"JXFriendObject_BeAddFriend");
  508. break;
  509. case XMPP_TYPE_CONTACTFRIEND:
  510. s = Localized(@"JX_FriendsViaMobileContacts");
  511. break;
  512. default:
  513. break;
  514. }
  515. }
  516. // 更新最后一条消息
  517. [self updateLastContent:s userId:user.userId];
  518. [self notifyNewRequest];
  519. return;
  520. }
  521. if (![user haveTheUser]) {
  522. [user insert];
  523. }else {
  524. [user update];
  525. }
  526. [self doSaveUser];
  527. [self doMsgForNewUser];
  528. [g_notify postNotificationName:kFriendPassNotif object:self];
  529. [g_notify postNotificationName:@"newFriend" object:nil userInfo:@{@"use":user}];
  530. }
  531. }
  532. -(int) didServerResultFailed:(JXConnection*)aDownload dict:(NSDictionary*)dict{
  533. return hide_error;
  534. }
  535. -(int) didServerConnectError:(JXConnection*)aDownload error:(NSError *)error{//error为空时,代表超时
  536. return hide_error;
  537. }
  538. -(void) didServerConnectStart:(JXConnection*)aDownload{
  539. }
  540. @end