Présentation de l'instance d'adaptateur

Lorsqu'une mappe s'exécute, un certain nombre d'objets sont créés (par exemple, une mappe et une carte). Chaque carte possède une instance d'adaptateur associée. L'instance d'adaptateur contient un certain nombre de propriétés qui déterminent le comportement de l'adaptateur. Le nombre et le type de ces propriétés sont définis via la méthode mpiObjectNewPropColl.

Lorsqu'une instance de votre adaptateur est requise, la méthode CreateAdapterInstance est appelée. Cette méthode doit appeler la méthode mpiAdapterCreate pour créer l'objet physique et associer la table virtuelle de l'adaptateur à l'objet. La table virtuelle de l'adaptateur possède la structure suivante :

struct MPI_ADAPTER_VTABLE
{
size_t nSize; /* size of this structure */
MPIRC (*pfCompareWatches)(HMPIADAPT hAdapter1,HMPIADAPT hAdapter2,
				MPICOMP *peComp);
MPIRC (*pfCompareResources)(HMPIADAPT hAdapter1,HMPIADAPT hAdapter2,
				MPICOMP *peComp);
MPIRC (*pfGet)(HMPIADAPT hAdapter,HMPICONNECT hConnection);
MPIRC (*pfPut)(HMPIADAPT hAdapter,HMPICONNECT hConnection);
MPIRC (*pfBeginTransaction)(HMPIADAPT hAdapter,HMPICONNECT hConnection);
MPIRC (*pfEndTransaction)(HMPIADAPT hAdapter,HMPICONNECT hConnection,
				MPITRANS eAction);
MPIRC (*pfListen)(HMPIADAPT hAdapter,HMPICONNECT hConnection);
MPIRC (*pfValidateProperties)(HMPIADAPT hAdapter);
MPIRC (*pfValidateConnection)(HMPIADAPT hAdapter,HMPICONNECT hConnection);
MPIRC (*pfCompareConnection)(HMPIADAPT hAdapter,HMPICONNECT hConnection,
				MPICOMP *peComp);
MPIRC (*pfOnNotify)(HMPIOBJ hObject, int iId, int iParam, HMPIOBJ hParam);
};
typedef struct MPI_ADAPTER_VTABLE MPI_ADAPTER_VTABLE;

Exemple CreateAdapterInstance

MPI_ADAPTER_VTABLE AdapterTable = { /* Initialize */ };
/* Define the adapter properties */
enum 
{
MYP_USERNAME = MPI_PROPBASE_USER,
MYP_PASSWORD,
MYP_SERVER
};

const static int AdapterProperties[] = 
{
MPI_PROP_TYPE_TEXT,  /* MYP_USERNAME */
MPI_PROP_TYPE_TEXT,  /* MYP_PASSWORD */
MPI_PROP_TYPE_TEXT   /* MYP_SERVER */ 
};   
#define NUM_ADAPTER_PROPERTIES (sizeof(AdapterProperties)/sizeof(int))

MPIRC CreateAdapterInstance(HMPIADAPT *phAdapter, HMPICARD hCard)
{
MPIRC rc;

rc = mpiAdapterCreate(phAdapter, hCard, &AdapterTable);

if (rc == MPI_SUCCESS)
{   
/* Define the number and type of adapter properties */
rc = mpiObjectNewPropColl(*phAdapter, 
MPI_PROPBASE_USER, 
NUM_ADAPTER_PROPERTIES, 
AdapterProperties);

/* Do any initialization of instance of adapter object */
}
return rc;
}

Exemple DestroyAdapterInstance

La méthode DestroyAdapterInstance doit faire la procédure inverse, c'est-à-dire qu'elle doit supprimer l'objet d'adaptateur et libérer les structures de données créées par la méthode de création. L’exemple de code suivant supprime un objet.

MPIRC DestroyAdapterInstance(HMPIADAPT hAdapter)
{
/* Free up any memory or data structures use by the adapter instance */
return (mpiObjectDestroy(hAdapter));
}