sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdownsrv.cpp
author mikek
Mon, 17 May 2010 20:20:32 +0100
changeset 13 c327db0664bb
permissions -rw-r--r--
Upgrading Raptor from 2.10 to 2.13
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
     1
/*
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
     2
* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
     3
* All rights reserved.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
     4
* This component and the accompanying materials are made available
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
     6
* which accompanies this distribution, and is available
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
     8
*
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
     9
* Initial Contributors:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    11
*
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    12
* Contributors:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    13
*
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    14
* Description: 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    15
*
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    16
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    17
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    18
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    19
#include "shutdownsrv.h"
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    20
#include "savenotf.h"
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    21
#include "savepriv.h"
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    22
#include "shutdowntimer.h"
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    23
#include <hal.h>
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    24
#include <f32file.h>
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    25
#include <bautils.h>
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    26
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    27
#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    28
#include <s32mem.h>
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    29
#include <ssmgracefulshutdown_patch.h>
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    30
#endif
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    31
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    32
//The function used to start the profiler, while profiling the shutdown.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    33
#ifdef __PROFILE_SHUTDOWN
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    34
_LIT(KProfilerCmd,"start -noui");
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    35
void StartProfiler()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    36
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    37
	RProcess p;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    38
	TInt r=p.Create(KProfilerName,KProfilerCmd);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    39
	if (r==KErrNone)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    40
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    41
		p.Resume();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    42
		p.Close();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    43
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    44
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    45
#endif
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    46
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    47
//The function used to unload the profiler, while profiling the shutdown.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    48
#ifdef __PROFILE_SHUTDOWN
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    49
void UnloadProfiler()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    50
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    51
	TFullName name;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    52
	TFindServer findSvr(KProfilerName);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    53
	Profiler::Unload();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    54
	while(findSvr.Next(name) == KErrNone)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    55
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    56
		User::After(1000000);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    57
		findSvr.Find(KProfilerName);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    58
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    59
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    60
#endif
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    61
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    62
//
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    63
// class CServShutdownServer
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    64
//
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    65
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    66
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    67
Standard phase-one factory method for creating CServShutdownServer instances.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    68
@return A newly-constructed shutdown server object.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    69
@leave Some system-wide error codes including KErrNoMemory.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    70
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    71
EXPORT_C CServShutdownServer* CServShutdownServer::NewL()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    72
	{ // static
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    73
	CServShutdownServer* self=new(ELeave) CServShutdownServer(CActive::EPriorityStandard);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    74
	return self;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    75
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    76
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    77
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    78
Destructor.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    79
Releases CShutdownTimer object if it has been allocated.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    80
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    81
EXPORT_C CServShutdownServer::~CServShutdownServer()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    82
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    83
	delete iShutdownTimer;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    84
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    85
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    86
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    87
This method iterates through all session instances and checks that all they have pending
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    88
requests (which means that all clients have completed their powerdown related processing
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    89
and re-registered itself back to the shutdown server).. If that's true (all sessions have
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    90
pending requests) and iPowerOff flag is nonzero, the method will call SwitchOff() - the
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    91
power will be switched off. 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    92
@see CServShutdownServer::SwitchOff()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    93
@see CServShutdownSession::HasPendingRequest()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    94
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    95
EXPORT_C void CServShutdownServer::HandlePowerNotifRequest(const RThread& /*aClient*/)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    96
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    97
	// if all sessions have a pending request then they've all saved their data and we can switch off
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    98
	TBool completed=ETrue;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
    99
	TDblQueIter<CSession2> iter(iSessionIter);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   100
	iter.SetToFirst();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   101
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   102
	for (CSession2* session=iter++; session!=NULL; session=iter++)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   103
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   104
		if (!static_cast<CServShutdownSession*>(session)->HasPendingRequest())
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   105
			{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   106
			completed=EFalse;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   107
			break;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   108
			}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   109
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   110
	if (completed && iPowerOff)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   111
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   112
		SwitchOff();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   113
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   114
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   115
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   116
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   117
This method will call SwitchOff(), if there are no sessions, so - no clients.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   118
If there are registered clients (sessions), the method will call CServShutdownSession::NotifySave()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   119
for each of them.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   120
If the timer object has been initialised, it calculates the shutdown timeout value 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   121
and adds the timer to the active scheduler.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   122
@param aSaveType The action, which will be given to the clients, when calling their 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   123
                 MSaveObserver::SaveL() implementations.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   124
