public void Initialize(object objParam) { Log.Debug("init lineprovider"); eFileSyncResult fsr = LineSr.SyncRoutines(eUpdateType.Initialize, "Adding bet types from configuration", DalStationSettings.Instance.UseDatabaseForLine, null, delegate(object obj) { BetDomainMap.EnsureInstance(); return(false); }); ExcpHelper.ThrowIf(fsr == eFileSyncResult.Failed, "Cannot initialize Bet Types"); string sStationNumber = objParam as string; Debug.Assert(!string.IsNullOrEmpty(sStationNumber)); LiveBetClient.Initialize(sStationNumber); VirtualLiveBetClient.Initialize(sStationNumber); PreMatchClient.Initialize(sStationNumber); StatisticsClient.Initialize(sStationNumber); MetainfoClient.Initialize(sStationNumber); //TournamentFlagsClient.Initialize(objParam.ToString()); #if ADD_OUTRIGHT_XML ImportOutrightExample(); ImportOutrightExample(); #endif }
private static void ImportOutrightExample() { try { string sXml = TraceHelper.ReadTextFromFile("OutrightExample.xml"); SportRadarLineContainer srlc = SportRadarLineContainer.FromXmlString(sXml); eFileSyncResult fsr = LineSr.SyncRoutines(eUpdateType.PreMatches, string.Format("SportRadar Pre-Match Update. DataSyncCacheId = {0}", 1), true, null, delegate(object objParam) { return(ProviderHelper.MergeFromSportRadarLineContainer(srlc, 1)); }); } catch (Exception excp) { } }
private static void WorkerThread(ThreadContext tc) { while (m_bRunning) //(!m_bImportError) { try { int counter = 0; int iLiveQueueCount = m_sqMessages.Count; if (!m_liveClient.IsAlive) { m_sqMessages.Clear(); } else if (iLiveQueueCount > 0) { while (m_sqMessages.Count > 0) { counter++; LineContainer lc = m_sqMessages.Dequeue(); eFileSyncResult fsr = eFileSyncResult.Failed; Debug.Assert(lc != null); try { string sSrcTime = lc.Attributes["srctime"]; DateTimeSr dtSrcTime = DateTimeSr.FromString(sSrcTime); string sSrcDelay = (DateTime.UtcNow - dtSrcTime.UtcDateTime).ToString(); string sTime = lc.Attributes["time"]; DateTimeSr dt = DateTimeSr.FromString(sTime); TimeSpan ts = DateTime.UtcNow - dt.UtcDateTime; string sType = lc.Attributes.ContainsKey("line") ? lc.Attributes["line"] : "none"; m_logger.InfoFormat("Queue={0} Delay={1} Size={2}", iLiveQueueCount, ts, lc.OriginalXml.Length); if (ConfigurationManager.AppSettings["betradar_xml_files"] != null) { SaveXml(lc, "Live"); } fsr = LineSr.SyncRoutines(eUpdateType.LiveBet, string.Format("Host='{0}' Connected={1}; SrcDelay={2}; Delay={3}; Line={4}", m_sHost, DateTime.Now - m_dtConnected, sSrcDelay, ts, sType), DalStationSettings.Instance.UseDatabaseForLiveMatches, null, delegate(object objParam) { return(ProviderHelperNew.MergeFromLineContainer(lc)); }); } catch (Exception excp) { fsr = eFileSyncResult.Failed; m_logger.Excp(excp, "WorkerThread() ERROR for {0}", lc); } if (fsr == eFileSyncResult.Failed) { m_liveClient.Disconnect(); RemoveLiveMatches(eServerSourceType.BtrPre); RemoveLiveMatches(eServerSourceType.BtrLive); } } LineSr.ProcessDataSqlUpdateSucceeded(eUpdateType.LiveBet, string.Format("liveUpdate {0} messages", counter)); } } catch (Exception excp) { m_logger.Excp(excp, "WorkerThread() general ERROR"); } Thread.Sleep(10); } }
/* * private static bool DeleteMatches(IDbConnection conn, IDbTransaction transaction) * { * LineObjectCollection<MatchLn> locMatches = LineSr.Instance.ObjectsToRemove.GetLineObjectCollection<MatchLn>(); * * if (locMatches != null && locMatches.Count > 0) * { * IdentityList il = new IdentityList(); * * foreach (MatchLn mtch in locMatches.Values) * { * il.AddUnique(mtch.MatchId); * } * * string sMatchIds = il.FormatIds(); * * DataCopy.ExecuteScalar(conn, transaction, DELETE_MATCH_ODDS_QUERY, sMatchIds); * DataCopy.ExecuteScalar(conn, transaction, DELETE_MATCH_BETDOMAIN_QUERY, sMatchIds); * DataCopy.ExecuteScalar(conn, transaction, DELETE_MATCH_TO_GROUP_QUERY, sMatchIds); * DataCopy.ExecuteScalar(conn, transaction, DELETE_LIVE_MATCH_INFO_QUERY, sMatchIds); * DataCopy.ExecuteScalar(conn, transaction, DELETE_MATCHES_QUERY, sMatchIds); * * return true; * } * * return false; * } */ public static eFileSyncResult UpdateDatabase(IDbConnection conn, eUpdateType eut, string sProviderDescription, UpdateStatistics us) { eFileSyncResult fsr = eFileSyncResult.Failed; DateTime dtStart = DateTime.Now; string sErrorString = string.Empty; DataCopy dc = null; string sUpdateDescription = eut.ToString(); CheckTime ct = new CheckTime("UpdateAll({0}) Entered", sUpdateDescription); DictionaryOfLineObjectCollectionLight dlocToModify = LineSr.Instance.NewOrChangedObjects; DictionaryOfLineObjectCollectionLight dlocToDelete = LineSr.Instance.ObjectsToRemove; try { using (IDbTransaction transaction = conn.BeginTransaction()) { dc = new DataCopy(conn, transaction, sUpdateDescription); try { UpdatesLn updatesLn = new UpdatesLn(eut, string.Format("Saving {0} and Deleting {1} line tables", dlocToModify.Count, dlocToDelete.Count), sProviderDescription); updatesLn.Save(conn, transaction); Debug.Assert(updatesLn.UpdateId > 0); // Insert or Update objects dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <TaggedStringLn>(), TaggedStringLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <TimeTypeLn>(), TimeTypeLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <ScoreTypeLn>(), ScoreTypeLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <BetTypeLn>(), BetTypeLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <BetDomainTypeLn>(), BetDomainTypeLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <GroupLn>(), GroupLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <CompetitorLn>(), CompetitorLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <MatchLn>(), MatchLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <CompetitorToOutrightLn>(), CompetitorToOutrightLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <LiveMatchInfoLn>(), LiveMatchInfoLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <MatchResultLn>(), MatchResultLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <MatchToGroupLn>(), MatchToGroupLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <BetDomainLn>(), BetDomainLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <ResourceRepositoryLn>(), ResourceRepositoryLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <ResourceAssignmentLn>(), ResourceAssignmentLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <CompetitorInfosLn>(), CompetitorInfosLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <MatchInfosLn>(), MatchInfosLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <TournamentInfosLn>(), TournamentInfosLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <OddLn>(), OddLn.TableSpec, updatesLn); //dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection<LiabilityLn>(), LiabilityLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <LanguageLn>(), LanguageLn.TableSpec, updatesLn); dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection <MultistringGroupLn>(), MultistringGroupLn.TableSpec, updatesLn); //dc.InsertOrUpdate(dlocToModify.GetLineObjectCollection<TournamentMatchLocksLn>(), TournamentMatchLocksLn.TableSpec, updatesLn); // Delete Objects dc.DeleteObjects(dlocToDelete.GetLineObjectCollection <OddLn>(), OddLn.TableSpec); dc.DeleteObjects(dlocToDelete.GetLineObjectCollection <BetDomainLn>(), BetDomainLn.TableSpec); dc.DeleteObjects(dlocToDelete.GetLineObjectCollection <MatchToGroupLn>(), MatchToGroupLn.TableSpec); dc.DeleteObjects(dlocToDelete.GetLineObjectCollection <LiveMatchInfoLn>(), LiveMatchInfoLn.TableSpec); dc.DeleteObjects(dlocToDelete.GetLineObjectCollection <CompetitorToOutrightLn>(), CompetitorToOutrightLn.TableSpec); dc.DeleteObjects(dlocToDelete.GetLineObjectCollection <MatchLn>(), MatchLn.TableSpec); if (dc.Statistics.IsInsrtedOrUpdatedOrDeleted) { // DK: If You like to test data import then uncomment line bellow: // throw new SystemException("Developer Exception: Always rollback transaction for test purposes"); transaction.Commit(); fsr = eFileSyncResult.Succeeded; ct.AddEvent("Commited"); } else { transaction.Rollback(); fsr = eFileSyncResult.Skipped; ct.AddEvent("Rolled Back"); } if (us != null) { us.Append(dc.Statistics); } } catch (Exception excp) { transaction.Rollback(); m_logger.Excp(excp, "UpdateAllWithSqlBulkCopy General Transaction Exception"); } finally { DateTime dtEnd = DateTime.Now; if (fsr != eFileSyncResult.Skipped) { // DK: Let's write to log ONLY Succeeded or Failed file syncrhonization info. string sInfo = @" {7} UpdateAllWithSqlBulkCopy({0}) {1} {2} {3} Start: {4}; End: {5}; Time: {6}; "; m_logger.InfoFormat( sInfo, // Format sProviderDescription, // Provider Description fsr, // Result sErrorString, // Errors if any dc.Statistics, // Statistic dtStart, dtEnd, dtEnd - dtStart, // Time sUpdateDescription); // LiveBet or PreMatch } else { m_logger.InfoFormat("{0} UpdateAllWithSqlBulkCopy Skipped. Time: {1}", sUpdateDescription, dtEnd - dtStart); } if (fsr == eFileSyncResult.Succeeded) { } ct.AddEvent("UpdateAll({0}) completed", sUpdateDescription); ct.Info(m_logger); } } // } } catch (Exception excp) { sErrorString += ExcpHelper.FormatException(excp, "UpdateAllWithSqlBulkCopy General Exception"); m_logger.Error(sErrorString, excp); } return(fsr); }
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); }