Processus de connexion CBasePin

Cette section décrit comment la classe CBasePin implémente le processus de connexion de code confidentiel.

le gestionnaire de Graph de filtre lance toutes les connexions de code confidentiel. elle appelle la méthode IPin :: Connecter de la broche de sortie, en spécifiant la broche d’entrée. La broche de sortie termine la connexion en appelant la méthode IPIN :: ReceiveConnection du code confidentiel d’entrée. La broche d’entrée peut accepter ou refuser la connexion.

le gestionnaire de Graph de filtre peut également spécifier un type de média pour la connexion. Si c’est le cas, les broches essaient de se connecter avec ce type. Si ce n’est pas le cas, les broches doivent négocier le type. le gestionnaire de Graph de filtre peut également spécifier un type de média partiel , qui a la valeur GUID _ NULL pour le type principal, le sous-type ou le type de format. Dans ce cas, les broches essaient de correspondre aux parties du type de média spécifiées ; la valeur du GUID _ null agit comme un caractère générique.

la méthode CBasePin :: Connecter commence par vérifier que le code confidentiel peut accepter une connexion. Par exemple, il vérifie que le pin n’est pas déjà connecté. Elle délègue le reste du processus de connexion à la méthode CBasePin :: AgreeMediaType . Tout ce qui suit est effectué par AgreeMediaType.

Si le type de média est entièrement spécifié, le code PIN appelle la méthode CBasePin :: AttemptConnection pour tenter la connexion. Dans le cas contraire, il tente des types de médias dans l’ordre suivant :

  1. Types préférés de la broche d’entrée.
  2. Types préférés de la broche de sortie.

Vous pouvez inverser cet ordre en affectant à l’indicateur CBasePin :: m _ BTryMyTypesFirst la valeur true.

Dans chaque cas, le code PIN appelle IPIN :: EnumMediaTypes pour énumérer les types de médias. Cette méthode récupère un objet énumérateur, qui est passé à la méthode CBasePin :: TryMediaTypes . La méthode TryMediaTypes parcourt chaque type de média et appelle AttemptConnection pour chaque type.

Dans la méthode AttemptConnection , la broche de sortie appelle les méthodes suivantes :

Notez les points suivants :

  • CheckConnect est une méthode virtuelle. Dans la classe de base, cette méthode vérifie si les directions de code confidentiel sont compatibles. Les broches de sortie doivent se connecter aux broches d’entrée, et vice versa. La classe pin dérivée se substitue généralement à cette méthode pour effectuer d’autres vérifications. Par exemple, il peut interroger l’autre code confidentiel pour une interface requise pour la connexion. Si la classe dérivée se substitue à CheckConnect, elle doit également appeler la méthode CBasePin .
  • CheckMediaType est une méthode virtuelle pure, que la classe dérivée doit implémenter.
  • CompleteConnect est une méthode virtuelle qui ne fait rien dans la classe de base. Les classes dérivées peuvent substituer cette méthode pour exécuter tout travail supplémentaire nécessaire pour terminer la connexion, par exemple pour choisir un allocateur de mémoire.

Si l’une de ces étapes échoue, la broche de sortie appelle la méthode CBasePin :: BreakConnect pour annuler toutes les étapes effectuées par CheckConnect.

La méthode ReceiveConnection de la broche d’entrée appelle les méthodes CheckConnect, CheckMediaTypeet CompleteConnect du code confidentiel d’entrée. Si l’une de ces erreurs échoue, la tentative de connexion échoue également.

Le diagramme suivant illustre le processus de connexion dans CBasePin:

processus de connexion cbasepin

CBasePin