1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| public class RegistreDynamique
{
/// <summary>
/// Ce tableau contient tous les éléments correspondant aux messages envoyés. A chaque message envoyé, on ajoutera un élément au tableau.
/// Ce tableau permet de connaître l'état de chaque message envoyé: reçu/non reçu, à quel moment a-t-on reçu le dernier message?
/// </summary>
static List<ElemRegistre> m_TabDynamique = new List<ElemRegistre>();
/// <summary>
/// Cet entier correspond au TickCount (TC) de la dernière réception d'un message.
/// </summary>
private static int m_dernierTCenvoyeNonRecu;
private static int m_IDdernierRecu;
/// <summary>
/// Retourne l'indice de l'élément correspondant à l'ID de celui-ci.
/// ex: A cause du Garbage Collector, certains éléments sont supprimés au fur et à mesure. Du fait du réajustage des indices lors d'une suppression, on peut avoir un élément dont l'identifiant et 42 mais dont l'indice est 11.
/// </summary>
/// <param name="ID">ID de l'élément cherché.</param>
/// <returns>Idince correspondant à l'identifiant. Si le message n'a pas été trouvé, retourne -1.</returns>
public static int indiceID (int ID)
{
lock (m_TabDynamique)
{
m_TabDynamique.Sort();
foreach (ElemRegistre elem in m_TabDynamique)
{
if (elem.statusID() == ID)
{
CEventLog.OnDebug(" dans IndiceID IDdemande = " + ID.ToString() + "; IDdonne = " + m_TabDynamique.IndexOf(elem).ToString());
return m_TabDynamique.IndexOf(elem);
}
}
}
return -1;
}
/// <summary>
/// Cette méthode crée un élément correspondant au message envoyé et l'ajoute au registre.
/// </summary>
/// <param name="ID">IDentifidant du message envoyé (et donc de l'élément).</param>
public static void ajoutRegistre (int ID, int TCaEnvoi)
{
//
ElemRegistre myElem = new ElemRegistre(ID, TCaEnvoi);
lock (m_TabDynamique)
{
m_TabDynamique.Add(myElem);
}
CEventLog.OnWarning(" Dans ajoutRegistre ID = " + myElem.statusID().ToString() + " ; flag = " + myElem.statusFlag().ToString());
}
/// <summary>
/// Méthode qui permet de récupérer le TickCount de l'envoi du dernier message envoyé non reçu.
/// Cette valeur est nécessaire pour connaitre le délai d'attente sur le réseau.
/// </summary>
public static void verifEtat()
{
m_dernierTCenvoyeNonRecu = 0;
CEventLog.OnWarning("IDdernierRecu= " + m_IDdernierRecu.ToString());
lock (m_TabDynamique)
{
foreach (ElemRegistre elem in m_TabDynamique)
{
if (elem.statusFlag() == false && elem.statusID() > m_IDdernierRecu)
{
m_dernierTCenvoyeNonRecu = elem.statusTC();
CEventLog.OnWarning("Dans verifEtat ID = " + elem.statusID().ToString() + " ; TC = " + elem.statusTC().ToString());
}
}
}
}
/// <summary>
/// Méthode qui change le flag du message reçu dans le tableau, pour informer qu'il a bien été réceptionné.
/// </summary>
/// <param name="ID">Identifiant du message reçu</param>
public static void accuseReception(int ID)
{
m_IDdernierRecu = ID;
lock (m_TabDynamique)
{
foreach (ElemRegistre elem in m_TabDynamique)
{
if (elem.statusID() == ID)
{
elem.changeFlag(true);
CEventLog.OnWarning("Dans accuseReception : flag change");
}
}
}
}
/// <summary>
/// Méthode qui permet de connaître le TickCount (TC) de la dernière réception.
/// </summary>
/// <returns></returns>
public static int valeurDernierTCenvoyeNonRecu()
{
return m_dernierTCenvoyeNonRecu;
}
} |