diff -r 12af337248b1 -r bd7edf625bdd calendarui/server/CalenSvr/src/CalSvrSession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calendarui/server/CalenSvr/src/CalSvrSession.cpp Wed Sep 01 12:32:31 2010 +0100 @@ -0,0 +1,312 @@ +/* +* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Provides methods for calendar session for a client thread on the server-side. + * +*/ + + + +//debug +#include "calendarui_debug.h" + +#include "CalSvrSession.h" + +#include "CalenServer.h" +#include "CalSvrDef.h" + + +/** + * CCalSvrSession + **/ + +// construct/destruct + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CCalSvrSession::CCalSvrSession() + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + } + +// FIXME: this is never called ! Correct would have been createL +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalSvrSession::ConstructL(CCalenServer& /*aServer*/) + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CCalSvrSession::~CCalSvrSession() + { + TRACE_ENTRY_POINT; + + PIM_TRAPD_HANDLE( DoDestructL() ); + + TRACE_EXIT_POINT; + } + +void CCalSvrSession::DoDestructL() + { + TRACE_ENTRY_POINT; + + CancelInitializeL(); + + if( iRegistered ) // if still registered + { + Server()->UnregisterUserL(*this); + iRegistered = EFalse; + } + + TRACE_EXIT_POINT; + } +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CCalenServer* CCalSvrSession::Server() const + { + TRACE_ENTRY_POINT; + /** + * Return the Calendar server. + * + * This deliberately hides the CSession2 version of this + * function, to prevent lots of ugly casts around the code. + **/ + CCalenServer* server = const_cast(static_cast(CSession2::Server())); + + TRACE_EXIT_POINT; + return server; + } + +// service dispatcher - from CSession2 + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalSvrSession::ServiceL(const RMessage2& aMessage) + { + TRACE_ENTRY_POINT; + + switch (aMessage.Function()) + { + case ECalSvrInitialize: + { + InitializeL(aMessage); + // Asynchronous service, message completion not done here + } + break; + + case ECalSvrUninitialize: + { + UninitializeL(); + aMessage.Complete(KErrNone); + } + break; + + case ECalSvrCancelInitialize: + { + CancelInitializeL(); + aMessage.Complete(KErrNone); + } + break; + + default: + Server()->PanicClient(aMessage, EBadRequest); + + } + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalSvrSession::CancelInitializeL() + { + TRACE_ENTRY_POINT; + + if(!iInitActive) + { + TRACE_EXIT_POINT; + return; + } + if(iRegistered) + { + Server()->UnregisterUserL(*this); + iRegistered = EFalse; + } + if(!iInitMessage.IsNull() ) + { + iInitMessage.Complete(KErrCancel); + iInitActive = EFalse; + } + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalSvrSession::InitializeL(const RMessage2& aMessage) + { + TRACE_ENTRY_POINT; + + __ASSERT_DEBUG(!iInitActive, User::Panic(_L("CalSvrSession::InitializeL"), 0)); + __ASSERT_DEBUG(!iRegistered, User::Panic(_L("CalSvrSession::InitializeL"), 1)); + iInitMessage = aMessage; + iInitActive = ETrue; + iRegistered = ETrue; + Server()->RegisterUserL(*this); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalSvrSession::UninitializeL() + { + TRACE_ENTRY_POINT; + + __ASSERT_DEBUG(iRegistered, User::Panic(_L("CalSvrSession::UninitializeL"), 0)); + CancelInitializeL(); // this will unregister if init active + if (iRegistered) // if still registered + { + Server()->UnregisterUserL(*this); + iRegistered = EFalse; + } + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalSvrSession::DatabaseOpened() + { + TRACE_ENTRY_POINT; + + HandleInitReady(); + + TRACE_EXIT_POINT; + } + + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +//srinath +void CCalSvrSession::HandleError() + { + TRACE_ENTRY_POINT; + + if(!iInitMessage.IsNull() ) + { + iInitMessage.Complete(KErrNone); + } + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalSvrSession::DatabaseTemporarilyClosed() + { + TRACE_ENTRY_POINT; + + // Do not do anything here. + // Client doesn't need to know anything about database being temporarily + // closed, because initialize/uninitialize mechanism is meant for + // optimization only. From client perspective, it is not real connection + // to agenda database, but "a guarantee" that someone is holding open + // connection to agenda database, so that subsequent connections from + // clients are cheaper. + // + // After restoring is completed, we need to be sure that there are + // no unnecessary notifications to clients. + // When we get DatabaseOpened after DatabaseTemporarilyClosed, + // there are two options: + // 1) Client has been already notified in HandleInitReady. + // In this case iInitActive is EFalse, and we don't inform + // client. Everything is ok. + // 2) Client has been notified yet, i.e. restore started in middle of + // CalenSvrDBManager opening connection to database. In this case + // we want client to be notified. And this happens as iInitActive + // is still ETrue. + TRACE_EXIT_POINT; + } + +/** + * Called by server when agenda observer notifies of change + **/ +// ----------------------------------------------------------------------------- +// ?classname::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalSvrSession::HandleInitReady() + { + TRACE_ENTRY_POINT; + + if(iInitActive) + { + iInitMessage.Complete(KErrNone); + iInitActive = EFalse; + } + + TRACE_EXIT_POINT; + } + + +// End of File