예제 #1
0
        /// ///////////////////////////////////////////////////
        public CSessionClient GetSessionClient(int nIdSession)
        {
            CSessionClientSurServeur sessionServeur = (CSessionClientSurServeur)m_listeSessions[nIdSession];

            if (sessionServeur != null)
            {
                return(sessionServeur.SessionClient);
            }
            return(null);
        }
예제 #2
0
        /// ///////////////////////////////////////////////////
        public static void CloseSession(CSessionClientSurServeur session)
        {
            CDonneeNotificationConnection donnee = new CDonneeNotificationConnection(session.IdSession, false);

            CEnvoyeurNotification.EnvoieNotifications(new IDonneeNotification[] { donnee });

            lock (typeof(CLockerListeSessions))
            {
                m_listeSessions.Remove(session.IdSession);
            }

            CSessionClient.OnCloseSessionServeur(session.IdSession);
        }
예제 #3
0
 // Notify a handler that an object has been disconnected.
 public void DisconnectedObject(Object obj)
 {
     if (obj is CSessionClientSurServeur)
     {
         bool bConnected = false;
         CSessionClientSurServeur session = (CSessionClientSurServeur)obj;
         try
         {
             CSessionClientSurServeur sc = CGestionnaireSessions.GetSessionClientSurServeurStatic(session.IdSession) as CSessionClientSurServeur;
             if (CGestionnaireSessions.IsSessionOpenStatic(session.IdSession))
             {
                 //
                 try
                 {
                     //Tente de contacter la session cliente
                     bConnected = sc == null || sc.SessionClient.IsConnected;
                 }
                 catch
                 {
                 }
                 if (!bConnected)
                 {
                     string strMessage = I.T("Auto disconnection session number @1|109", session.IdSession.ToString()) +
                                         I.T("\r\n|108") + I.T("Type|107") + session.TypeApplicationCliente.ToString();
                     strMessage += I.T("\r\n|108") + session.DescriptionApplicationCliente;
                     try
                     {
                         strMessage += I.T("\r\n|108") + session.GetInfoUtilisateur().NomUtilisateur;
                     }
                     catch
                     { }
                     C2iEventLog.WriteErreur(strMessage);
                 }
             }
         }
         catch {}
         if (!bConnected)
         {
             session.CloseSession();
         }
     }
 }
예제 #4
0
        /// ///////////////////////////////////////////////////
        public CResultAErreur OpenSession(CSessionClient sessionSurClient)
        {
            CResultAErreur result = CResultAErreur.True;

            result = CanOpenSession(sessionSurClient);
            if (result)
            {
                sessionSurClient.IdSession = m_nNumNextSession++;
                CSessionClientSurServeur sessionSurServeur = GetNewSessionSurServeur(sessionSurClient, result.Data);
                result.Data = null;
                if (sessionSurServeur == null)
                {
                    result.EmpileErreur(I.T("Server session allocation impossible|105"));
                }
                else
                {
                    sessionSurClient.SessionSurServeur = sessionSurServeur;
                    lock (typeof(CLockerListeSessions))
                    {
                        m_listeSessions[sessionSurClient.IdSession] = sessionSurServeur;
                    }
                    string strMessage = I.T("Session Connection number @1|106", sessionSurClient.IdSession.ToString()) +
                                        I.T("\r\n|108") + I.T("Type|107") + sessionSurClient.TypeApplicationCliente.ToString();
                    strMessage += I.T("\r\n|108") + sessionSurServeur.DescriptionApplicationCliente;
                    try
                    {
                        strMessage += I.T("\r\n|108") + sessionSurClient.GetInfoUtilisateur().NomUtilisateur;
                    }
                    catch
                    {}
                    C2iEventLog.WriteInfo(strMessage, NiveauBavardage.VraiPiplette);
                    CDonneeNotificationConnection donnee = new CDonneeNotificationConnection(sessionSurClient.IdSession, true);
                    CEnvoyeurNotification.EnvoieNotifications(new IDonneeNotification[] { donnee });
                }
            }
            return(result);
        }
예제 #5
0
        /// ///////////////////////////////////////////////////
        public static void NettoieSessions(object state)
        {
            try
            {
                StringBuilder blInfo = new StringBuilder();
                blInfo.Append("Sessions cleaning : " + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "\r\n");
                foreach (DictionaryEntry entry in new ArrayList(m_listeSessions))
                {
                    try
                    {
                        int nIdSession = (int)entry.Key;
                        blInfo.Append("Session ");
                        blInfo.Append(nIdSession);
                        CSessionClientSurServeur sessionServeur = (CSessionClientSurServeur)entry.Value;
                        CSessionClient           session        = CSessionClient.GetSessionForIdSession(nIdSession);
                        bool bIsConnected = false;
                        try
                        {
                            bIsConnected = session.IsConnected;
                            if (bIsConnected)
                            {
                                sessionServeur.DateHeureLastTestSessionClientSuccess = DateTime.Now;
                            }
                        }
                        catch
                        {
                            blInfo.Append("/Disconnected from client/");
                        }
                        if (session == null || !bIsConnected)
                        {
                            TimeSpan sp = DateTime.Now - sessionServeur.DateHeureLastTestSessionClientSuccess;
                            if (sp.TotalMinutes > LifetimeServices.SponsorshipTimeout.Minutes)
                            {
                                blInfo.Append("/Closing/");
                                C2iEventLog.WriteInfo("Loose " + nIdSession + " Automatic disconnect", NiveauBavardage.PetiteCausette);
                                try
                                {
                                    sessionServeur.CloseSession();
                                }
                                catch
                                {
                                    CloseSession(sessionServeur);
                                }

                                blInfo.Append("/Closed/");
                            }
                        }
                        else
                        {
                            blInfo.Append("/active/");
                        }
                        blInfo.Append(Environment.NewLine);
                    }
                    catch {
                        blInfo.Append("ERROR \r\n");
                    }
                }
                C2iEventLog.WriteInfo(blInfo.ToString(), NiveauBavardage.VraiPiplette);
            }
            catch {}
        }
예제 #6
0
        /// ///////////////////////////////////////////////////
        public static ISessionClientSurServeur GetSessionClientSurServeurStatic(int nIdSession)
        {
            CSessionClientSurServeur sessionServeur = (CSessionClientSurServeur)m_listeSessions[nIdSession];

            return(sessionServeur);
        }
 /// //////////////////////////////////////////////////////////////////////////
 public static void Autoexec()
 {
     CSessionClientSurServeur.RegisterFournisseurTransactions(new CFournisseurTransactionsNotifications());
 }