public void EffectsFromSQLResults(AbstractRunnable sender, FinishedQueueEventHandlerArgs e) { lock (loadLock) { sqlResults = e.GetSQLResults(); // return if there is nothing to process if ((sqlResults == null) || (sqlResults.Count < 2)) { return; } // convert the data-strings to their respective types ConvertSQLResults(sqlResults, colGetTypeInfo); var tableEffect = sqlResults[DBTableLoadOrder.IndexOf("Effect")]; var tableChange = sqlResults[DBTableLoadOrder.IndexOf("Change")]; List <IDAndChanges> idAndChangesList = null; if (!TryGenerateIDAndChanges(tableChange, out idAndChangesList)) { MakeLogError("Aborting effect generation due to" + " failed generation of Changes from raw database-data!"); return; } List <int> failedIndices; if (!TryGenerateEffects(idAndChangesList, out effectByID, out failedIndices)) { StringBuilder sb = new StringBuilder(); sb.Append("Failed to generate Effects with [temporary index | EffectID]: "); for (int i = 0; i < failedIndices.Count; i++) { sb.Append("["); sb.Append(i); sb.Append("|"); if ((failedIndices[i] < 0) || (failedIndices[i] > (idAndChangesList.Count - 1))) { sb.Append("?"); } else { sb.Append(failedIndices[i]); } sb.Append("],"); } MakeLogError(sb.ToString()); } } // no return value necessary because final results, effectsByID, is already saved as property in the loader }
public override void Run() { List <List <List <object> > > sqlResults = new List <List <List <object> > >(); DateTime queueStartTime, queueEndTime, queryStartTime, queryEndTime; // iterate over commandQueue and communicating with DB while invoking the events queueStartTime = DateTime.Now; for (int i = 0; i < commandQueue.Count; i++) { if (running == false) { // if aborted or suspended, exit even in midst of commandQueue if (waitHandle != null) { waitHandle.Set(); } return; } queryStartTime = DateTime.Now; DBReader.LoadFromDB(ref sqlResults, commandQueue[i], DataSource); queryEndTime = DateTime.Now; ReceivedResultsEventArgs rse = new ReceivedResultsEventArgs(DataSource, commandQueue[i], queryStartTime, queryEndTime, sqlResults); if (ReceivedResults != null) { ReceivedResults.Invoke(this, rse); } } queueEndTime = DateTime.Now; // send finishing event message to all listeners FinishedQueueEventHandlerArgs fqe = new FinishedQueueEventHandlerArgs(DataSource, commandQueue, queueStartTime, queueEndTime, sqlResults); if (FinishedQueue != null) { FinishedQueue.Invoke(this, fqe); } if (waitHandle != null) { waitHandle.Set(); } }
/// <summary> /// Event handler used to create visuals from completed database query. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void VisualsFromSQLResults(AbstractRunnable sender, FinishedQueueEventHandlerArgs e) { lock (loadLock) { sqlResults = e.GetSQLResults(); if (sqlResults == null) { return; } // convert the data-strings to their respective types ConvertSQLResults(sqlResults, colGetTypeInfo); var tableOverlayAniJob = sqlResults[DBTableLoadOrder.IndexOf("OverlayAniJobRelation")]; var tableOverlayModelDef = sqlResults[DBTableLoadOrder.IndexOf("ScriptOverlayModelDef")]; var tableAniJobModelDef = sqlResults[DBTableLoadOrder.IndexOf("ScriptAniJobModelDef")]; var tableScriptAni = sqlResults[DBTableLoadOrder.IndexOf("ScriptAni")]; var tableScriptOverlay = sqlResults[DBTableLoadOrder.IndexOf("ScriptOverlay")]; var tableScriptAniJob = sqlResults[DBTableLoadOrder.IndexOf("ScriptAniJob")]; var tableModelDef = sqlResults[DBTableLoadOrder.IndexOf("ModelDef")]; List <ScriptOverlayAniJobRelation> overlayAniJobRelations = MapOverlayAniJobRelations(tableOverlayAniJob); Dictionary <int, List <int> > overlayIDByModelDefID = MapOverlayByModelDef(tableOverlayModelDef); Dictionary <int, List <int> > aniJobIDByModelDefID = MapAniJobByModelDef(tableAniJobModelDef); Dictionary <int, ScriptAni> aniByID; if (!TryGenerateScriptAnis(tableScriptAni, out aniByID)) { MakeLogError("Failed to produce ScriptAni-objects from sql data. " + "Aborting Generation of Visuals."); return; } Dictionary <int, ScriptOverlay> overlayByID; if (!TryGenerateScriptOverlays(tableScriptOverlay, out overlayByID)) { MakeLogError("Failed to produce ScriptOverlay-objects from sql data. " + "Aborting Generation of Visuals."); return; } Dictionary <int, int> nextIDByAniJobID; Dictionary <int, ScriptAniJob> aniJobByID; if (!TryGenerateScriptAniJobs(tableScriptAniJob, aniByID, overlayByID, overlayAniJobRelations, out nextIDByAniJobID, out aniJobByID)) { MakeLogError("Failed to produce ScriptAniJob-objects from sql data. " + "Aborting Generation of Visuals."); return; } Dictionary <int, ModelDef> modelDefByID; if (!TryGenerateModelDefs(tableModelDef, overlayByID, aniJobByID, overlayIDByModelDefID, aniJobIDByModelDefID, nextIDByAniJobID, out modelDefByID)) { MakeLogError("Failed to produce ModelDef-objects from sql data. " + "Aborting Generation of Visuals."); return; } } }