@see CServShutdownServer::SwitchOff()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   125
@see CServShutdownSession::NotifySave()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   126
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   127
EXPORT_C void CServShutdownServer::NotifySave(MSaveObserver::TSaveType aSaveType)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   128
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   129
	TDblQueIter<CSession2> iter(iSessionIter);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   130
	iter.SetToFirst();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   131
	CSession2* p=iter++;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   132
	if (p==NULL)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   133
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   134
		if (iPowerOff)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   135
			{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   136
			SwitchOff();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   137
			}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   138
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   139
	else
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   140
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   141
		TInt numClients = 0;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   142
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   143
		iter.SetToFirst();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   144
	    for (CSession2* session=iter++; session!=NULL; session=iter++)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   145
			{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   146
			static_cast<CServShutdownSession*>(session)->NotifySave(aSaveType);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   147
			numClients++;  
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   148
			}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   149
			
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   150
		if(iShutdownTimer && !iShutdownTimer->IsActive())
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   151
			{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   152
			iShutdownTimer->Start(numClients);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   153
			}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   154
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   155
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   156
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   157
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   158
@return Non-zero If the powerdown sequence has been initiated.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   159
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   160
EXPORT_C TBool CServShutdownServer::IsPowerOff() const
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   161
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   162
	return iPowerOff;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   163
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   164
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   165
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   166
Cancels any power off request.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   167
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   168
EXPORT_C void CServShutdownServer::CancelPowerOff()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   169
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   170
	iPowerOff=EFalse;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   171
	
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   172
	// Cancel the timer.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   173
	if (iShutdownTimer)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   174
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   175
		iShutdownTimer->Cancel();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   176
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   177
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   178
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   179
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   180
@param aPriority The active object priority.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   181
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   182
EXPORT_C CServShutdownServer::CServShutdownServer(TInt aPriority):
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   183
	CServer2(aPriority), iShutdownTimer(0)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   184
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   185
    }
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   186
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   187
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   188
Completes the server construction by adding the server to the active scheduler and initializing the
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   189
CShutdownTimer object if applicable.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   190
@leave See CServer2::StartL() leave error codes.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   191
@see CServer2::StartL()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   192
@panic KErrNotSupported Incorrect patchable variables configuration.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   193
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   194
EXPORT_C void CServShutdownServer::ConstructL()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   195
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   196
	iShutdownTimer = CShutdownTimer::NewL(*this);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   197
	#ifdef TEST_SHUTDOWN_SERVER 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   198
	StartL(__TEST_SHUTDOWN_SERVER_NAME);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   199
	#else
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   200
	StartL(__SHUTDOWN_SERVER_NAME);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   201
	#endif
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   202
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   203
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   204
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   205
This method switches off the power using the Power API.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   206
If there is a defined SYSLIBS_TEST macro, the method does nothing.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   207
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   208
void CServShutdownServer::DoSwitchOff()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   209
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   210
	//Finalize the drives before shutting down
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   211
	RFs fs;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   212
	TInt r=fs.Connect(); 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   213
	if (r==KErrNone) 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   214
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   215
		//Ignore the error code, as it is not a critical call
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   216
		r=fs.FinaliseDrives();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   217
		fs.Close();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   218
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   219
#ifdef 	SYSLIBS_TEST 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   220
		// Test mode, only prints debug message.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   221
		RDebug::Printf("CServShutdownServer::SwitchOff() gets run in SYSLIBS_TEST mode.\n");
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   222
#else 	//SYSLIBS_TEST
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   223
	// restart or standby/shutdown using Power API 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   224
	if (Power::EnableWakeupEvents(iPowerEvent) == KErrNone)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   225
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   226
		// Prepare to wake up if power event is standby
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   227
		TRequestStatus s;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   228
		Power::RequestWakeupEventNotification(s);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   229
		Power::PowerDown(); // if event is Restart, this function should never return
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   230
		User::WaitForRequest(s);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   231
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   232
#endif //SYSLIBS_TEST
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   233
	} 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   234
