private static void HandleReachabilitySwitch(string newReachabilityStatusString)
 {
     if (newReachabilityStatusString != lastReachabilityStatusString)
     {
         if (lastReachabilityStatusString == "None")
         {
             // (B) Reporting Gained (2)
             Breadcrumbs.LeaveReachabilityBreadcrumb(
                 BreadcrumbReachabilityType.Gained,
                 newReachabilityStatusString);
         }
         else if (newReachabilityStatusString == "None")
         {
             // (B) Reporting Lost (3)
             Breadcrumbs.LeaveReachabilityBreadcrumb(
                 BreadcrumbReachabilityType.Lost,
                 newReachabilityStatusString);
         }
         else
         {
             // (C) Reporting Switch (4)
             Breadcrumbs.LeaveReachabilityBreadcrumb(
                 BreadcrumbReachabilityType.Switch,
                 lastReachabilityStatusString,
                 newReachabilityStatusString);
         };
         lastReachabilityStatusString = newReachabilityStatusString;
     }
     ;
 }
        /// <summary>
        /// Gets new session breadcrumbs.
        /// </summary>
        /// <returns>   The breadcrumbs. </returns>
        private static Breadcrumbs SessionStart(string name, int maxCount)
        {
            Breadcrumbs answer = null;

            try {
                // Breadcrumbs answer has previous_session == the previous current_session
                // and new current_session == empty but for new session_start breadcrumb .
                string path = Path.Combine(StorageHelper.CrittercismPath(), name + ".js");
                if (StorageHelper.FileExists(path))
                {
                    answer = StorageHelper.Load(path, typeof(Breadcrumbs)) as Breadcrumbs;
                }
                if (answer == null)
                {
                    answer = new Breadcrumbs(name, maxCount);
                }
                answer.previous_session = answer.current_session;
                answer.current_session  = new List <Breadcrumb>();
                if (name == "UserBreadcrumbs")
                {
                    Dictionary <string, Object> data = new Dictionary <string, Object>();
                    data["text"]  = "session_start";
                    data["level"] = (int)BreadcrumbTextType.Normal;
                    answer.current_session.Add(new Breadcrumb(BreadcrumbType.Text, data));
                }
            } catch (Exception ie) {
                Crittercism.LogInternalException(ie);
            };
            return(answer);
        }
        internal Breadcrumbs Copy()
        {
            Breadcrumbs answer = new Breadcrumbs(name, maxCount);

            lock (this) {
                answer.current_session  = new List <Breadcrumb>(current_session);
                answer.previous_session = new List <Breadcrumb>(previous_session);
            }
            return(answer);
        }
 internal static Breadcrumbs SystemBreadcrumbs()
 {
     lock (lockObject) {
         if (systemBreadcrumbs == null)
         {
             const int maxSystemBreadcrumbsCount = 100;
             systemBreadcrumbs = SessionStart("SystemBreadcrumbs", maxSystemBreadcrumbsCount);
         }
     }
     return(systemBreadcrumbs);
 }
 internal static Breadcrumbs NetworkBreadcrumbs()
 {
     lock (lockObject) {
         if (networkBreadcrumbs == null)
         {
             const int maxEndpointsCount = 10;
             networkBreadcrumbs = SessionStart("NetworkBreadcrumbs", maxEndpointsCount);
         }
     }
     return(networkBreadcrumbs);
 }
 internal static Breadcrumbs UserBreadcrumbs()
 {
     lock (lockObject) {
         if (userBreadcrumbs == null)
         {
             const int maxUserBreadcrumbsCount = 100;
             userBreadcrumbs = SessionStart("UserBreadcrumbs", maxUserBreadcrumbsCount);
         }
     }
     return(userBreadcrumbs);
 }
        internal static void HandleReachabilityUpDown(string newReachabilityStatusString)
        {
            // Checking IndexOf is zero allows "InternetAccess+WiFi" to also match.
            bool newInternetAccess  = (newReachabilityStatusString.IndexOf("InternetAccess") == 0);
            bool lastInternetAccess = (lastReachabilityStatusString.IndexOf("InternetAccess") == 0);

            if (newInternetAccess != lastInternetAccess)
            {
                // (A) Reporting Up or Down (0 or 1)
                if (newInternetAccess)
                {
                    Breadcrumbs.LeaveReachabilityBreadcrumb(
                        BreadcrumbReachabilityType.Up);
                }
                else
                {
                    Breadcrumbs.LeaveReachabilityBreadcrumb(
                        BreadcrumbReachabilityType.Down);
                };
            }
            ;
        }