datacommsserver/esockserver/inc/ss_select.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/inc/ss_select.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,145 @@
+// Copyright (c) 1997-2009 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:
+//
+
+/**
+ @file
+ @internalTechnology
+ @released
+*/
+
+#if !defined(__SS_SELECT_H__)
+#define __SS_SELECT_H__
+
+#include <e32base.h>
+#include <s32std.h>
+
+namespace ESock
+{
+class ISelectionNotify;
+class MProviderSelector
+/**
+ @internalTechnology
+ */
+	{
+public:
+	virtual void Cancel() = 0;
+	virtual void SelectL(ISelectionNotify& aSelectionNotify) = 0;
+	virtual ~MProviderSelector() {};
+	};
+
+class CMetaConnectionProviderBase;
+typedef void (*TSelectCompleteFn)(TAny*, MProviderSelector*, CMetaConnectionProviderBase*);
+typedef void (*TStateChangeNotificationFn)(TAny*, MProviderSelector*, TInt, TInt);
+typedef void (*TErrorFn)(TAny*, MProviderSelector*, TInt);
+typedef void (*TAnyFn)(TAny*);
+
+class ISelectionNotify
+/**
+ @internalTechnology
+ */
+	{
+public:
+	enum
+		{
+		KCallbacksCount = 3
+		};
+	
+public:
+	ISelectionNotify() :
+		iThis(NULL),
+		iInterfaceVTable(NULL)
+		{
+		}
+
+	ISelectionNotify(TAny* aThis, const TAnyFn& aInterfaceVTable) :
+		iThis( aThis ),
+		iInterfaceVTable( &aInterfaceVTable )
+		{
+		}
+
+	void SelectComplete(MProviderSelector* aSelector, CMetaConnectionProviderBase* aProvider)
+	    {
+	    if ( Check(1) )
+    	    {
+   	    	((TSelectCompleteFn)(iInterfaceVTable[1]))(iThis, aSelector, aProvider);
+    	    }
+	    }
+	
+	void StateChangeNotification(MProviderSelector* aSelector, TInt aStage, TInt aError)
+	    {
+	    if ( Check(2) )
+    	    {
+    	    ((TStateChangeNotificationFn)iInterfaceVTable[2])(iThis, aSelector, aStage, aError);
+    	    }
+	    }
+
+	void Error(MProviderSelector* aSelector, TInt aError)
+	    {
+	    if ( Check(3) )
+    	    {
+    	    ((TErrorFn)iInterfaceVTable[3])(iThis, aSelector, aError);
+    	    }
+	    }
+
+private:
+	TBool Check( TInt nFn )
+		{
+		return iInterfaceVTable && (TInt)iInterfaceVTable[0] >= nFn && iInterfaceVTable[nFn];
+		}
+
+private:
+	TAny* iThis;
+	TAnyFn const* iInterfaceVTable;
+	};
+
+
+template <class TCLIENT>
+class TSelectionNotify
+/**
+ @internalTechnology
+ */
+	{
+public:
+	static void SelectComplete(TAny* aThis, MProviderSelector* aSelector, CMetaConnectionProviderBase* aProvider);
+	static void StateChangeNotification(TAny* aThis, MProviderSelector* aSelector, TInt aStage, TInt aError);
+	static void SelectError(TAny* aThis, MProviderSelector* aSelector, TInt aError);
+	};
+	
+template <class TCLIENT>
+void TSelectionNotify<TCLIENT>::SelectComplete(TAny* aThis, MProviderSelector* aSelector, CMetaConnectionProviderBase* aProvider)
+	{
+	TCLIENT* me = (TCLIENT*)aThis;
+	me->SelectComplete(aSelector,aProvider);
+	}
+
+template <class TCLIENT>
+void TSelectionNotify<TCLIENT>::StateChangeNotification(TAny* aThis, MProviderSelector* aSelector, TInt aStage, TInt aError)
+	{
+	TCLIENT* me = (TCLIENT*)aThis;
+	me->StateChangeNotification(aSelector,aStage,aError);
+	}
+
+template <class TCLIENT>
+void TSelectionNotify<TCLIENT>::SelectError(TAny* aThis, MProviderSelector* aSelector, TInt aError)
+	{
+	TCLIENT* me = (TCLIENT*)aThis;
+	me->SelectError(aSelector,aError);
+	}
+
+
+} //namespace ESock
+
+#endif //__SS_SELECT_H__
+