void CServShutdownServer::SwitchOff()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   235
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   236
	// If the timer has applied, cancel any outstanding requests, 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   237
	// no matter SwitchOff() has been triggered by the timer or the shutdown server.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   238
	if (iShutdownTimer)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   239
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   240
		iShutdownTimer->Cancel();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   241
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   242
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   243
	if (iPowerOff)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   244
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   245
#ifdef __PROFILE_SHUTDOWN
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   246
		UnloadProfiler();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   247
#endif //__PROFILE_SHUTDOWN
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   248
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   249
	//SSM shutdown is used only when patchable constant KSsmGracefulShutdown is true 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   250
#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   251
	if (iPowerOff && !IsSsmGracefulShutdown())
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   252
#else
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   253
	if (iPowerOff)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   254
#endif
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   255
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   256
		//Shutdown using old shutdownsrv, not SSM
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   257
		DoSwitchOff();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   258
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   259
	iPowerOff = EFalse;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   260
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   261
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   262
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   263
This method creates a new server side session object.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   264
@param aVersion Shutdown server version number.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   265
@return A pointer to the created session object.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   266
@leave KErrNotSupported Unknown shutdown server version
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   267
@leave Some system-wide error codes including KErrNoMemory.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   268
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   269
CSession2* CServShutdownServer::NewSessionL(const TVersion& aVersion,const RMessage2& /*aMessage*/) const
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   270
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   271
	TVersion v(KShutdownMajorVN,KShutdownMinorVN,KShutdownBuildVN);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   272
	if (!User::QueryVersionSupported(v,aVersion))
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   273
		User::Leave(KErrNotSupported);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   274
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   275
	CSession2* pSession = CServShutdownSession::NewL();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   276
	return pSession;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   277
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   278
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   279
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   280
This method has to be called, when the registered clients have to be notified that a 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   281
particular action has to be done, such as MSaveObserver::ESaveData, MSaveObserver::ESaveAll, 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   282
MSaveObserver::EReleaseRAM,...
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   283
If this is a beginning of a powerdown sequence, the method will store the locales and the HAL
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   284
properties.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   285
If the requested action is not MSaveObserver::ESaveNone, the method will call 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   286
CServShutdownServer::NotifySave().
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   287
@param aAction The type of the requested action
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   288
@param aPowerOff If it is non-zero, this is the beginning of a powerdown sequence.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   289
@param aEvent The type of the powerdown event (power off or restart)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   290
@leave KErrNotSupported Leaves if aEvent is invalid  
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   291
@see CServShutdownServer::NotifySave()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   292
@see TPowerState
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   293
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   294
EXPORT_C void CServShutdownServer::HandleShutdownEventL(MSaveObserver::TSaveType aAction,TBool aPowerOff, TPowerState aEvent)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   295
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   296
	if( aPowerOff )
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   297
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   298
		__ASSERT_ALWAYS((aEvent>EPwActive)&&(aEvent<EPwLimit), User::Leave(KErrNotSupported));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   299
#ifdef __PROFILE_SHUTDOWN
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   300
		StartProfiler();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   301
#endif
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   302
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   303
#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   304
		if (!IsSsmGracefulShutdown())
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   305
			{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   306
			// Save the state of the HAL
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   307
			// The state of the locale should be saved before the HAL
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   308
			BaflUtils::PersistLocale();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   309
			BaflUtils::PersistHAL();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   310
			}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   311
#else
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   312
		// Save the state of the HAL
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   313
		// The state of the locale should be saved before the HAL
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   314
		BaflUtils::PersistLocale();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   315
		BaflUtils::PersistHAL();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   316
#endif
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   317
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   318
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   319
	iPowerOff=aPowerOff;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   320
	iPowerEvent = aEvent;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   321
	// add LAF setting for powering down screen (& keyboard??)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   322
	if (aAction != MSaveObserver::ESaveNone)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   323
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   324
		NotifySave(aAction);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   325
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   326
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   327
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   328
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   329
This method returns an information about the shutdown status.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   330
@param aPowerOff An output parameter, where iPowerOff value will be stored. 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   331
                 It will be non-zero, if a powerdown sequence has been initiated.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   332
