コード例 #1
0
ファイル: LineSr.cs プロジェクト: RemSoftDev/SportBetting
        public static eFileSyncResult SyncRoutines(eUpdateType eut, string sProviderDescription, bool bUseDatabase, UpdateStatistics us, DelegateMerge dm)
        {
            Debug.Assert(dm != null);

            CheckTime ct = new CheckTime(true, "SyncRoutines(UseDatabase={0}) entered", bUseDatabase);

            /*
             * if (DalStationSettings.Instance.EnableRunProcessControl)
             * {
             *  string sInfo = SystemControl.GetSystemInfo() + "\r\n" + ProcessControl.Current.ToDetailedString();
             *  m_logger.Info(sInfo);
             *
             #if DEBUG
             *  m_logger.Info(ProcessControl.Current.GetThreadSummary());
             #endif
             *
             *  ct.AddEvent("Control completed");
             * }
             */

            try
            {
                eFileSyncResult fsr = eFileSyncResult.Failed;

                lock (m_oUpdateLocker)
                {
                    ct.AddEvent("Inside of lock");

                    LineSr.Instance.NewOrChangedObjects.UnsetPropertiesChanged();
                    LineSr.Instance.NewOrChangedObjects.Clear();

                    bool bProcessUpdateSucceeded = false;

                    lock (m_oReadLocker)
                    {
                        ct.AddEvent("Cache Update Started");
                        bProcessUpdateSucceeded = dm(null);
                        ct.AddEvent("Cache Update Completed ({0}, {1})", LineSr.Instance.NewOrChangedObjects.Count, LineSr.Instance.ObjectsToRemove.Count);
                    }

                    if (bUseDatabase)
                    {
                        // We use database to store Live Data
                        fsr = DataCopy.UpdateDatabase(ConnectionManager.GetConnection(), eut, sProviderDescription, us);
                        ct.AddEvent("Database Update Completed");

                        if (fsr == eFileSyncResult.Succeeded)
                        {
                            LineSr.Instance.NewOrChangedObjects.NotifyPropertiesChanged();
                            DatabaseCache.Instance.AddNewObjectsAfterCommit();
                            DatabaseCache.Instance.RemoveObjectsAfterCommit();
                            LineSr.Instance.ObjectsToRemove.Clear();

                            ct.AddEvent("Routines Completed (fsr=Succeeded)");
                        }
                        else
                        {
                            ct.AddEvent("Routines Completed (fsr=Skipped or Failed)");
                        }
                    }
                    else
                    {
                        // We DON'T use database to store Live Data
                        fsr = eFileSyncResult.Succeeded;
                        LineSr.Instance.NewOrChangedObjects.NotifyPropertiesChanged();
                        ct.AddEvent("Routines Completed");
                    }

                    if (fsr == eFileSyncResult.Succeeded && bProcessUpdateSucceeded)
                    {
                        ct.AddEvent("ProcessDataSqlUpdateSucceeded() Completed");
                    }
                }

                return(fsr);
            }
            catch (Exception excp)
            {
                LineSr.Instance.ObjectsToRemove.Clear();
                m_logger.Excp(excp, "SyncRoutines(eUpdateType={0}, sProviderDescription='{1}') ERROR", eut, sProviderDescription);

                ct.AddEvent("Exception Completed");
                ct.Error(m_logger);
            }
            finally
            {
                ct.AddEvent("Completed");
                ct.Info(m_logger);
            }

            return(eFileSyncResult.Failed);
        }