public IEnumerable <Row> Run(Process process) { var result = Enumerable.Empty <Row>(); if (!process.IsReady()) { return(result); } var timer = new Stopwatch(); timer.Start(); process.Setup(); var fileName = new FileInfo(Path.Combine(Common.GetTemporaryFolder(process.Name), "MetaData.xml")).FullName; var writer = new MetaDataWriter(process); File.WriteAllText(fileName, writer.Write(), Encoding.UTF8); System.Diagnostics.Process.Start(fileName); timer.Stop(); process.Logger.Info("Calculated metadata in {0}.", timer.Elapsed); process.Complete = true; return(result); }
// called by anyone public void Init() { if (GlobalHandler.modality == 0 || GlobalHandler.modality == 2) { if (GameObject.Find("HeadPosePoint") != null) { GameObject.Find("HeadPosePoint").SetActive(false); } } if (GlobalHandler.modality == 1 || GlobalHandler.modality == 2) { if (GameObject.Find("[VRGazeTrail]") != null) { GameObject.Find("[VRGazeTrail]").SetActive(false); } } foreach (GameObject pin in GameObject.FindGameObjectsWithTag("PIN")) { materialholderList.Add(new MaterialHolder(pin.GetComponent <MeshRenderer>().material, pin.gameObject)); } currentGameobject = null; // Get EyeTracker unity object _eyeTracker = Tobii.Research.Unity.VREyeTracker.Instance; if (_eyeTracker == null) { Debug.Log("Failed to find eye tracker, has it been added to scene?"); } _gazeTrail = Tobii.Research.Unity.VRGazeTrail.Instance; _highlightInfo = new ActiveObject(); selectedPINS = new List <String>(); inputtime = 0; fullinputtime = 0; started = false; stopped = false; // not relevant but we need it because of the current implementation passwordmodel = new PasswordModel(new List <String>() { "POSX1G", "POSX1G", "POSX1G", "POSX1G" }, 4); // fw = GameObject.Find("Storage").GetComponent <CreativityWriter>(); mdfw = GameObject.Find("Storage").GetComponent <MetaDataWriter>(); fullfw = GameObject.Find("Storage").GetComponent <FullCreativityWriter>(); fullmdfw = GameObject.Find("Storage").GetComponent <FullMetaDataWriter>(); fullfw.StartRecording(); fullmdfw.StartRecording(); //Debug.Log(GameObject.Find("Planes").transform.rotation); feedbackElements = new List <FeedbackModel>(); feedbacktime = 0.4f; }
// Start is called before the first frame update void Start() { started = false; stopped = false; passwordmodel = new PasswordModel(new List <String>() { "POS1", "POS2", "POS3", "POS4" }, 4); fw = GameObject.Find("Storage").GetComponent <FileWriter>(); mdfw = GameObject.Find("Storage").GetComponent <MetaDataWriter>(); hand = GameObject.FindWithTag("Right").GetComponent <HandTappingOnly>(); }
public PsoFile Build(IPsoValue value) { MetaInitialize(); MetaBuildStructuresAndEnums(); var writer = new MetaDataWriter(Data.Endianess.BigEndian); writer.SelectBlockByNameHash(((PsoStructure)value).psoEntryInfo.NameHash); WriteStructure(writer, (PsoStructure)value); meta.DataMappingSection.Entries = new List <PsoDataMappingEntry>(); var ms = new MemoryStream(); ms.Position = 16; foreach (var block in writer.Blocks) { var metaDataBlock = new PsoDataMappingEntry(); metaDataBlock.NameHash = block.NameHash; metaDataBlock.Offset = (int)ms.Position; metaDataBlock.Length = (int)block.Stream.Length; var buf = new byte[block.Stream.Length]; block.Stream.Position = 0; block.Stream.Read(buf, 0, buf.Length); ms.Write(buf, 0, buf.Length); // fill... buf = new byte[16 - ms.Position % 16]; if (buf.Length != 16) { ms.Write(buf, 0, buf.Length); } meta.DataMappingSection.Entries.Add(metaDataBlock); } var totalBuf = new byte[ms.Length]; ms.Position = 0; ms.Read(totalBuf, 0, totalBuf.Length); meta.DataSection.Data = totalBuf; for (int i = 0; i < meta.DataMappingSection.Entries.Count; i++) { if (meta.DataMappingSection.Entries[i].NameHash == ((PsoStructure)value).psoEntryInfo.NameHash) { meta.DataMappingSection.RootIndex = i + 1; } } return(meta); }
internal MethodILWriter(CILReflectionContextImpl ctx, MetaDataWriter md, CILMethodBase method, EmittingAssemblyMapper mapper) { var methodIL = (MethodILImpl)method.MethodIL; this._method = method; this._methodIL = methodIL; this._metaData = md; this._assemblyMapper = mapper; this._ilCode = new Byte[methodIL._opCodes.Sum(info => info.MaxSize)]; this._ilCodeCount = 0; this._methodILOffset = 0; this._opCodeInfoOffsets = new Int32[methodIL._opCodes.Count]; this._labelInfos = new LabelEmittingInfo[methodIL._branchTargetsCount]; this._labelInfoIndex = 0; this._stackSizes = new Dictionary <Int32, Int32>(); this._currentStack = 0; this._maxStack = 0; }
public ActionResult MetaData(int id) { Response.AddHeader("Access-Control-Allow-Origin", "*"); ConfigurationPart part; ApiRequest request; var query = _transformalize.GetQuery(); foreach (var rejection in _apiService.Rejections(id, out request, out part)) { return(rejection.ContentResult( query["format"], query["flavor"] )); } request.RequestType = ApiRequestType.MetaData; var transformalizeRequest = new TransformalizeRequest(part, query, null, Logger); var logger = new TransformalizeLogger(transformalizeRequest.Part.Title(), part.LogLevel, Logger, OrchardVersion, _moduleVersion); var errors = transformalizeRequest.Root.Errors(); if (errors.Any()) { var bad = new TransformalizeResponse(); request.Status = 501; request.Message = "Configuration Problem" + errors.Length.Plural(); bad.Log.AddRange(errors.Select(p => new[] { DateTime.Now.ToString(CultureInfo.InvariantCulture), "error", ".", ".", p })); return(new ApiResponse(request, "<tfl></tfl>", bad).ContentResult( query["format"], query["flavor"] )); } var metaData = new MetaDataWriter(ProcessFactory.CreateSingle(transformalizeRequest.Root.Processes[0], logger, new Options { Mode = "metadata" })).Write(); return(new ApiResponse(request, metaData).ContentResult( query["format"], query["flavor"] )); }
public Meta_GTA5_pc Build(IMetaValue value) { MetaInitialize(); MetaBuildStructuresAndEnums(); var writer = new MetaDataWriter(); writer.SelectBlockByNameHash(((MetaStructure)value).info.StructureNameHash); WriteStructure(writer, (MetaStructure)value); for (int k = meta.StructureInfos.Count - 1; k >= 0; k--) { if (!usedStructureKeys.Contains(meta.StructureInfos[k].StructureKey)) { meta.StructureInfos.RemoveAt(k); } } meta.DataBlocks = new ResourceSimpleArray <DataBlock_GTA5_pc>(); foreach (var block in writer.Blocks) { var metaDataBlock = new DataBlock_GTA5_pc(); metaDataBlock.StructureNameHash = block.NameHash; metaDataBlock.Data = StreamToResourceBytes(block.Stream); meta.DataBlocks.Add(metaDataBlock); } for (int i = 0; i < meta.DataBlocks.Count; i++) { if (meta.DataBlocks[i].StructureNameHash == ((MetaStructure)value).info.StructureNameHash) { meta.RootBlockIndex = i + 1; } } return(meta); }
// called by anyone public void Init() { if (GlobalHandler.modality == 0 || GlobalHandler.modality == 2) { if (GameObject.Find("HeadPosePoint") != null) { GameObject.Find("HeadPosePoint").SetActive(false); } } if (GlobalHandler.modality == 1 || GlobalHandler.modality == 2) { if (GameObject.Find("[VRGazeTrail]") != null) { GameObject.Find("[VRGazeTrail]").SetActive(false); } } foreach (GameObject pin in GameObject.FindGameObjectsWithTag("PIN")) { materialholderList.Add(new MaterialHolder(pin.GetComponent <MeshRenderer>().material, pin.gameObject)); } if (GlobalHandler.attackerscenario == 99) // which meas the expert observation attack is running { foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX1W", "POSX3W", "POSX5G", "POSX6O" }, 4); } // change this area for each participant to ensure no follow-up effects /* * * START */ // for each participant, create file if (GlobalHandler.attackerscenario == 1) { if (GlobalHandler.modality == 0) { switch (trials) { case 0: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX4G", "POSX2R", "POSX5R", "POSX8R" }, 4); pwGenerator.generateCube(new List <string>() { "POSX4G", "POSX2R", "POSX5R", "POSX8R" }); break; case 1: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX8W", "POSX6R", "POSX4R", "POSX2G" }, 4); pwGenerator.generateCube(new List <string>() { "POSX8W", "POSX6R", "POSX4R", "POSX2G" }); break; case 2: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX1W", "POSX1R", "POSX1B", "POSX1O" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1W", "POSX1R", "POSX1B", "POSX1O" }); break; case 3: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX1G", "POSX3G", "POSX7G", "POSX9G" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX3G", "POSX7G", "POSX9G" }); break; } } if (GlobalHandler.modality == 1) { switch (trials) { case 0: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX1G", "POSX4G", "POSX7G", "POSX8G" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX4G", "POSX7G", "POSX8G" }); break; case 1: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX1G", "POSX1W", "POSX2O", "POSX2B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX1W", "POSX2O", "POSX2B" }); break; case 2: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX6G", "POSX2O", "POSX3O", "POSX4G" }, 4); pwGenerator.generateCube(new List <string>() { "POSX6G", "POSX2O", "POSX3O", "POSX4G" }); break; case 3: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX5G", "POSX4G", "POSX1W", "POSX2W" }, 4); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX4G", "POSX1W", "POSX2W" }); break; } } if (GlobalHandler.modality == 2) { switch (trials) { case 0: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX5W", "POSX4O", "POSX6W", "POSX9W" }, 4); pwGenerator.generateCube(new List <string>() { "POSX5W", "POSX4O", "POSX6W", "POSX9W" }); break; case 1: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX4O", "POSX6W", "POSX5G", "POSX8R" }, 4); pwGenerator.generateCube(new List <string>() { "POSX4O", "POSX6W", "POSX5G", "POSX8R" }); break; case 2: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX3G", "POSX6G", "POSX9G", "POSX3W" }, 4); pwGenerator.generateCube(new List <string>() { "POSX3G", "POSX6G", "POSX9G", "POSX3W" }); break; case 3: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX9G", "POSX7G", "POSX5G", "POSX3G" }, 4); pwGenerator.generateCube(new List <string>() { "POSX9G", "POSX7G", "POSX5G", "POSX3G" }); break; } } } if (GlobalHandler.attackerscenario == 2) { if (GlobalHandler.modality == 0) { switch (trials) { case 0: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX4W", "POSX5W", "POSX6W", "POSX7W" }, 4); pwGenerator.generateCube(new List <string>() { "POSX4W", "POSX5W", "POSX6W", "POSX7W" }); break; case 1: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX4W", "POSX5W", "POSX6W", "POSX6R" }, 4); pwGenerator.generateCube(new List <string>() { "POSX4W", "POSX5W", "POSX6W", "POSX6R" }); break; case 2: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX1G", "POSX2G", "POSX3O", "POSX4B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX2G", "POSX3O", "POSX4B" }); break; case 3: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX5G", "POSX6W", "POSX7R", "POSX8G" }, 4); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX6W", "POSX7R", "POSX8G" }); break; } } if (GlobalHandler.modality == 1) { switch (trials) { case 0: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX3G", "POSX6G", "POSX2G", "POSX1G" }, 4); pwGenerator.generateCube(new List <string>() { "POSX3G", "POSX6G", "POSX2G", "POSX1G" }); break; case 1: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX3G", "POSX3O", "POSX2O", "POSX1O" }, 4); pwGenerator.generateCube(new List <string>() { "POSX3G", "POSX3O", "POSX2O", "POSX1O" }); break; case 2: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX4G", "POSX6G", "POSX5O", "POSX5B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX4G", "POSX6G", "POSX5O", "POSX5B" }); break; case 3: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX1O", "POSX5W", "POSX3R", "POSX7B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1O", "POSX5W", "POSX3R", "POSX7B" }); break; } } if (GlobalHandler.modality == 2) { switch (trials) { case 0: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX2G", "POSX4R", "POSX6O", "POSX8B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX2G", "POSX4R", "POSX6O", "POSX8B" }); break; case 1: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX7W", "POSX9R", "POSX9B", "POSX8B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX7W", "POSX9R", "POSX9B", "POSX8B" }); break; case 2: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX5G", "POSX7G", "POSX6G", "POSX8G" }, 4); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX7G", "POSX6G", "POSX8G" }); break; case 3: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX2G", "POSX2W", "POSX5W", "POSX8W" }, 4); pwGenerator.generateCube(new List <string>() { "POSX2G", "POSX2W", "POSX5W", "POSX8W" }); break; } } } if (GlobalHandler.attackerscenario == 3) { if (GlobalHandler.modality == 0) { switch (trials) { case 0: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX9G", "POSX5G", "POSX1G", "POSX2G" }, 4); pwGenerator.generateCube(new List <string>() { "POSX9G", "POSX5G", "POSX1G", "POSX2G" }); break; case 1: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX3G", "POSX4W", "POSX3O", "POSX4B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX3G", "POSX4W", "POSX3O", "POSX4B" }); break; case 2: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX1G", "POSX1O", "POSX2O", "POSX3O" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX1O", "POSX2O", "POSX3O" }); break; case 3: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX1W", "POSX3W", "POSX5G", "POSX6O" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1W", "POSX3W", "POSX5G", "POSX6O" }); break; } } if (GlobalHandler.modality == 1) { switch (trials) { case 0: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX5R", "POSX3W", "POSX7G", "POSX9B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX5R", "POSX3W", "POSX7G", "POSX9B" }); break; case 1: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX5G", "POSX6G", "POSX8G", "POSX9G" }, 4); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX6G", "POSX8G", "POSX9G" }); break; case 2: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX2W", "POSX8G", "POSX7G", "POSX3R" }, 4); pwGenerator.generateCube(new List <string>() { "POSX2W", "POSX8G", "POSX7G", "POSX3R" }); break; case 3: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX5W", "POSX5B", "POSX6B", "POSX7B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX5W", "POSX5B", "POSX6B", "POSX7B" }); break; } } if (GlobalHandler.modality == 2) { switch (trials) { case 0: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX9W", "POSX3B", "POSX5B", "POSX7B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX9W", "POSX3B", "POSX5B", "POSX7B" }); break; case 1: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX2W", "POSX4W", "POSX6W", "POSX8W" }, 4); pwGenerator.generateCube(new List <string>() { "POSX2W", "POSX4W", "POSX6W", "POSX8W" }); break; case 2: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX2G", "POSX2W", "POSX2R", "POSX3R" }, 4); pwGenerator.generateCube(new List <string>() { "POSX2G", "POSX2W", "POSX2R", "POSX3R" }); break; case 3: foreach (MaterialHolder materialobj in materialholderList) { materialobj.Gameobject.GetComponent <MeshRenderer>().material = materialobj.Material; } passwordmodel = new PasswordModel(new List <String>() { "POSX6G", "POSX1W", "POSX9R", "POSX5B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX6G", "POSX1W", "POSX9R", "POSX5B" }); break; } } } /* * * END */ currentGameobject = null; // Get EyeTracker unity object _eyeTracker = Tobii.Research.Unity.VREyeTracker.Instance; if (_eyeTracker == null) { Debug.Log("Failed to find eye tracker, has it been added to scene?"); } _gazeTrail = Tobii.Research.Unity.VRGazeTrail.Instance; _highlightInfo = new ActiveObject(); selectedPINS = new List <String>(); inputtime = 0; fullinputtime = 0; started = false; stopped = false; // not relevant but we need it because of the current implementation //passwordmodel = new PasswordModel(new List<String>() { "POSX1G", "POSX1G", "POSX1G", "POSX1G" }, 4); // //fw = GameObject.Find("Storage").GetComponent<SecurityWriter>(); mdfw = GameObject.Find("Storage").GetComponent <MetaDataWriter>(); fullfw = GameObject.Find("Storage").GetComponent <FullSecurityWriter>(); fullmdfw = GameObject.Find("Storage").GetComponent <FullMetaDataWriter>(); //fullfw.StartRecording(); fullmdfw.StartRecording(); //Debug.Log(GameObject.Find("Planes").transform.rotation); feedbackElements = new List <FeedbackModel>(); feedbacktime = 0.4f; }
private void WriteStructure(MetaDataWriter writer, PsoStructure value) { var updateStack = new Stack <IPsoValue>(); // build stack for update... var structuresToCheck = new Stack <PsoStructure>(); structuresToCheck.Push(value); while (structuresToCheck.Count > 0) { var structureToCheck = structuresToCheck.Pop(); // add structure to list of occurring structures usedStructureKeys.Add(structureToCheck.psoEntryInfo.NameHash); foreach (var structureEntryToCheck in structureToCheck.Values) { if (structureEntryToCheck.Value is PsoArray) { updateStack.Push(structureEntryToCheck.Value); var arrayStructureEntryToCheck = structureEntryToCheck.Value as PsoArray; if (arrayStructureEntryToCheck.Entries != null) { for (int k = arrayStructureEntryToCheck.Entries.Count - 1; k >= 0; k--) { var x = arrayStructureEntryToCheck.Entries[k]; if (x is PsoStructure) { structuresToCheck.Push(x as PsoStructure); } } } } if (structureEntryToCheck.Value is PsoStructure) { structuresToCheck.Push((PsoStructure)structureEntryToCheck.Value); } } } // update structures... while (updateStack.Count > 0) { var v = updateStack.Pop(); if (v is PsoArray) { var arrayValue = (PsoArray)v; if (arrayValue.Entries != null) { if (arrayValue.psoSection.Type == DataType.Structure) { writer.SelectBlockByNameHash((int)arrayValue.psoSection.ReferenceKey); writer.Position = writer.Length; } else if (arrayValue.psoSection.Type == DataType.INT_0Bh) { writer.SelectBlockByNameHash(6); writer.Position = writer.Length; } else { throw new Exception("Unknown array type."); } arrayValue.BlockIndex = writer.BlockIndex + 1; arrayValue.Offset = (int)writer.Position; arrayValue.NumberOfEntries = arrayValue.Entries.Count; foreach (var entry in arrayValue.Entries) { entry.Write(writer); } } else { arrayValue.BlockIndex = 0; arrayValue.Offset = 0; arrayValue.NumberOfEntries = 0; } } } // now only the root itself is left... writer.SelectBlockByNameHash(value.psoEntryInfo.NameHash); writer.Position = writer.Length; value.Write(writer); }
// called by anyone public void Init() { Debug.Log("trigger countercalls" + counterCalls); if (GlobalHandler.training) { passwordmodel = new PasswordModel(new List <String>() { "POSX1Y", "POSX2Y", "POSX3Y", "POSX4Y" }, 4); } else { switch (GlobalHandler.password) { case 1: passwordmodel = new PasswordModel(new List <String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword0S1"); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }); break; case 2: passwordmodel = new PasswordModel(new List <System.String>() { "POSX3G", "POSX4G", "POSX5G", "POSX6G" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword0S2"); pwGenerator.generateCube(new List <string>() { "POSX3G", "POSX4G", "POSX5G", "POSX6G" }); break; case 3: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX3G", "POSX7G", "POSX9G" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword0S3"); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX3G", "POSX7G", "POSX9G" }); break; case 4: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX6G", "POSX7G", "POSX8G" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword1S1"); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX6G", "POSX7G", "POSX8G" }); break; case 5: passwordmodel = new PasswordModel(new List <System.String>() { "POSX6G", "POSX7G", "POSX8G", "POSX9G" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword1S2"); pwGenerator.generateCube(new List <string>() { "POSX6G", "POSX7G", "POSX8G", "POSX9G" }); break; case 6: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX8G", "POSX9G" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword1S3"); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX2G", "POSX8G", "POSX9G" }); break; case 7: passwordmodel = new PasswordModel(new List <System.String>() { "POSX9G", "POSX6G", "POSX5R", "POSX6R" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword2S1"); pwGenerator.generateCube(new List <string>() { "POSX9G", "POSX6G", "POSX5R", "POSX6R" }); break; case 8: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX9G", "POSX1W", "POSX2W" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword2S2"); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX9G", "POSX1W", "POSX2W" }); break; case 9: passwordmodel = new PasswordModel(new List <System.String>() { "POSX4G", "POSX5G", "POSX6G", "POSX5B" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword2S3"); pwGenerator.generateCube(new List <string>() { "POSX4G", "POSX5G", "POSX6G", "POSX5B" }); break; case 10: passwordmodel = new PasswordModel(new List <System.String>() { "POSX7G", "POSX8G", "POSX1R", "POSX2R" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword3S1"); pwGenerator.generateCube(new List <string>() { "POSX7G", "POSX8G", "POSX1R", "POSX2R" }); break; case 11: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX1W", "POSX2W", "POSX3W" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword3S2"); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX1W", "POSX2W", "POSX3W" }); break; case 12: passwordmodel = new PasswordModel(new List <System.String>() { "POSX9G", "POSX8G", "POSX1B", "POSX2B" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword3S3"); pwGenerator.generateCube(new List <string>() { "POSX9G", "POSX8G", "POSX1B", "POSX2B" }); break; case 13: passwordmodel = new PasswordModel(new List <System.String>() { "POSX4G", "POSX1W", "POSX2W", "POSX1O" }, 4); //password.GetComponent<RawImage>().texture = null; pwGenerator.generateCube(new List <string>() { "POSX4G", "POSX1W", "POSX2W", "POSX1O" }); break; case 14: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX5R", "POSX1W" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX2G", "POSX5R", "POSX1W" }); //password.GetComponent<RawImage>().texture = null; break; case 15: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX5R", "POSX5B", "POSX6B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX5R", "POSX5B", "POSX6B" }); //password.GetComponent<RawImage>().texture = null; break; case 16: passwordmodel = new PasswordModel(new List <System.String>() { "POSX4G", "POSX4W", "POSX6W", "POSX5O" }, 4); pwGenerator.generateCube(new List <string>() { "POSX4G", "POSX4W", "POSX6W", "POSX5O" }); //password.GetComponent<RawImage>().texture = null; break; case 17: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX5R", "POSX1W", "POSX2W" }, 4); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX5R", "POSX1W", "POSX2W" }); //password.GetComponent<RawImage>().texture = null; break; case 18: passwordmodel = new PasswordModel(new List <System.String>() { "POSX7G", "POSX7W", "POSX9W", "POSX7O" }, 4); pwGenerator.generateCube(new List <string>() { "POSX7G", "POSX7W", "POSX9W", "POSX7O" }); //password.GetComponent<RawImage>().texture = null; break; case 19: passwordmodel = new PasswordModel(new List <System.String>() { "POSX7G", "POSX5W", "POSX9B", "POSX7R" }, 4); pwGenerator.generateCube(new List <string>() { "POSX7G", "POSX5W", "POSX9B", "POSX7R" }); //password.GetComponent<RawImage>().texture = null; break; case 20: passwordmodel = new PasswordModel(new List <System.String>() { "POSX3G", "POSX3W", "POSX4O", "POSX5R" }, 4); pwGenerator.generateCube(new List <string>() { "POSX3G", "POSX3W", "POSX4O", "POSX5R" }); // password.GetComponent<RawImage>().texture = null; break; case 21: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX3O", "POSX4B", "POSX5W" }, 4); pwGenerator.generateCube(new List <string>() { "POSX2G", "POSX3O", "POSX4B", "POSX5W" }); // password.GetComponent<RawImage>().texture = null; break; case 22: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX2W", "POSX5B", "POSX9R" }, 4); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX2W", "POSX5B", "POSX9R" }); //password.GetComponent<RawImage>().texture = null; break; case 23: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX1W", "POSX5B", "POSX6O" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX1W", "POSX5B", "POSX6O" }); // password.GetComponent<RawImage>().texture = null; break; case 24: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX1W", "POSX1R", "POSX5B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX1W", "POSX1R", "POSX5B" }); //password.GetComponent<RawImage>().texture = null; break; } } /*if (trials <= 1) * { * password.GetComponent<RawImage>().texture = null; * foreach (MaterialHolder materialobj in materialholderList) * { * materialobj.Gameobject.GetComponent<MeshRenderer>().material = materialobj.Material; * } * * }*/ currentGameobject = null; // Get EyeTracker unity object _eyeTracker = Tobii.Research.Unity.VREyeTracker.Instance; if (_eyeTracker == null) { Debug.Log("Failed to find eye tracker, has it been added to scene?"); } _gazeTrail = Tobii.Research.Unity.VRGazeTrail.Instance; _highlightInfo = new ActiveObject(); selectedPINS = new List <String>(); inputtime = 0; fullinputtime = 0; started = false; stopped = false; timerfinalgazedata = 0.3f; fw = GameObject.Find("Storage").GetComponent <FileWriter2>(); mdfw = GameObject.Find("Storage").GetComponent <MetaDataWriter>(); fullfw = GameObject.Find("Storage").GetComponent <FullFileWriter2>(); fullmdfw = GameObject.Find("Storage").GetComponent <FullMetaDataWriter>(); fullfw.StartRecording(); fullmdfw.StartRecording(); Debug.Log(GameObject.Find("Planes").transform.rotation); }
public void Init() { Debug.Log("headpose countercalls" + counterCalls); if (GlobalHandler.training) { passwordmodel = new PasswordModel(new List <String>() { "POSX1Y", "POSX2Y", "POSX3Y", "POSX4Y" }, 4); } else { switch (GlobalHandler.password) { case 1: passwordmodel = new PasswordModel(new List <String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword0S1"); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }); break; case 2: passwordmodel = new PasswordModel(new List <System.String>() { "POSX3G", "POSX4G", "POSX5G", "POSX6G" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword0S2"); pwGenerator.generateCube(new List <string>() { "POSX3G", "POSX4G", "POSX5G", "POSX6G" }); break; case 3: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX3G", "POSX7G", "POSX9G" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword0S3"); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX3G", "POSX7G", "POSX9G" }); break; case 4: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX6G", "POSX7G", "POSX8G" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword1S1"); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX6G", "POSX7G", "POSX8G" }); break; case 5: passwordmodel = new PasswordModel(new List <System.String>() { "POSX6G", "POSX7G", "POSX8G", "POSX9G" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword1S2"); pwGenerator.generateCube(new List <string>() { "POSX6G", "POSX7G", "POSX8G", "POSX9G" }); break; case 6: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX8G", "POSX9G" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword1S3"); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX2G", "POSX8G", "POSX9G" }); break; case 7: passwordmodel = new PasswordModel(new List <System.String>() { "POSX9G", "POSX6G", "POSX5R", "POSX6R" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword2S1"); pwGenerator.generateCube(new List <string>() { "POSX9G", "POSX6G", "POSX5R", "POSX6R" }); break; case 8: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX9G", "POSX1W", "POSX2W" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword2S2"); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX9G", "POSX1W", "POSX2W" }); break; case 9: passwordmodel = new PasswordModel(new List <System.String>() { "POSX4G", "POSX5G", "POSX6G", "POSX5B" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword2S3"); pwGenerator.generateCube(new List <string>() { "POSX4G", "POSX5G", "POSX6G", "POSX5B" }); break; case 10: passwordmodel = new PasswordModel(new List <System.String>() { "POSX7G", "POSX8G", "POSX1R", "POSX2R" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword3S1"); pwGenerator.generateCube(new List <string>() { "POSX7G", "POSX8G", "POSX1R", "POSX2R" }); break; case 11: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX1W", "POSX2W", "POSX3W" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword3S2"); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX1W", "POSX2W", "POSX3W" }); break; case 12: passwordmodel = new PasswordModel(new List <System.String>() { "POSX9G", "POSX8G", "POSX1B", "POSX2B" }, 4); //password.GetComponent<RawImage>().texture = (Texture2D)Resources.Load("Passwords/2DPassword3S3"); pwGenerator.generateCube(new List <string>() { "POSX9G", "POSX8G", "POSX1B", "POSX2B" }); break; case 13: passwordmodel = new PasswordModel(new List <System.String>() { "POSX4G", "POSX1W", "POSX2W", "POSX1O" }, 4); //password.GetComponent<RawImage>().texture = null; pwGenerator.generateCube(new List <string>() { "POSX4G", "POSX1W", "POSX2W", "POSX1O" }); break; case 14: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX5R", "POSX1W" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX2G", "POSX5R", "POSX1W" }); //password.GetComponent<RawImage>().texture = null; break; case 15: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX5R", "POSX5B", "POSX6B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX5R", "POSX5B", "POSX6B" }); //password.GetComponent<RawImage>().texture = null; break; case 16: passwordmodel = new PasswordModel(new List <System.String>() { "POSX4G", "POSX4W", "POSX6W", "POSX5O" }, 4); pwGenerator.generateCube(new List <string>() { "POSX4G", "POSX4W", "POSX6W", "POSX5O" }); //password.GetComponent<RawImage>().texture = null; break; case 17: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX5R", "POSX1W", "POSX2W" }, 4); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX5R", "POSX1W", "POSX2W" }); //password.GetComponent<RawImage>().texture = null; break; case 18: passwordmodel = new PasswordModel(new List <System.String>() { "POSX7G", "POSX7W", "POSX9W", "POSX7O" }, 4); pwGenerator.generateCube(new List <string>() { "POSX7G", "POSX7W", "POSX9W", "POSX7O" }); //password.GetComponent<RawImage>().texture = null; break; case 19: passwordmodel = new PasswordModel(new List <System.String>() { "POSX7G", "POSX5W", "POSX9B", "POSX7R" }, 4); pwGenerator.generateCube(new List <string>() { "POSX7G", "POSX5W", "POSX9B", "POSX7R" }); //password.GetComponent<RawImage>().texture = null; break; case 20: passwordmodel = new PasswordModel(new List <System.String>() { "POSX3G", "POSX3W", "POSX4O", "POSX5R" }, 4); pwGenerator.generateCube(new List <string>() { "POSX3G", "POSX3W", "POSX4O", "POSX5R" }); // password.GetComponent<RawImage>().texture = null; break; case 21: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX3O", "POSX4B", "POSX5W" }, 4); pwGenerator.generateCube(new List <string>() { "POSX2G", "POSX3O", "POSX4B", "POSX5W" }); // password.GetComponent<RawImage>().texture = null; break; case 22: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX2W", "POSX5B", "POSX9R" }, 4); pwGenerator.generateCube(new List <string>() { "POSX5G", "POSX2W", "POSX5B", "POSX9R" }); //password.GetComponent<RawImage>().texture = null; break; case 23: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX1W", "POSX5B", "POSX6O" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX1W", "POSX5B", "POSX6O" }); // password.GetComponent<RawImage>().texture = null; break; case 24: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX1W", "POSX1R", "POSX5B" }, 4); pwGenerator.generateCube(new List <string>() { "POSX1G", "POSX1W", "POSX1R", "POSX5B" }); //password.GetComponent<RawImage>().texture = null; break; } } /*if (trials <= 1) * { * password.GetComponent<RawImage>().texture = null; * foreach (MaterialHolder materialobj in materialholderList) * { * materialobj.Gameobject.GetComponent<MeshRenderer>().material = materialobj.Material; * } * * }*/ started = false; stopped = false; fw = GameObject.Find("Storage").GetComponent <HeadPoseFileWriter>(); mdfw = GameObject.Find("Storage").GetComponent <MetaDataWriter>(); hand = GameObject.FindWithTag("Right").GetComponent <Hand>(); //hand.Userinput.Clear(); fullfw = GameObject.Find("Storage").GetComponent <HeadPoseFullFileWriter>(); fullmdfw = GameObject.Find("Storage").GetComponent <FullMetaDataWriter>(); fullfw.StartRecording(); fullmdfw.StartRecording(); inputtime = 0; fullinputtime = 0; //passwordmodel.reset(); }
private void WriteStructure(MetaDataWriter writer, MetaStructure value) { var updateStack = new Stack <IMetaValue>(); // build stack for update... var structuresToCheck = new Stack <MetaStructure>(); structuresToCheck.Push(value); while (structuresToCheck.Count > 0) { var structureToCheck = structuresToCheck.Pop(); // add structure to list of occurring structures usedStructureKeys.Add(structureToCheck.info.StructureKey); foreach (var structureEntryToCheck in structureToCheck.Values) { if (structureEntryToCheck.Value is MetaArray) { updateStack.Push(structureEntryToCheck.Value); var arrayStructureEntryToCheck = structureEntryToCheck.Value as MetaArray; if (arrayStructureEntryToCheck.Entries != null) { for (int k = arrayStructureEntryToCheck.Entries.Count - 1; k >= 0; k--) { var x = arrayStructureEntryToCheck.Entries[k]; if (x is MetaStructure) { structuresToCheck.Push(x as MetaStructure); } if (x is MetaGeneric) { updateStack.Push(x); structuresToCheck.Push((MetaStructure)(x as MetaGeneric).Value); } } } } if (structureEntryToCheck.Value is MetaCharPointer) { updateStack.Push(structureEntryToCheck.Value); } if (structureEntryToCheck.Value is MetaDataBlockPointer) { updateStack.Push(structureEntryToCheck.Value); } if (structureEntryToCheck.Value is MetaGeneric) { updateStack.Push(structureEntryToCheck.Value); var genericStructureEntryToCheck = structureEntryToCheck.Value as MetaGeneric; structuresToCheck.Push((MetaStructure)genericStructureEntryToCheck.Value); } if (structureEntryToCheck.Value is MetaStructure) { structuresToCheck.Push((MetaStructure)structureEntryToCheck.Value); } } } // update structures... while (updateStack.Count > 0) { var v = updateStack.Pop(); if (v is MetaArray) { var arrayValue = (MetaArray)v; if (arrayValue.Entries != null) { if (arrayValue.info.DataType == StructureEntryDataType.Structure) { // WORKAROUND if (arrayValue.IsAlwaysAtZeroOffset) { writer.CreateBlockByNameHash(arrayValue.info.ReferenceKey); writer.Position = writer.Length; } else { writer.SelectBlockByNameHash(arrayValue.info.ReferenceKey); writer.Position = writer.Length; } } else { writer.SelectBlockByNameHash((int)arrayValue.info.DataType); writer.Position = writer.Length; } arrayValue.BlockIndex = writer.BlockIndex + 1; arrayValue.Offset = (int)writer.Position; arrayValue.NumberOfEntries = arrayValue.Entries.Count; foreach (var entry in arrayValue.Entries) { entry.Write(writer); } } else { arrayValue.BlockIndex = 0; arrayValue.Offset = 0; arrayValue.NumberOfEntries = 0; } } if (v is MetaCharPointer) { var charPointerValue = (MetaCharPointer)v; if (charPointerValue.Value != null) { writer.SelectBlockByNameHash(0x10); writer.Position = writer.Length; charPointerValue.DataBlockIndex = writer.BlockIndex + 1; charPointerValue.DataOffset = (int)writer.Position; charPointerValue.StringLength = charPointerValue.Value.Length; charPointerValue.StringCapacity = charPointerValue.Value.Length + 1; writer.Write(charPointerValue.Value); } else { charPointerValue.DataBlockIndex = 0; charPointerValue.DataOffset = 0; charPointerValue.StringLength = 0; charPointerValue.StringCapacity = 0; } } if (v is MetaDataBlockPointer) { var charPointerValue = (MetaDataBlockPointer)v; if (charPointerValue.Data != null) { writer.CreateBlockByNameHash(0x11); writer.Position = 0; charPointerValue.BlockIndex = writer.BlockIndex + 1; writer.Write(charPointerValue.Data); } else { charPointerValue.BlockIndex = 0; } } if (v is MetaGeneric) { var genericValue = (MetaGeneric)v; writer.SelectBlockByNameHash(((MetaStructure)genericValue.Value).info.StructureNameHash); writer.Position = writer.Length; genericValue.BlockIndex = writer.BlockIndex + 1; genericValue.Offset = (int)writer.Position / 16; genericValue.Value.Write(writer); } } // now only the root itself is left... writer.SelectBlockByNameHash(value.info.StructureNameHash); writer.Position = writer.Length; value.Write(writer); }
public void PerformEmitting( Stream sink, EmittingArguments eArgs ) { ArgumentValidator.ValidateNotNull("Stream", sink); ArgumentValidator.ValidateNotNull("Emitting arguments", eArgs); Boolean isPE64, hasRelocations; UInt16 peOptionalHeaderSize; UInt32 numSections, iatSize; CheckEmittingArgs(eArgs, out isPE64, out hasRelocations, out numSections, out peOptionalHeaderSize, out iatSize); var fAlign = eArgs.FileAlignment; var sAlign = eArgs.SectionAlignment; var importHintName = eArgs.ImportHintName; var imageBase = eArgs.ImageBase; var moduleKind = eArgs.ModuleKind; var strongName = eArgs.StrongName; IList <CILMethodBase> allMethodDefs; CILAssemblyName an; using (var md = new MetaDataWriter(eArgs, this._context, this._module, eArgs.AssemblyMapper, out allMethodDefs, out an)) { var clrEntryPointToken = 0; if (eArgs.CLREntryPoint != null) { var listIdx = allMethodDefs.IndexOf(eArgs.CLREntryPoint); if (listIdx < 0) { throw new ArgumentException("Entry point method " + eArgs.CLREntryPoint + " is not from this module (" + this._module.Name + ")."); } clrEntryPointToken = TokenUtils.EncodeToken(Tables.MethodDef, listIdx + 1); } // Start emitting headers // MS-DOS header var currentArray = new Byte[HeaderFieldOffsetsAndLengths.DOS_HEADER_AND_PE_SIG.Length]; Array.Copy(HeaderFieldOffsetsAndLengths.DOS_HEADER_AND_PE_SIG, currentArray, HeaderFieldOffsetsAndLengths.DOS_HEADER_AND_PE_SIG.Length); sink.Write(currentArray); // PE file header currentArray = new Byte[HeaderFieldOffsetsAndLengths.PE_FILE_HEADER_SIZE]; var characteristics = HeaderFieldPossibleValues.IMAGE_FILE_EXECUTABLE_IMAGE | (isPE64 ? HeaderFieldPossibleValues.IMAGE_FILE_LARGE_ADDRESS_AWARE : HeaderFieldPossibleValues.IMAGE_FILE_32BIT_MACHINE); if (moduleKind.IsDLL()) { characteristics |= HeaderFieldPossibleValues.IMAGE_FILE_DLL; } var idx = 0; currentArray .WriteUInt16LEToBytes(ref idx, (UInt16)eArgs.Machine) .WriteUInt16LEToBytes(ref idx, (UInt16)numSections) .WriteInt32LEToBytes(ref idx, Convert.ToInt32(DateTime.Now.Subtract(PE_HEADER_START_TIME).TotalSeconds)) .Skip(ref idx, 8) .WriteUInt16LEToBytes(ref idx, peOptionalHeaderSize) .WriteInt16LEToBytes(ref idx, (Int16)characteristics); sink.Write(currentArray); // PE optional header + section headers + padding + IAT + CLI header + Strong signature var codeSectionVirtualOffset = sAlign; // Strong name signature var useStrongName = strongName != null; var snSize = 0u; var snRVA = 0u; var snPadding = 0u; var delaySign = eArgs.DelaySign || (!useStrongName && !an.PublicKey.IsNullOrEmpty()); RSAParameters rParams; var signingAlgorithm = AssemblyHashAlgorithm.SHA1; if (useStrongName || delaySign) { // Set appropriate module flags eArgs.ModuleFlags |= ModuleFlags.StrongNameSigned; // Check algorithm override var algoOverride = eArgs.SigningAlgorithm; var algoOverrideWasInvalid = algoOverride.HasValue && (algoOverride.Value == AssemblyHashAlgorithm.MD5 || algoOverride.Value == AssemblyHashAlgorithm.None); if (algoOverrideWasInvalid) { algoOverride = AssemblyHashAlgorithm.SHA1; } Byte[] pkToProcess; if ((useStrongName && strongName.ContainerName != null) || (!useStrongName && delaySign)) { if (an.PublicKey.IsNullOrEmpty()) { an.PublicKey = this._context.ExtractPublicKeyFromCSP(strongName.ContainerName); } pkToProcess = an.PublicKey; } else { // Get public key from BLOB pkToProcess = strongName.KeyPair.ToArray(); } // Create RSA parameters and process public key so that it will have proper, full format. Byte[] pk; rParams = CryptoUtils.CreateSigningInformationFromKeyBLOB(pkToProcess, algoOverride, out pk, out signingAlgorithm); an.PublicKey = pk; snSize = (UInt32)rParams.Modulus.Length; } else { rParams = default(RSAParameters); } if (useStrongName || delaySign) { snRVA = codeSectionVirtualOffset + iatSize + HeaderFieldOffsetsAndLengths.CLI_HEADER_SIZE; if (snSize <= 32) { // The "Standard Public Key", ECMA-335 p. 116 // It is replaced by the runtime with 128 bytes key snSize = 128; } snPadding = BitUtils.MultipleOf4(snSize) - snSize; } var revisitableOffset = HeaderFieldOffsetsAndLengths.DOS_HEADER_AND_PE_SIG.Length + currentArray.Length; var revisitableArraySize = fAlign + iatSize + HeaderFieldOffsetsAndLengths.CLI_HEADER_SIZE - revisitableOffset; // Cheat a bit - skip now, and re-visit it after all other emitting is done sink.Seek(revisitableArraySize + snSize + snPadding, SeekOrigin.Current); // First section // Start with method ILs // Current offset within section var currentOffset = iatSize + snSize + snPadding + HeaderFieldOffsetsAndLengths.CLI_HEADER_SIZE; var methodRVAs = new Dictionary <CILMethodBase, UInt32>(allMethodDefs.Count); foreach (var method in allMethodDefs) { if (method.HasILMethodBody()) { Boolean isTiny; var array = new MethodILWriter(this._context, md, method, eArgs.AssemblyMapper) .PerformEmitting(currentOffset, out isTiny); if (!isTiny) { sink.SkipToNextAlignment(ref currentOffset, 4); } methodRVAs.Add(method, codeSectionVirtualOffset + currentOffset); sink.Write(array); currentOffset += (UInt32)array.Length; } } // Write padding sink.SkipToNextAlignment(ref currentOffset, isPE64 ? 0x10u : 0x04u); // Write manifest resources here var mRes = this._module.ManifestResources; var mResInfo = new Dictionary <String, UInt32>(); var mResRVA = mRes.Values.Any(mr => mr is EmbeddedManifestResource) ? codeSectionVirtualOffset + currentOffset : 0u; var mResSize = 0u; if (mResRVA > 0u) { var tmpArray = new Byte[4]; foreach (var kvp in mRes) { if (kvp.Value is EmbeddedManifestResource) { var data = ((EmbeddedManifestResource)kvp.Value).Data; if (data != null && data.Length > 0) { mResInfo.Add(kvp.Key, mResSize); tmpArray.WriteInt32LEToBytesNoRef(0, data.Length); sink.Write(tmpArray); sink.Write(data); mResSize += 4 + (UInt32)data.Length; } } } // Write padding currentOffset += mResSize; sink.SkipToNextAlignment(ref currentOffset, isPE64 ? 0x10u : 0x04u); } // Finalize & write metadata var mdRVA = codeSectionVirtualOffset + currentOffset; UInt32 addedToOffsetBeforeMD; var mdSize = md.WriteMetaData(sink, mdRVA, eArgs, methodRVAs, mResInfo, out addedToOffsetBeforeMD); mdRVA += addedToOffsetBeforeMD; currentOffset += mdSize + addedToOffsetBeforeMD; // Pad sink.SkipToNextAlignment(ref currentOffset, 0x4); // Write debug header if present var dbgInfo = eArgs.DebugInformation; var dbgRVA = 0u; if (dbgInfo != null) { dbgRVA = codeSectionVirtualOffset + currentOffset; var dbgData = dbgInfo.DebugData; currentArray = new Byte[MetaDataConstants.DEBUG_DD_SIZE + dbgData.Length]; idx = 0; currentArray .WriteInt32LEToBytes(ref idx, dbgInfo.Characteristics) .WriteInt32LEToBytes(ref idx, dbgInfo.Timestamp) .WriteInt16LEToBytes(ref idx, dbgInfo.VersionMajor) .WriteInt16LEToBytes(ref idx, dbgInfo.VersionMinor) .WriteInt32LEToBytes(ref idx, MetaDataConstants.CODE_VIEW_DEBUG_TYPE) .WriteInt32LEToBytes(ref idx, dbgData.Length) .WriteUInt32LEToBytes(ref idx, dbgRVA + MetaDataConstants.DEBUG_DD_SIZE) .WriteUInt32LEToBytes(ref idx, fAlign + currentOffset + (UInt32)idx + 4) // Pointer to data, end Debug Data Directory .BlockCopyFrom(ref idx, dbgData); sink.Write(currentArray); currentOffset += (UInt32)currentArray.Length; sink.SkipToNextAlignment(ref currentOffset, 0x4); } var entryPointCodeRVA = 0u; var importDirectoryRVA = 0u; var importDirectorySize = 0u; var hnRVA = 0u; if (hasRelocations) { // TODO write all of these in a single array // Import Directory // First, the table importDirectoryRVA = codeSectionVirtualOffset + currentOffset; importDirectorySize = HeaderFieldOffsetsAndLengths.IMPORT_DIRECTORY_SIZE; currentArray = new Byte[importDirectorySize]; idx = 0; currentArray .WriteUInt32LEToBytes(ref idx, codeSectionVirtualOffset + currentOffset + (UInt32)currentArray.Length) // RVA of the ILT .WriteInt32LEToBytes(ref idx, 0) // DateTimeStamp .WriteInt32LEToBytes(ref idx, 0) // ForwarderChain .WriteUInt32LEToBytes(ref idx, codeSectionVirtualOffset + currentOffset + (UInt32)currentArray.Length + HeaderFieldOffsetsAndLengths.ILT_SIZE + HeaderFieldOffsetsAndLengths.HINT_NAME_MIN_SIZE + (UInt32)importHintName.Length + 1) // RVA of Import Directory name (mscoree.dll) .WriteUInt32LEToBytes(ref idx, codeSectionVirtualOffset); // RVA of Import Address Table // The rest are zeroes sink.Write(currentArray); currentOffset += (UInt32)currentArray.Length; // ILT currentArray = new Byte[HeaderFieldOffsetsAndLengths.ILT_SIZE]; idx = 0; currentArray .WriteUInt32LEToBytes(ref idx, codeSectionVirtualOffset + currentOffset + (UInt32)currentArray.Length); // RVA of the hint/name table // The rest are zeroes sink.Write(currentArray); currentOffset += (UInt32)currentArray.Length; // Hint/Name table currentArray = new Byte[HeaderFieldOffsetsAndLengths.HINT_NAME_MIN_SIZE + importHintName.Length + 1]; hnRVA = currentOffset + codeSectionVirtualOffset; // Skip first two bytes idx = HeaderFieldOffsetsAndLengths.HINT_NAME_MIN_SIZE; currentArray.WriteASCIIString(ref idx, importHintName, true); sink.Write(currentArray); currentOffset += (UInt32)currentArray.Length; // Import DirectoryName foreach (var chr in eArgs.ImportDirectoryName) { sink.WriteByte((Byte)chr); // TODO properly ASCII-encoded string ++currentOffset; } sink.WriteByte(0); // String-terminating null ++currentOffset; // Then, a zero int // TODO investigate if this is really needed... sink.SeekFromCurrent(sizeof(Int32)); currentOffset += sizeof(Int32); // Then, a PE entrypoint entryPointCodeRVA = currentOffset + codeSectionVirtualOffset; currentArray = new Byte[sizeof(Int16) + sizeof(Int32)]; idx = 0; currentArray .WriteInt16LEToBytes(ref idx, eArgs.EntryPointInstruction) .WriteUInt32LEToBytes(ref idx, (UInt32)imageBase + codeSectionVirtualOffset); sink.Write(currentArray); currentOffset += (UInt32)currentArray.Length; } // TODO Win32 resources section var hasResourceSection = false; var textSectionInfo = new SectionInfo(sink, null, currentOffset, sAlign, fAlign, !hasRelocations && !hasResourceSection); var prevSectionInfo = textSectionInfo; // TODO Win32 resources section var rsrcSectionInfo = new SectionInfo(); // Final section - relocation section var relocSectionInfo = new SectionInfo(); if (hasRelocations) { // Need to build relocation fixup for the argument of the entry point currentOffset = 0; var relocRVA = entryPointCodeRVA + 2; var pageRVA = relocRVA & ~(RELOCATION_PAGE_SIZE - 1); currentArray = new Byte[HeaderFieldOffsetsAndLengths.RELOC_ARRAY_BASE_SIZE]; idx = 0; currentArray .WriteUInt32LEToBytes(ref idx, pageRVA) .WriteUInt32LEToBytes(ref idx, HeaderFieldOffsetsAndLengths.RELOC_ARRAY_BASE_SIZE) // Block size .WriteUInt32LEToBytes(ref idx, (RELOCATION_FIXUP_TYPE << 12) + relocRVA - pageRVA); // Type (high 4 bits) + Offset (lower 12 bits) + dummy entry (16 bits) sink.Write(currentArray); currentOffset += (UInt32)currentArray.Length; relocSectionInfo = new SectionInfo(sink, prevSectionInfo, currentOffset, sAlign, fAlign, true); prevSectionInfo = relocSectionInfo; } // Revisit PE optional header + section headers + padding + IAT + CLI header currentArray = new Byte[revisitableArraySize]; idx = 0; // PE optional header, ECMA-335 pp. 279-281 // Standard fields currentArray .WriteInt16LEToBytes(ref idx, isPE64 ? HeaderFieldPossibleValues.PE64 : HeaderFieldPossibleValues.PE32) // Magic .WriteByteToBytes(ref idx, eArgs.LinkerMajor) // Linker major version .WriteByteToBytes(ref idx, eArgs.LinkerMinor) // Linker minor version .WriteUInt32LEToBytes(ref idx, textSectionInfo.rawSize) // Code size .WriteUInt32LEToBytes(ref idx, relocSectionInfo.rawSize + rsrcSectionInfo.rawSize) // Initialized data size .WriteUInt32LEToBytes(ref idx, 0) // Unitialized data size .WriteUInt32LEToBytes(ref idx, entryPointCodeRVA) // Entry point RVA .WriteUInt32LEToBytes(ref idx, textSectionInfo.virtualAddress); // Base of code if (!isPE64) { currentArray.WriteUInt32LEToBytes(ref idx, hasResourceSection ? rsrcSectionInfo.virtualAddress : relocSectionInfo.virtualAddress); // Base of data } // WinNT-specific fields var dllFlags = DLLFlags.TerminalServerAware | DLLFlags.NXCompatible | DLLFlags.NoSEH | DLLFlags.DynamicBase; if (eArgs.HighEntropyVA) { dllFlags |= DLLFlags.HighEntropyVA; } (isPE64 ? currentArray.WriteUInt64LEToBytes(ref idx, imageBase) : currentArray.WriteUInt32LEToBytes(ref idx, (UInt32)imageBase)) .WriteUInt32LEToBytes(ref idx, sAlign) // Section alignment .WriteUInt32LEToBytes(ref idx, fAlign) // File alignment .WriteUInt16LEToBytes(ref idx, eArgs.OSMajor) // OS Major .WriteUInt16LEToBytes(ref idx, eArgs.OSMinor) // OS Minor .WriteUInt16LEToBytes(ref idx, eArgs.UserMajor) // User Major .WriteUInt16LEToBytes(ref idx, eArgs.UserMinor) // User Minor .WriteUInt16LEToBytes(ref idx, eArgs.SubSysMajor) // SubSys Major .WriteUInt16LEToBytes(ref idx, eArgs.SubSysMinor) // SubSys Minor .WriteUInt32LEToBytes(ref idx, 0) // Reserved .WriteUInt32LEToBytes(ref idx, prevSectionInfo.virtualAddress + BitUtils.MultipleOf(sAlign, prevSectionInfo.virtualSize)) // Image Size .WriteUInt32LEToBytes(ref idx, textSectionInfo.rawPointer) // Header Size .WriteUInt32LEToBytes(ref idx, 0) // File Checksum .WriteUInt16LEToBytes(ref idx, GetSubSystem(moduleKind)) // SubSystem .WriteUInt16LEToBytes(ref idx, (UInt16)dllFlags); // DLL Characteristics if (isPE64) { currentArray .WriteUInt64LEToBytes(ref idx, eArgs.StackReserve) // Stack Reserve Size .WriteUInt64LEToBytes(ref idx, eArgs.StackCommit) // Stack Commit Size .WriteUInt64LEToBytes(ref idx, eArgs.HeapReserve) // Heap Reserve Size .WriteUInt64LEToBytes(ref idx, eArgs.HeapCommit); // Heap Commit Size } else { currentArray .WriteUInt32LEToBytes(ref idx, (UInt32)eArgs.StackReserve) // Stack Reserve Size .WriteUInt32LEToBytes(ref idx, (UInt32)eArgs.StackCommit) // Stack Commit Size .WriteUInt32LEToBytes(ref idx, (UInt32)eArgs.HeapReserve) // Heap Reserve Size .WriteUInt32LEToBytes(ref idx, (UInt32)eArgs.HeapCommit); // Heap Commit Size } currentArray .WriteUInt32LEToBytes(ref idx, 0) // Loader Flags .WriteUInt32LEToBytes(ref idx, HeaderFieldOffsetsAndLengths.NUMBER_OF_DATA_DIRS) // Data Directories .WriteZeroDataDirectory(ref idx) // Export Table .WriteDataDirectory(ref idx, importDirectoryRVA, importDirectorySize) // Import Table .WriteDataDirectory(ref idx, rsrcSectionInfo.virtualAddress, rsrcSectionInfo.virtualSize) // Resource Table .WriteZeroDataDirectory(ref idx) // Exception Table .WriteZeroDataDirectory(ref idx) // Certificate Table .WriteDataDirectory(ref idx, relocSectionInfo.virtualAddress, relocSectionInfo.virtualSize) // BaseRelocationTable .WriteDataDirectory(ref idx, dbgRVA > 0u ? dbgRVA : 0u, dbgRVA > 0u ? MetaDataConstants.DEBUG_DD_SIZE : 0u) // Debug Table .WriteZeroDataDirectory(ref idx) // Copyright Table .WriteZeroDataDirectory(ref idx) // Global Ptr .WriteZeroDataDirectory(ref idx) // TLS Table .WriteZeroDataDirectory(ref idx) // Load Config Table .WriteZeroDataDirectory(ref idx) // Bound Import .WriteDataDirectory(ref idx, iatSize == 0 ? 0 : codeSectionVirtualOffset, iatSize == 0 ? 0 : iatSize) // IAT .WriteZeroDataDirectory(ref idx) // Delay Import Descriptor .WriteDataDirectory(ref idx, codeSectionVirtualOffset + iatSize, HeaderFieldOffsetsAndLengths.CLI_HEADER_SIZE) // CLI Header .WriteZeroDataDirectory(ref idx) // Reserved // Section headers .WriteSectionInfo(ref idx, textSectionInfo, CODE_SECTION_NAME, HeaderFieldPossibleValues.MEM_READ | HeaderFieldPossibleValues.MEM_EXECUTE | HeaderFieldPossibleValues.CONTAINS_CODE) .WriteSectionInfo(ref idx, rsrcSectionInfo, RESOURCE_SECTION_NAME, HeaderFieldPossibleValues.MEM_READ | HeaderFieldPossibleValues.CONTAINS_INITIALIZED_DATA) .WriteSectionInfo(ref idx, relocSectionInfo, RELOCATION_SECTION_NAME, HeaderFieldPossibleValues.MEM_READ | HeaderFieldPossibleValues.MEM_DISCARDABLE | HeaderFieldPossibleValues.CONTAINS_INITIALIZED_DATA); var headersSize = (UInt32)(revisitableOffset + idx); // Skip to beginning of .text section currentArray.Skip(ref idx, (Int32)(fAlign - (UInt32)revisitableOffset - idx)); // Write IAT if needed if (hasRelocations) { currentArray .WriteUInt32LEToBytes(ref idx, hnRVA) .WriteUInt32LEToBytes(ref idx, 0); } // CLI Header, ECMA-335, p. 283 // At the moment, the 32BitRequired flag must be specified as well, if 32BitPreferred flag is specified. // This is for backwards compatibility. // Actually, since CorFlags lets specify Preferred32Bit separately, allow this to do too. var moduleFlags = eArgs.ModuleFlags; //if ( moduleFlags.HasFlag( ModuleFlags.Preferred32Bit ) ) //{ // moduleFlags |= ModuleFlags.Required32Bit; //} currentArray .WriteUInt32LEToBytes(ref idx, HeaderFieldOffsetsAndLengths.CLI_HEADER_SIZE) // Cb .WriteUInt16LEToBytes(ref idx, eArgs.CLIMajor) // MajorRuntimeVersion .WriteUInt16LEToBytes(ref idx, eArgs.CLIMinor) // MinorRuntimeVersion .WriteDataDirectory(ref idx, mdRVA, mdSize) // MetaData .WriteInt32LEToBytes(ref idx, (Int32)moduleFlags) // Flags .WriteInt32LEToBytes(ref idx, clrEntryPointToken) // EntryPointToken .WriteDataDirectory(ref idx, mResRVA, mResSize); // Resources var snDataDirOffset = revisitableOffset + idx; currentArray .WriteDataDirectory(ref idx, snRVA, snSize) // StrongNameSignature .WriteZeroDataDirectory(ref idx) // CodeManagerTable .WriteZeroDataDirectory(ref idx) // VTableFixups .WriteZeroDataDirectory(ref idx) // ExportAddressTableJumps .WriteZeroDataDirectory(ref idx); // ManagedNativeHeader #if DEBUG if (idx != currentArray.Length) { throw new Exception("Something went wrong when emitting file headers. Emitted " + idx + " bytes, but was supposed to emit " + currentArray.Length + " bytes."); } #endif sink.Seek(revisitableOffset, SeekOrigin.Begin); sink.Write(currentArray); if (useStrongName || delaySign) { if (!delaySign) { // Try create RSA first var rsaArgs = strongName.ContainerName == null ? new RSACreationEventArgs(rParams) : new RSACreationEventArgs(strongName.ContainerName); this._context.LaunchRSACreationEvent(rsaArgs); using (var rsa = rsaArgs.RSA) { var buffer = new Byte[MetaDataConstants.STREAM_COPY_BUFFER_SIZE]; Func <Stream> hashStream; Func <Byte[]> hashGetter; IDisposable transform; this._context.LaunchHashStreamEvent(signingAlgorithm, out hashStream, out hashGetter, out transform); RSASignatureCreationEventArgs sigArgs; using (var tf = transform) { using (var cryptoStream = hashStream()) { // Calculate hash of required parts of file (ECMA-335, p.117) sink.Seek(0, SeekOrigin.Begin); sink.CopyStreamPart(cryptoStream, buffer, headersSize); sink.Seek(fAlign, SeekOrigin.Begin); sink.CopyStreamPart(cryptoStream, buffer, snRVA - codeSectionVirtualOffset); sink.Seek(snSize + snPadding, SeekOrigin.Current); sink.CopyStream(cryptoStream, buffer); } sigArgs = new RSASignatureCreationEventArgs(rsa, signingAlgorithm, hashGetter()); } this._context.LaunchRSASignatureCreationEvent(sigArgs); var strongNameArray = sigArgs.Signature; if (snSize != strongNameArray.Length) { throw new CryptographicException("Calculated and actual strong name size differ (calculated: " + snSize + ", actual: " + strongNameArray.Length + ")."); } Array.Reverse(strongNameArray); // Write strong name sink.Seek(snRVA - codeSectionVirtualOffset + fAlign, SeekOrigin.Begin); sink.Write(strongNameArray); } } currentArray = new Byte[8]; idx = 0; currentArray.WriteDataDirectory(ref idx, snRVA, snSize); sink.Seek(snDataDirOffset, SeekOrigin.Begin); sink.Write(currentArray); } } }
public void Init() { switch (GlobalHandler.password) { case 1: passwordmodel = new PasswordModel(new List <String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); break; case 2: passwordmodel = new PasswordModel(new List <System.String>() { "POSX3G", "POSX4G", "POSX5G", "POSX6G" }, 4); break; case 3: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX3G", "POSX7G", "POSX9G" }, 4); break; case 4: passwordmodel = new PasswordModel(new List <System.String>() { "POSX9G", "POSX6G", "POSX5R", "POSX6R" }, 4); break; case 5: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX9G", "POSX1W", "POSX2W" }, 4); break; case 6: passwordmodel = new PasswordModel(new List <System.String>() { "POSX4G", "POSX5G", "POSX6G", "POSX5B" }, 4); break; case 7: passwordmodel = new PasswordModel(new List <System.String>() { "POSX4G", "POSX1W", "POSX2W", "POSX1O" }, 4); break; case 8: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX5R", "POSX1W" }, 4); break; case 9: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX5R", "POSX5B", "POSX6B" }, 4); break; case 10: passwordmodel = new PasswordModel(new List <System.String>() { "POSX7G", "POSX5W", "POSX9B", "POSX7R" }, 4); break; case 11: passwordmodel = new PasswordModel(new List <System.String>() { "POSX3G", "POSX3W", "POSX4O", "POSX5R" }, 4); break; case 12: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX3O", "POSX4B", "POSX5W" }, 4); break; case 13: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX6G", "POSX7G", "POSX8G" }, 4); break; case 14: passwordmodel = new PasswordModel(new List <System.String>() { "POSX6G", "POSX7G", "POSX8G", "POSX9G" }, 4); break; case 15: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX8G", "POSX9G" }, 4); break; case 16: passwordmodel = new PasswordModel(new List <System.String>() { "POSX7G", "POSX8G", "POSX1R", "POSX2R" }, 4); break; case 17: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX1W", "POSX2W", "POSX3W" }, 4); break; case 18: passwordmodel = new PasswordModel(new List <System.String>() { "POSX9G", "POSX8G", "POSX1B", "POSX2B" }, 4); break; case 19: passwordmodel = new PasswordModel(new List <System.String>() { "POSX4G", "POSX4W", "POSX6W", "POSX5O" }, 4); break; case 20: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX5R", "POSX1W", "POSX2W" }, 4); break; case 21: passwordmodel = new PasswordModel(new List <System.String>() { "POSX7G", "POSX7W", "POSX9W", "POSX7O" }, 4); break; case 22: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX2W", "POSX5B", "POSX9R" }, 4); break; case 23: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX1W", "POSX5B", "POSX6O" }, 4); break; case 24: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX1W", "POSX1R", "POSX5B" }, 4); break; } foreach (GameObject pin in GameObject.FindGameObjectsWithTag("PIN")) { materialholderList.Add(new MaterialHolder(pin.GetComponent <MeshRenderer>().material, pin.gameObject)); } currentGameobject = null; // Get EyeTracker unity object _eyeTracker = Tobii.Research.Unity.VREyeTracker.Instance; if (_eyeTracker == null) { Debug.Log("Failed to find eye tracker, has it been added to scene?"); } _gazeTrail = Tobii.Research.Unity.VRGazeTrail.Instance; _highlightInfo = new ActiveObject(); selectedPINS = new List <String>(); inputtime = 0; fullinputtime = 0; timerfinalgazedata = 0.3f; started = false; stopped = false; fw = GameObject.Find("Storage").GetComponent <FileWriter1>(); mdfw = GameObject.Find("Storage").GetComponent <MetaDataWriter>(); fullfw = GameObject.Find("Storage").GetComponent <FullFileWriter1>(); fullmdfw = GameObject.Find("Storage").GetComponent <FullMetaDataWriter>(); fullfw.StartRecording(); fullmdfw.StartRecording(); }
// called by anyone public void Init() { if (GlobalHandler.modality == 0 || GlobalHandler.modality == 2) { if (GameObject.Find("HeadPosePoint") != null) { GameObject.Find("HeadPosePoint").SetActive(false); } } if (GlobalHandler.modality == 1 || GlobalHandler.modality == 2) { if (GameObject.Find("[VRGazeTrail]") != null) { GameObject.Find("[VRGazeTrail]").SetActive(false); } } foreach (GameObject pin in GameObject.FindGameObjectsWithTag("PIN")) { materialholderList.Add(new MaterialHolder(pin.GetComponent <MeshRenderer>().material, pin.gameObject)); } currentGameobject = null; // Get EyeTracker unity object _eyeTracker = Tobii.Research.Unity.VREyeTracker.Instance; if (_eyeTracker == null) { Debug.Log("Failed to find eye tracker, has it been added to scene?"); } _gazeTrail = Tobii.Research.Unity.VRGazeTrail.Instance; _highlightInfo = new ActiveObject(); selectedPINS = new List <String>(); inputtime = 0; fullinputtime = 0; started = false; stopped = false; // not relevant but we need it because of the current implementation // participant passwords if (security == "weak") { switch (GlobalHandler.participant_number) { case 1: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1W", "POSX2W", "POSX3W", "POSX4W" }, 4); break; case 2: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); break; case 3: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); break; case 4: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX1G", "POSX3G", "POSX4G" }, 4); break; case 5: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); break; case 6: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); break; case 7: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX4G", "POSX7G", "POSX8G" }, 4); break; case 8: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX4G", "POSX7G", "POSX8G" }, 4); break; case 9: passwordmodel = new PasswordModel(new List <System.String>() { "POSX3G", "POSX1G", "POSX4G", "POSX1G" }, 4); break; case 10: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1W", "POSX2W", "POSX3W", "POSX4W" }, 4); break; case 11: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); break; case 12: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); break; case 13: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1W", "POSX2W", "POSX3W", "POSX4W" }, 4); break; case 14: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX4G", "POSX6G", "POSX8G" }, 4); break; case 15: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); break; case 16: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX4G", "POSX6G", "POSX8G" }, 4); break; case 17: passwordmodel = new PasswordModel(new List <System.String>() { "POSX5G", "POSX5G", "POSX5G", "POSX5G" }, 4); break; case 18: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); break; case 19: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); break; case 20: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX8W", "POSX2O", "POSX4R" }, 4); break; case 21: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1W", "POSX5W", "POSX9W", "POSX6W" }, 4); break; case 22: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); break; case 23: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); break; } } else if (security == "medium") { switch (GlobalHandler.participant_number) { case 1: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2W", "POSX4W", "POSX6W", "POSX8W" }, 4); break; case 2: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX4G", "POSX1W", "POSX1W" }, 4); break; case 3: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3O", "POSX4O" }, 4); break; case 4: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX5G", "POSX9G", "POSX1O" }, 4); break; case 5: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2W", "POSX3O", "POSX4R" }, 4); break; case 6: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3W", "POSX4W" }, 4); break; case 7: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX3G", "POSX1W", "POSX9W" }, 4); break; case 8: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX8G", "POSX2O", "POSX4O" }, 4); break; case 9: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX2G", "POSX4B", "POSX4O" }, 4); break; case 10: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2W", "POSX3W", "POSX4O" }, 4); break; case 11: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1R", "POSX2W", "POSX3G", "POSX4R" }, 4); break; case 12: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX5G", "POSX8G", "POSX3G" }, 4); break; case 13: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2G", "POSX3G", "POSX4G" }, 4); break; case 14: passwordmodel = new PasswordModel(new List <System.String>() { "POSX6G", "POSX1G", "POSX7G", "POSX9G" }, 4); break; case 15: passwordmodel = new PasswordModel(new List <System.String>() { "POSX6G", "POSX5G", "POSX7G", "POSX1G" }, 4); break; case 16: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX6G", "POSX7G", "POSX3G" }, 4); break; case 17: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX4G", "POSX8G", "POSX6G" }, 4); break; case 18: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX9G", "POSX6G", "POSX3G" }, 4); break; case 19: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX3G", "POSX5G", "POSX7G" }, 4); break; case 20: passwordmodel = new PasswordModel(new List <System.String>() { "POSX3G", "POSX2W", "POSX3O", "POSX9R" }, 4); break; case 21: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1W", "POSX4W", "POSX7W", "POSX5W" }, 4); break; case 22: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX9G", "POSX1G", "POSX9G" }, 4); break; case 23: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX5G", "POSX9G", "POSX6G" }, 4); break; } } else if (security == "strong") { switch (GlobalHandler.participant_number) { case 1: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2W", "POSX2W", "POSX8W", "POSX4W" }, 4); break; case 2: passwordmodel = new PasswordModel(new List <System.String>() { "POSX4G", "POSX4O", "POSX2W", "POSX2W" }, 4); break; case 3: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX5W", "POSX8B", "POSX9B" }, 4); break; case 4: passwordmodel = new PasswordModel(new List <System.String>() { "POSX9R", "POSX6Y", "POSX1B", "POSX3G" }, 4); break; case 5: passwordmodel = new PasswordModel(new List <System.String>() { "POSX7G", "POSX5O", "POSX2W", "POSX3G" }, 4); break; case 6: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX2W", "POSX3O", "POSX4B" }, 4); break; case 7: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX5W", "POSX5O", "POSX3B" }, 4); break; case 8: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX8G", "POSX2W", "POSX4O" }, 4); break; case 9: passwordmodel = new PasswordModel(new List <System.String>() { "POSX6G", "POSX8G", "POSX6B", "POSX1W" }, 4); break; case 10: passwordmodel = new PasswordModel(new List <System.String>() { "POSX3W", "POSX9W", "POSX9G", "POSX1G" }, 4); break; case 11: passwordmodel = new PasswordModel(new List <System.String>() { "POSX7G", "POSX6B", "POSX8W", "POSX5Y" }, 4); break; case 12: passwordmodel = new PasswordModel(new List <System.String>() { "POSX9G", "POSX8G", "POSX1G", "POSX5G" }, 4); break; case 13: passwordmodel = new PasswordModel(new List <System.String>() { "POSX4B", "POSX3G", "POSX9R", "POSX4G" }, 4); break; case 14: passwordmodel = new PasswordModel(new List <System.String>() { "POSX4G", "POSX1O", "POSX3W", "POSX2R" }, 4); break; case 15: passwordmodel = new PasswordModel(new List <System.String>() { "POSX8O", "POSX2O", "POSX3W", "POSX8W" }, 4); break; case 16: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX4G", "POSX1G", "POSX9G" }, 4); break; case 17: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX1O", "POSX9W", "POSX9W" }, 4); break; case 18: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX9G", "POSX6W", "POSX6O" }, 4); break; case 19: passwordmodel = new PasswordModel(new List <System.String>() { "POSX1G", "POSX5O", "POSX9B", "POSX5R" }, 4); break; case 20: passwordmodel = new PasswordModel(new List <System.String>() { "POSX6W", "POSX4W", "POSX9O", "POSX7O" }, 4); break; case 21: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2W", "POSX4W", "POSX6W", "POSX8W" }, 4); break; case 22: passwordmodel = new PasswordModel(new List <System.String>() { "POSX6G", "POSX2O", "POSX7W", "POSX5R" }, 4); break; case 23: passwordmodel = new PasswordModel(new List <System.String>() { "POSX2G", "POSX3R", "POSX2W", "POSX3O" }, 4); break; } } // //fw = GameObject.Find("Storage").GetComponent<CreativityWriter>(); mdfw = GameObject.Find("Storage").GetComponent <MetaDataWriter>(); //fullfw = GameObject.Find("Storage").GetComponent<FullCreativityWriter>(); fullmdfw = GameObject.Find("Storage").GetComponent <FullMetaDataWriter>(); //fullfw.StartRecording(); fullmdfw.StartRecording(); //Debug.Log(GameObject.Find("Planes").transform.rotation); feedbackElements = new List <FeedbackModel>(); feedbacktime = 0.4f; }
public void Write(string _projectFilePath, IMetaData _metaData, Dictionary <string, List <TimeStepDataAsset> > _dataAssets) { MetaDataWriter.Write(_projectFilePath, _metaData, _dataAssets); }
public MetaFile Build(IMetaValue value) { MetaInitialize(); MetaBuildStructuresAndEnums(); var writer = new MetaDataWriter(); writer.SelectBlockByNameHash(((MetaStructure)value).info.StructureNameHash); WriteStructure(writer, (MetaStructure)value); for (int k = meta.StructureInfos.Count - 1; k >= 0; k--) { if (!usedStructureKeys.Contains(meta.StructureInfos[k].StructureKey)) { meta.StructureInfos.RemoveAt(k); } } // TODO: refactor this hacky way to remove unused EnumInfos for (int e = meta.EnumInfos.Count - 1; e >= 0; e--) { bool required = false; for (int s = 0; s < meta.StructureInfos.Count; s++) { var entries = meta.StructureInfos[s].Entries; foreach (var entry in entries) { if (entry.ReferenceKey == meta.EnumInfos[e].EnumNameHash) { required = true; break; } } if (required) { break; } } if (!required) { meta.EnumInfos.RemoveAt(e); } } meta.DataBlocks = new ResourceSimpleArray <DataBlock>(); foreach (var block in writer.Blocks) { var metaDataBlock = new DataBlock(); metaDataBlock.StructureNameHash = block.NameHash; metaDataBlock.Data = StreamToResourceBytes(block.Stream); meta.DataBlocks.Add(metaDataBlock); } for (int i = 0; i < meta.DataBlocks.Count; i++) { if (meta.DataBlocks[i].StructureNameHash == ((MetaStructure)value).info.StructureNameHash) { meta.RootBlockIndex = i + 1; } } return(meta); }