@param aAllSessionsHavePendingRequest An output parameter. It will be non-zero, if
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   333
                 all clients has pending requests.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   334
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   335
EXPORT_C void CServShutdownServer::GetShutdownState(TBool& aPowerOff, TBool& aAllSessionsHavePendingRequest) const
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   336
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   337
	aAllSessionsHavePendingRequest = AllSessionsHavePendingRequest();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   338
	aPowerOff = iPowerOff;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   339
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   340
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   341
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   342
This method creates an array of CArrayFix<TThreadId> type and appends to it the
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   343
thread id-s of the all registered clients.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   344
The created CArrayFix<TThreadId> instance will be pushed on the cleanup stack.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   345
@return A pointer to a CArrayFix<TThreadId> array with the client thread id-s.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   346
@leave Some system-wide error codes including KErrNoMemory.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   347
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   348
EXPORT_C CArrayFix<TThreadId>* CServShutdownServer::ClientArrayLC()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   349
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   350
	CArrayFix<TThreadId>* clientArray=new(ELeave) CArrayFixFlat<TThreadId>(2);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   351
	CleanupStack::PushL(clientArray);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   352
	TDblQueIter<CSession2> iter(iSessionIter);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   353
	iter.SetToFirst();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   354
	TKeyArrayFix key(0,ECmpTInt);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   355
    for (CSession2* session=iter++; session!=NULL; session=iter++)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   356
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   357
		TThreadId id=static_cast<CServShutdownSession*>(session)->ClientThreadId();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   358
		TInt pos;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   359
		if (clientArray->Find(id,key,pos)!=0)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   360
			{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   361
			clientArray->AppendL(id);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   362
			}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   363
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   364
	return clientArray;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   365
	
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   366
	
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   367
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   368
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   369
#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   370
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   371
This method will write thread id-s of all clients that are registered for shutdown notification in to a streem.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   372
@param aMessage consists of buffer, clientside array count and server side array count 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   373
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   374
void CServShutdownServer::ClientArrayL(const RMessage2& aMessage)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   375
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   376
	const TInt arrayItemCount = ClientArrayCount();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   377
	//write all registered client array in a buffer only when client side 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   378
	//array count is equal to server side array count
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   379
	if(arrayItemCount == aMessage.Int1())
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   380
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   381
		const TInt sizeRequired = arrayItemCount * sizeof(TThreadId);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   382
		CBufFlat* const buf=CBufFlat::NewL(sizeRequired);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   383
		CleanupStack::PushL(buf);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   384
		RBufWriteStream writeStream(*buf);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   385
		CleanupClosePushL(writeStream); 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   386
		TDblQueIter<CSession2> iter(iSessionIter);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   387
		iter.SetToFirst();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   388
    	for (CSession2* session=iter++; session!=NULL; session=iter++)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   389
			{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   390
			TThreadId id=static_cast<CServShutdownSession*>(session)->ClientThreadId();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   391
			//Thread id (which is TUint64) is broken in to two TUint32 and written as RWriteStream doesnt 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   392
			//support TUint64. Client API will recreate TUint64 value from these TUint32 values.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   393
			if(id.Id())
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   394
				{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   395
				//RWriteStream there is no API to writes a TUint64 value as a 64 bit value to stream
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   396
				writeStream.WriteUint32L(I64HIGH(id.Id()));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   397
				writeStream.WriteUint32L(I64LOW(id.Id()));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   398
				}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   399
			}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   400
		writeStream.CommitL();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   401
		aMessage.WriteL(0, buf->Ptr(0));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   402
		CleanupStack::PopAndDestroy(2,buf);	//writeStream, buf 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   403
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   404
	else
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   405
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   406
		aMessage.Write(2, TPckg<TInt>(arrayItemCount));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   407
		}	
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   408
	
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   409
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   410
		
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   411
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   412
This method will return the number of client that are registered for Shutdown notification with ShutDown server.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   413
@return Number of registered clients.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   414
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   415
TInt CServShutdownServer::ClientArrayCount()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   416
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   417
	TDblQueIter<CSession2> iter(iSessionIter);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   418
	iter.SetToFirst();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   419
	TInt count =0;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   420
    for (CSession2* session=iter++; session!=NULL; session=iter++)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   421
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   422
		TThreadId id=static_cast<CServShutdownSession*>(session)->ClientThreadId();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   423
		//Clients which are not registered for notification will not have RMessage in the session and hence 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   424
		//thread id will be NULL(e.g.CLafShutdownEventObserverAdaptor). Avoid such clients. 		
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   425
		if(id.Id())
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   426
			{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   427
			++count;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   428
			}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   429
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   430
	return count;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   431
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   432
#endif	//SYMBIAN_SSM_GRACEFUL_SHUTDOWN	
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   433
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   434
@return Non-zero, if all registered clients have pending requests.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   435
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   436
TBool CServShutdownServer::AllSessionsHavePendingRequest() const
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   437
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   438
	TBool ret=ETrue;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   439
	TDblQueIter<CSession2> iter(iSessionIter);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   440
	iter.SetToFirst();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   441
	for (CSession2* session=iter++; session!=NULL; session=iter++)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   442
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   443
		const CServShutdownSession* mySession=static_cast<CServShutdownSession*>(session);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   444
		if (!mySession->HasPendingRequest())
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   445
			{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   446
			ret=EFalse;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   447
			break;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   448
			}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   449
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   450
	return ret;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   451
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   452
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   453
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   454
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   455
@param aId Client's thread id.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   456
@return Non-zero if the client with this thread id has no pending request.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   457
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   458
EXPORT_C TBool CServShutdownServer::IsClientHung(TThreadId aId) const
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   459
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   460
	TBool ret=EFalse;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   461
	TDblQueIter<CSession2> iter(iSessionIter);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   462
	iter.SetToFirst();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   463
	for (CSession2* session=iter++; session!=NULL; session=iter++)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   464
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   465
		const CServShutdownSession* mySession=static_cast<CServShutdownSession*>(session);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   466
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   467
		if (mySession->ClientThreadId()==aId)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   468
			{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   469
			if (!mySession->HasPendingRequest())
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   470
				{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   471
				ret=ETrue;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   472
				break;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   473
				}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   474
			}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   475
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   476
	return ret;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   477
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   478
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   479
//
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   480
// class CServShutdownSession
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   481
//
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   482
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   483
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   484
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   485
EXPORT_C CServShutdownSession::CServShutdownSession()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   486
	: CSession2(),
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   487
	iCurrentEvent(-1), iOutstandingEvent(-1)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   488
	{}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   489
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   490
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   491
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   492
EXPORT_C CServShutdownSession::~CServShutdownSession()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   493
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   494
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   495
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   496
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   497
Standard phase-one factor method for creating CServShutdownSession instances.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   498
@return A pointer to the created CServShutdownSession instance.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   499
@leave KErrNoMemory Not enough memory to complete the operation.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   500
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   501
CServShutdownSession* CServShutdownSession::NewL()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   502
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   503
	return new (ELeave) CServShutdownSession;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   504
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   505
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   506
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   507
@return Non-zero, if the client has a pending request.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   508
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   509
TBool CServShutdownSession::HasPendingRequest() const
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   510
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   511
	return !iPtr.IsNull();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   512
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   513
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   514
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   515
This method will complete the pending asychronous client request, effectivelly notifying it
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   516
about the action, which the client has to do.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   517
@param aSaveType The type of the requested save action.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   518
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   519
void CServShutdownSession::NotifySave(MSaveObserver::TSaveType aSaveType)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   520
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   521
	const TInt saveType=(TInt)aSaveType;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   522
	if (HasPendingRequest())
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   523
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   524
		iPtr.Complete(saveType);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   525
		iCurrentEvent=saveType;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   526
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   527
	else
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   528
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   529
		if (iCurrentEvent==(TInt)MSaveObserver::ESaveAll || 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   530
			(iCurrentEvent==(TInt)MSaveObserver::ESaveQuick && 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   531
			 aSaveType==MSaveObserver::ESaveData))
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   532
            {
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   533
			iOutstandingEvent=saveType;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   534
			}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   535
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   536
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   537
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   538
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   539
This method dispatches all client requests to the appropriate method calls.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   540
@param aMessage The client's message
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   541
@param aCompleteRequest An output parameter. If zero, the client request
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   542
                will be completed later.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   543
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   544
void CServShutdownSession::DoServiceL(const RMessage2& aMessage, TBool& aCompleteRequest)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   545
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   546
	switch (aMessage.Function())
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   547
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   548
	case TSaveOpCodeNotify:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   549
		RequestNotifyPowerDown(aMessage);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   550
		// don't complete async message yet
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   551
		aCompleteRequest=EFalse;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   552
		break;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   553
	case TSaveOpCodeNotifyCancel:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   554
		RequestNotifyPowerDownCancel();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   555
		break;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   556
	case TSaveOpCodeHandleError:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   557
		User::Leave(KErrNotSupported);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   558
		break;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   559
	case TSaveOpCodePowerOff:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   560
		PowerOffL(aMessage);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   561
		break;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   562
	case TSaveOpCodeQueryPowerState:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   563
		PowerStateL(aMessage);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   564
		break;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   565
