//// BXPGManualCommitConnectionResetRecoveryAttempter.m// BaseTen//// Copyright (C) 2006-2008 Marko Karppinen & Co. LLC.//// Before using this software, please review the available licensing options// by visiting http://basetenframework.org/licensing/ or by contacting// us at sales@karppinen.fi. Without an additional license, this software// may be distributed only in compliance with the GNU General Public License.////// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License, version 2.0,// as published by the Free Software Foundation.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA//// $Id$//#import "BXPGTransactionHandler.h"#import "BXPGManualCommitConnectionResetRecoveryAttempter.h"#import "BXPGManualCommitTransactionHandler.h"@implementationBXPGManualCommitConnectionResetRecoveryAttempter-(BOOL)attemptRecoveryFromError:(NSError*)erroroptionIndex:(NSUInteger)recoveryOptionIndex{if(0==recoveryOptionIndex){[[mHandlerconnection]resetSync];[[(id)mHandlernotifyConnection]resetSync];//-finishedConnecting gets executed here.}[selfallowConnecting:mSucceeded];returnmSucceeded;}-(void)finishedConnecting{PGTSConnection*connection=[mHandlerconnection];PGTSConnection*notifyConnection=[(id)mHandlernotifyConnection];ConnStatusTypes1=[connectionconnectionStatus];ConnStatusTypes2=[notifyConnectionconnectionStatus];mSucceeded=(CONNECTION_OK==s1&&CONNECTION_OK==s2);if(!mSucceeded){[connectiondisconnect];[notifyConnectiondisconnect];}else{[connectionsetDelegate:mHandler];[notifyConnectionsetDelegate:mHandler];}if(mIsAsync){[selfallowConnecting:mSucceeded];[mRecoveryInvocationsetArgument:&mSucceededatIndex:2];[mRecoveryInvocationinvoke];//FIXME: check modification tables?//FIXME: clear mHandlingConnectionLoss.}}-(void)waitForConnection{//Wait until both connections have finished.mCounter--;if(!mCounter)[selffinishedConnecting];}-(void)attemptRecoveryFromError:(NSError*)erroroptionIndex:(NSUInteger)recoveryOptionIndexdelegate:(id)delegatedidRecoverSelector:(SEL)didRecoverSelectorcontextInfo:(void*)contextInfo{mCounter=2;mIsAsync=YES;NSInvocation*i=[selfrecoveryInvocation:delegateselector:didRecoverSelectorcontextInfo:contextInfo];[selfsetRecoveryInvocation:i];PGTSConnection*connection=[mHandlerconnection];PGTSConnection*notifyConnection=[(id)mHandlernotifyConnection];[connectionsetDelegate:self];[notifyConnectionsetDelegate:self];[connectionresetAsync];[notifyConnectionresetAsync];}-(void)PGTSConnectionFailed:(PGTSConnection*)connection{[selfwaitForConnection];}-(void)PGTSConnectionEstablished:(PGTSConnection*)connection{[selfwaitForConnection];}@end