IMPSengine/ImpsIpCirWatcher/ImpsUdpIpCirWatcher/inc/UdpCirWatcher.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:41:52 +0200
changeset 0 094583676ce7
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2003 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: CirWatcher for UDP
*
*
*/


#ifndef __UDPCIRWATCHER__
#define __UDPCIRWATCHER__

// INCLUDES
#include <in_sock.h>
#include <es_sock.h>
#include "ImpsIpCirWatcherAPI.h"



//FORWARD DECLARATIONS
class CUdpSocketListener;
class MImpsConnectionManager;

// CLASS DECLARATION
class CUdpCirWatcher : public CImpsUdpCirWatcher

    {
    public:  // Constructors and destructor

        /**
        * Symbian OS default constructor.
        * @param aPingInterval Interval of the ping requests
        * @param aConnManager Reference to the active connection manager
        */
        static CUdpCirWatcher* NewL();

        /**
        * Symbian OS default constructor.
        * @param aPingInterval Interval of the ping requests
        * @param aConnManager Reference to the active connection manager
        */
        void RegisterCirReceiverL( const MImpsCirReceiver& aCirReceiver,
                                   const TInt aServicePort = KDefaultUDPPortNumber );

        /**
        * Symbian OS default constructor.
        * @param aPingInterval Interval of the ping requests
        * @param aConnManager Reference to the active connection manager
        */
        void UnregisterCirReceiverL( const MImpsCirReceiver& aCirReceiver );

        /**
        * Reset all watchers on a specified port. By default resets
        * all watchers on all ports!
        * @param TInt The port to reset; by default all ports
        * @return void
        */
        void Reset( const TInt aServicePort = KErrArgument );

        /**
        * Symbian OS default constructor.
        * @param aPingInterval Interval of the ping requests
        * @param aConnManager Reference to the active connection manager
        */
        virtual void DeleteSingleton();

        /**
        * Symbian OS default constructor.
        * @param aPingInterval Interval of the ping requests
        * @param aConnManager Reference to the active connection manager
        */
        virtual void Destroy();

        /**
        * Destructor.
        */
        virtual ~CUdpCirWatcher();

    public:   //New functions

        /**
        * Symbian OS default constructor.
        * @param aPingInterval Interval of the ping requests
        * @param aConnManager Reference to the active connection manager
        */
        static void WriteToLog( TRefByValue<const TDesC8> aFmt, ... );

    private:

        /**
        * Symbian OS second-phase constructor.
        */
        void ConstructL();

        /**
        * C++ default constructor is private
        */
        CUdpCirWatcher();

        /**
        * C++ default constructor is private
        */
        void DeleteLogFileL();

        /**
        * Increase the number of clients for this singleton
        * @return void
        */
        void IncreaseReferenceCount();

        /**
        * Return the current reference count for the singleton object.
        * Comes in handy at least in testing.
        * @return TInt Current reference count
        */
        void DecreaseReferenceCount();

        /**
        * Return the current reference count for the singleton object.
        * Comes in handy at least in testing.
        * @return TInt Current reference count
        */
        const TInt ReferenceCount() const;

        /**
        * Return the current reference count for the singleton object.
        * Comes in handy at least in testing.
        * @return TInt Current reference count
        */
        void StoreDestructorKeyL( const TUid aDestructorKey );

        /**
        * Symbian OS default constructor.
        * @param aPingInterval Interval of the ping requests
        * @param aConnManager Reference to the active connection manager
        */
        TBool FindListenerL( const TInt aServicePort,
                             const MImpsCirReceiver& aCirReceiver );

        /**
        * Symbian OS default constructor.
        * @param aPingInterval Interval of the ping requests
        * @param aConnManager Reference to the active connection manager
        */
        CUdpSocketListener* FindListener( TInt& aIndex,
                                          const TInt aServicePort ) const;

        /**
        * Symbian OS default constructor.
        * @param aPingInterval Interval of the ping requests
        * @param aConnManager Reference to the active connection manager
        */
        TInt CreateListenerL( const TInt aServicePort,
                              const MImpsCirReceiver& aCirReceiver );

    private: //Data

        TInt                                        iReferenceCount;
        RSocketServ                                 iSocketSession;
        RPointerArray<CUdpSocketListener>           iListenerQueue;
    };

#endif

// End of File