upnpharvester/mdhserver/src/client/mdhclientsession.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:00 +0200
changeset 0 7f85d04be362
permissions -rw-r--r--
Revision: 200947 Kit: 200951

/*
* Copyright (c) 2007 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:      Metadata Harvester server's client
*
*/







// INCLUDE FILES

#include    "mdhclientsession.h"
#include    "mdhcommon.h"
#include    "msdebug.h"


// CONSTANTS
// Number of retries to start server
const TInt KServerRetries = 2;

// =========================== LOCAL FUNCTIONS ===============================

// ---------------------------------------------------------------------------
// StartServer
// Starts the CM Metadata Harvester server.
// Returns: TInt error: Error status of the CM Metadata Harvester startup.
// ---------------------------------------------------------------------------
//
// ---------------------------------------------------------------------------
// StartServer
// Creates a new process for the server and starts it up.
// ---------------------------------------------------------------------------
//
static TInt StartServer()
    {
    LOG(_L("[CmMdh Server]\t StartServer\n"));
    
    TInt result( KErrNone );
    // create server - if one of this name does not already exist
    TFindServer findServer( KCmMdhServerName );
    TFullName name;
    if ( findServer.Next( name ) != KErrNone ) // we don't exist already
        {
        
        TRequestStatus status( KRequestPending );
        RProcess server;
        // Create the server process
        result = server.Create( KCmMdhServerExe, KNullDesC );       
        if( result != KErrNone )
            {
            return result;
            }
    
        // Process created successfully
        server.Resume(); // start it going
        server.Rendezvous( status );
        
        // Wait until the completion of the server creation
        // server signals us when it's up
        User::WaitForRequest( status );
        
        
        if( status != KErrNone )
            {
            server.Close();
            return status.Int();
            }
            
        
        // Server created successfully
        server.Close(); // we can close the handle to server process now
        }
    return result;
    }


// ========================== MEMBER FUNCTIONS ===============================

// ---------------------------------------------------------------------------
// RCmMdhSession::RCmMdhSession
// C++ default constructor can NOT contain any code, that
// might leave.
// ---------------------------------------------------------------------------
//
RCmMdhSession::RCmMdhSession()
    {
    }


// ---------------------------------------------------------------------------
// RCmMdhSession::Connect
// Starts and creates a session of CM Metadata Harvester 
// ---------------------------------------------------------------------------
//
TInt RCmMdhSession::Connect()
    {
    TInt tryLoop = 0;
    TInt errCode = 0;

    for ( tryLoop = 0; tryLoop < KServerRetries; tryLoop++ )
        {
        errCode = CreateSession(KCmMdhServerName, 
            TVersion( KCmMdhServerMajor, KCmMdhServerMinor, 
                    KCmMdhServerBuild ) );
        //gives MessageSlots of -1
        //this uses global pool rather than local pool

        TRACE(Print(_L("[CmMdh Server]\t RCmMdhSession::Connect New Session \
                            created with status %d\n"), errCode));
        if( errCode == KErrNotSupported )
            {
            TRACE(Print(_L("[CmMdh Server]\t Version not supported!\n") ));
            return errCode;            
            }
        if ( errCode != KErrNotFound &&  errCode != KErrServerTerminated )
            {
            return errCode;
            }

        errCode = StartServer();

        if ( errCode != KErrNone && errCode != KErrAlreadyExists )
            {
            return errCode;
            }
            
        }
    return errCode;
    }

// ---------------------------------------------------------------------------
// RCmMdhSession::SearchMediaServers
// Searchs for neighborhood media servers
// ---------------------------------------------------------------------------
//
void RCmMdhSession::SearchMediaservers( TRequestStatus& aStatus )
    {
    LOG(_L("[CmMdh Server]\t RCmMdhSession::SearchMediaservers\n"));
    
    SendReceive(ECmMdhSearchMediaservers, TIpcArgs(), aStatus);
    }
    
    
// ---------------------------------------------------------------------------
// RCmMdhSession::Harvest
// Harvests and synchronizes metadata from found mediaservers
// ---------------------------------------------------------------------------
//
void RCmMdhSession::Harvest( TRequestStatus& aStatus )
    {
    LOG(_L("[CmMdh Server]\t RCmMdhSession::SearchMediaServers\n"));
    
    SendReceive(ECmMdhHarvest, TIpcArgs(), aStatus);
    }

// ---------------------------------------------------------------------------
// RCmMdhSession::Cancel
// ---------------------------------------------------------------------------
//
void RCmMdhSession::Cancel()
    {
    LOG(_L("[CmMdh Server]\t RCmMdhSession::Cancel\n"));
    
    SendReceive(ECmMdhCancel, TIpcArgs());
    }