#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   566
	case EEventObsAdaptHandleShutdown:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   567
	case EEventObsAdaptClientArrayCount:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   568
	case EEventObsAdaptClientArray:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   569
	case EEventObsAdaptIsClientHung:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   570
	case EEventObsAdaptGetShutdownState:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   571
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   572
		if (IsSsmGracefulShutdown())	// SSM should be used for device shutdown
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   573
			{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   574
			switch(aMessage.Function())
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   575
				{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   576
				case EEventObsAdaptHandleShutdown:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   577
					HandleShutdownEventL(aMessage);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   578
					break;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   579
				case EEventObsAdaptClientArrayCount:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   580
					ClientArrayCount(aMessage);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   581
					break;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   582
				case EEventObsAdaptClientArray:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   583
					ClientArrayL(aMessage);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   584
					break;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   585
				case EEventObsAdaptIsClientHung:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   586
					IsClientHung(aMessage);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   587
					break;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   588
				case EEventObsAdaptGetShutdownState:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   589
					GetShutdownState(aMessage);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   590
					break;			
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   591
				}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   592
			}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   593
		break;	
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   594
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   595
#endif // SYMBIAN_SSM_GRACEFUL_SHUTDOWN
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   596
	default:
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   597
		User::Leave(KErrNotSupported);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   598
		break;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   599
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   600
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   601
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   602
#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   603
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   604
void CServShutdownSession::HandleShutdownEventL(const RMessage2& aMessage)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   605
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   606
	MSaveObserver::TSaveType action = static_cast <MSaveObserver::TSaveType> (aMessage.Int0());
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   607
	TBool powerOff = static_cast <TBool> (aMessage.Int1());
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   608
	TPowerState powerEvent = static_cast <TPowerState> (aMessage.Int2());
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   609
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   610
	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   611
	server->HandleShutdownEventL(action, powerOff, powerEvent);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   612
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   613
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   614
void CServShutdownSession::ClientArrayCount(const RMessage2& aMessage) const
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   615
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   616
	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   617
	const TInt count = server->ClientArrayCount();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   618
	aMessage.Write(0, TPckg<TInt>(count));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   619
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   620
/*
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   621
This function will write all registered client array in a buffer only when client side array count is equal to server side array count
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   622
else aMessage will contain an empty buffer and server side array count .
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   623
@param aMessage consists of buffer, clientside array count and server side array count 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   624
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   625
void CServShutdownSession::ClientArrayL(const RMessage2& aMessage)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   626
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   627
	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   628
	server->ClientArrayL(aMessage);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   629
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   630
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   631
void CServShutdownSession::IsClientHung(const RMessage2& aMessage) const
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   632
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   633
	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   634
	TThreadId threadId = static_cast <TThreadId>(aMessage.Int0());
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   635
	TBool clientHung = server->IsClientHung(threadId);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   636
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   637
	aMessage.Write(1, TPckg<TBool>(clientHung));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   638
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   639
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   640
void CServShutdownSession::GetShutdownState(const RMessage2& aMessage) const
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   641
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   642
	TBool powerOff;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   643
	TBool allSessionsHavePendingRequest;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   644
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   645
	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   646
	server->GetShutdownState(powerOff, allSessionsHavePendingRequest);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   647
	aMessage.Write(0, TPckg<TBool>(powerOff));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   648
	aMessage.Write(1, TPckg<TBool>(allSessionsHavePendingRequest));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   649
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   650
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   651
#endif 	//SYMBIAN_SSM_GRACEFUL_SHUTDOWN
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   652
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   653
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   654
Handles the servicing of client requests passed to the shutdown server.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   655
@param	aMessage The message containing the client request.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   656
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   657
EXPORT_C void CServShutdownSession::ServiceL(const RMessage2& aMessage)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   658
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   659
	TBool aCompleteRequest=ETrue;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   660
	TRAPD(error, DoServiceL(aMessage, aCompleteRequest));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   661
	if (aCompleteRequest)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   662
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   663
		aMessage.Complete(error);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   664
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   665
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   666
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   667
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   668
This method processes a client-side registration request. It is an asynchronous request,
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   669
which will be completed later, when powerdown/low memory event occurs.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   670
@param	aMessage The message containing the client request.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   671
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   672
void CServShutdownSession::RequestNotifyPowerDown(const RMessage2& aMessage)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   673
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   674
	iCurrentEvent=-1;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   675
	iPtr = aMessage;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   676
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   677
	if (iOutstandingEvent!=-1)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   678
		{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   679
		NotifySave((MSaveObserver::TSaveType)iOutstandingEvent);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   680
		iOutstandingEvent=-1;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   681
		}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   682
	//The thread variable is just a dummy variable(input for CServShutdownServer::HandlePowerNotifRequest)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   683
	//and is not used inside the function at all, it is there to preserve BC.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   684
	RThread thread;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   685
	static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()))->HandlePowerNotifRequest(thread);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   686
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   687
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   688
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   689
This method cancels the client registration, completing the requests with 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   690
KErrCancel error code.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   691
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   692
void CServShutdownSession::RequestNotifyPowerDownCancel()
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   693
	{
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   694
	if (HasPendingRequest())
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   695
		iPtr.Complete(KErrCancel);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   696
	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   697
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   698
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   699
@return The client's thread id.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   700
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   701
TThreadId CServShutdownSession::ClientThreadId() const
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   702
    {
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   703
    TThreadId id = NULL;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   704
    RThread clientThread;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   705
    //Clients which are not registered for notification will not have RMessage in the session and hence 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   706
	//thread id will be NULL(e.g.CLafShutdownEventObserverAdaptor). Avoid such clients. 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   707
    if(!iPtr.IsNull() && KErrNone == iPtr.Client(clientThread))
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   708
    	{	
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   709
		id = clientThread.Id();	
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   710
    	}
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   711
    clientThread.Close();	
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   712
    return id;
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   713
    }
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   714
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   715
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   716
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   717
This method should be used only with  SYSLIBS_TEST macro defined and can be used to 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   718
initiate a powerdown sequence.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   719
Without SYSLIBS_TEST macro defined the method will panic the client with 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   720
KErrNotSupported error code.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   721
@param	aMessage The message containing the client request.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   722
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   723
#ifdef SYSLIBS_TEST
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   724
void CServShutdownSession::PowerOffL(const RMessage2& aMessage)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   725
    {
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   726
	MSaveObserver::TSaveType action = static_cast <MSaveObserver::TSaveType> (aMessage.Int0());
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   727
    TBool powerOff = static_cast <TBool> (aMessage.Int1());
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   728
	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   729
    server->HandleShutdownEventL(action, powerOff);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   730
    }
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   731
#else
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   732
void CServShutdownSession::PowerOffL(const RMessage2& aMessage)
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   733
    {
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   734
    aMessage.Panic(__SHUTDOWN_SERVER_NAME, KErrNotSupported);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   735
    }
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   736
#endif//SYSLIBS_TEST
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   737
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   738
/**
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   739
This method should be used only with SYSLIBS_TEST macro defined and can be used to 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   740
get the power state of the server.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   741
Without SYSLIBS_TEST macro defined the method will panic the client with 
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   742
KErrNotSupported error code.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   743
@param	aMessage The message containing the client request.
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   744
*/
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   745
#ifdef SYSLIBS_TEST
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   746
void CServShutdownSession::PowerStateL(const RMessage2& aMessage) const
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   747
    {
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   748
    CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   749
    TBool powerOff = server->IsPowerOff();
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   750
    TPckg<TBool> powerOffPckg(powerOff);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   751
    aMessage.WriteL(0,powerOffPckg);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   752
    }
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   753
#else
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   754
void CServShutdownSession::PowerStateL(const RMessage2& aMessage) const
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   755
    {
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   756
    aMessage.Panic(__SHUTDOWN_SERVER_NAME, KErrNotSupported);
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   757
    }
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   758
#endif//SYSLIBS_TEST
c327db0664bb Upgrading Raptor from 2.10 to 2.13
mikek
parents:
diff changeset
   759