/// <summary> /// Parse a json object into a list of atoms (smallest unit that describes a sequence, pattern, or experience) /// </summary> /// <typeparam name="T">The json atom type</typeparam> /// <param name="dict">The raw json object</param> /// <returns>A dictionary representing the list of haptic effect IDs and their associated atoms</returns> public static DefDictionary <TAtomType> parseDefinitionsDict <TAtomType>(IDictionary <string, object> dict) where TAtomType : IJsonDeserializable, new() { //setup a dictionary from string -> list of atoms for our result DefDictionary <TAtomType> resultDict = new DefDictionary <TAtomType>(); foreach (var kvp in dict) { IList <object> atoms = kvp.Value as IList <object>; //make sure to instantiate the list for this key resultDict.Add(kvp.Key, new List <TAtomType>()); foreach (var atom in atoms) { TAtomType a = new TAtomType(); a.Deserialize(atom as IDictionary <string, object>); resultDict[kvp.Key].Add(a); } } return(resultDict); }
public bool GetDevices(string directory) { try { string[] files = Directory.GetFiles(directory); Parallel.ForEach( files, f => { try { Definition d = new Definition(f); if (d.isBase) { d.LoadRomId(); } lock (DefDictionary) { if (DefDictionary.ContainsKey(d.internalId)) { Trace.WriteLine("Duplicate definition found for: " + d.internalId + " in file: " + f + " Check the definitions!!"); Trace.WriteLine("Definition was previously found in file: " + DefDictionary[d.internalId].defPath); } else { DefDictionary.Add(d.internalId, d); lock (IdentList) { IdentList.Add(d.internalId); DeviceCount++; } } } } catch (System.Exception excpt) { Trace.WriteLine("Error reading XML file " + f); Trace.WriteLine(excpt.Message); } }); List <string> directories = Directory.GetDirectories(directory).ToList(); Parallel.ForEach( directories, d => { if (!GetDevices(d)) { return; } }); return(true); } catch (System.Exception excpt) { Trace.WriteLine(excpt.Message); } return(false); }
public bool GetDevices(string directory) { try { string[] files = Directory.GetFiles(directory); //Parallel.ForEach( // files, f => foreach (var f in files) { try { ECUMetaData d = new ECUMetaData(this, f); if (d.isBase) { d.Populate(); } lock (DefDictionary) { if (DefDictionary.ContainsKey(d.calibrationlId)) { Trace.WriteLine("Duplicate definition found for: " + d.calibrationlId + " in file: " + f + " Check the definitions!!"); Trace.WriteLine("Definition was previously found in file: " + DefDictionary[d.calibrationlId].filePath); } else { DefDictionary.Add(d.calibrationlId, d); lock (IdentList) { IdentList.Add(d.calibrationlId); DeviceCount++; } } } } catch (System.Exception excpt) { Trace.WriteLine("Error reading XML file " + f); Trace.WriteLine(excpt.Message); } } //}); List <string> directories = Directory.GetDirectories(directory).ToList(); //Parallel.ForEach( // directories, d => foreach (var d in directories) { if (!GetDevices(d)) { return(false); } } // }); return(true); } catch (System.Exception excpt) { Trace.WriteLine(excpt.Message); } return(false); }