diff options
Diffstat (limited to 'Software/Visual_Studio/Tango.Emulations')
5 files changed, 60 insertions, 906 deletions
diff --git a/Software/Visual_Studio/Tango.Emulations/EmulatorBase.cs b/Software/Visual_Studio/Tango.Emulations/EmulatorBase.cs index ca40cce7a..161277459 100644 --- a/Software/Visual_Studio/Tango.Emulations/EmulatorBase.cs +++ b/Software/Visual_Studio/Tango.Emulations/EmulatorBase.cs @@ -108,7 +108,7 @@ namespace Tango.Emulations /// <summary> /// Stops this instance. /// </summary> - public virtual async Task Stop() + public async Task Stop() { if (IsStarted) { @@ -120,7 +120,7 @@ namespace Tango.Emulations /// <summary> /// Starts this instance. /// </summary> - public virtual async Task Start() + public async Task Start() { if (!IsStarted) { @@ -152,7 +152,7 @@ namespace Tango.Emulations /// </summary> /// <param name="sender">The sender.</param> /// <param name="container">The container.</param> - protected abstract void OnTransporterRequestReceived(object sender, RequestReceivedEventArgs e); + protected abstract void OnTransporterRequestReceived(object sender, MessageContainer container); #endregion diff --git a/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs b/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs index 6360b7bbc..ad3b242f4 100644 --- a/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs +++ b/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs @@ -32,10 +32,6 @@ using Tango.PMR.FirmwareUpgrade; using System.Diagnostics; using Tango.Core.ExtensionMethods; using Tango.PMR.MachineStatus; -using Tango.PMR.Power; -using Tango.PMR.ThreadLoading; -using Tango.PMR.IFS; -using Tango.PMR.DataStore; namespace Tango.Emulations.Emulators { @@ -54,8 +50,6 @@ namespace Tango.Emulations.Emulators } private const int MAX_CHUNK_LENGTH = 4000; - private const int DIAGNOSTICS_INTERVAL = 300; - private static Random _rnd = new Random(); private StartDiagnosticsRequest _diagnosticsRequest; private bool _cancelJob; private List<PMR.Hardware.HardwareMotorType> _motorJoggingRequestTypes; @@ -79,13 +73,6 @@ namespace Tango.Emulations.Emulators private JobTicket _current_job_ticket; private String _current_job_resume_token; private FileUploadRequest _lastFileUploadRequest; - private bool _isAfterReset; - private bool _abortPowerDown; - private bool _isThreadLoadingStarted; - private String _threadLoadingToken; - private DateTime _connectionTime; - private int _jobAbortCounter; - private bool _abortHeadCleaning; #region Properties @@ -116,8 +103,6 @@ namespace Tango.Emulations.Emulators public MachineStatus MachineStatus { get; set; } - public InkFillingStatus InkFillingStatus { get; set; } - #endregion #region Constructors @@ -136,7 +121,6 @@ namespace Tango.Emulations.Emulators /// <param name="transporter">The transporter.</param> public MachineEmulator(ITransporter transporter) : base(transporter) { - transporter.ComponentName = $"Machine Emulator"; LogManager.Log("Machine emulator initialized using transporter " + transporter.ToString()); Init(); } @@ -154,7 +138,6 @@ namespace Tango.Emulations.Emulators private void Init() { - _isAfterReset = true; MachineStatus = new MachineStatus(); MachineStatus.State = MachineState.Ready; @@ -229,33 +212,6 @@ namespace Tango.Emulations.Emulators } ResetGraphFactors(); - - InkFillingStatus = new InkFillingStatus(); - - for (int i = 0; i < 8; i++) - { - InkFillingStatus.CartridgesStatuses.Add(new CartridgeStatus() - { - Cartridge = new Cartridge() - { - Index = i, - Slot = CartridgeSlot.Ink, - }, - State = CartridgeState.Present - }); - } - - InkFillingStatus.CartridgesStatuses.Add(new CartridgeStatus() - { - Cartridge = new Cartridge() { Index = 0, Slot = CartridgeSlot.WasteMiddle }, - State = CartridgeState.Present - }); - - InkFillingStatus.CartridgesStatuses.Add(new CartridgeStatus() - { - Cartridge = new Cartridge() { Index = 1, Slot = CartridgeSlot.WasteLower }, - State = CartridgeState.Present - }); } private void ResetGraphFactors() @@ -268,21 +224,13 @@ namespace Tango.Emulations.Emulators #region Override Methods - public override Task Start() - { - _isAfterReset = true; - return base.Start(); - } - /// <summary> /// Called on new request message. /// </summary> /// <param name="sender">The sender.</param> /// <param name="container">The container.</param> - protected override void OnTransporterRequestReceived(object sender, RequestReceivedEventArgs e) + protected override void OnTransporterRequestReceived(object sender, MessageContainer container) { - var container = e.Container; - if (container.Type != MessageType.FileChunkUploadRequest && container.Type != MessageType.FileChunkDownloadRequest) { LogManager.Log(container.Type.ToString().ToWords() + " received." + Environment.NewLine + MessageFactory.ExtractMessageFromContainer(container).ToJsonString()); @@ -440,42 +388,6 @@ namespace Tango.Emulations.Emulators case MessageType.ActivateVersionRequest: HandleActivateVersionRequest(MessageFactory.ParseTangoMessageFromContainer<ActivateVersionRequest>(container)); break; - case MessageType.StartPowerDownRequest: - HandleStartPowerDownRequest(MessageFactory.ParseTangoMessageFromContainer<StartPowerDownRequest>(container)); - break; - case MessageType.AbortPowerDownRequest: - HandleAbortPowerDownRequest(MessageFactory.ParseTangoMessageFromContainer<AbortPowerDownRequest>(container)); - break; - case MessageType.StartThreadLoadingRequest: - HandleStartThreadLoadingRequest(MessageFactory.ParseTangoMessageFromContainer<StartThreadLoadingRequest>(container)); - break; - case MessageType.TryThreadLoadingRequest: - HandleTryThreadLoadingRequest(MessageFactory.ParseTangoMessageFromContainer<TryThreadLoadingRequest>(container)); - break; - case MessageType.ContinueThreadLoadingRequest: - HandleContinueThreadLoadingRequest(MessageFactory.ParseTangoMessageFromContainer<ContinueThreadLoadingRequest>(container)); - break; - case MessageType.StartHeadCleaningRequest: - HandleStartHeadCleaningRequest(MessageFactory.ParseTangoMessageFromContainer<StartHeadCleaningRequest>(container)); - break; - case MessageType.AbortHeadCleaningRequest: - HandleAbortHeadCleaningRequest(MessageFactory.ParseTangoMessageFromContainer<AbortHeadCleaningRequest>(container)); - break; - case MessageType.StartPowerUpRequest: - HandleStartPowerUpRequest(MessageFactory.ParseTangoMessageFromContainer<StartPowerUpRequest>(container)); - break; - case MessageType.StartInkFillingStatusRequest: - HandleStartInkFillingStatusRequest(MessageFactory.ParseTangoMessageFromContainer<StartInkFillingStatusRequest>(container)); - break; - case MessageType.StandByRequest: - HandleStandByRequest(MessageFactory.ParseTangoMessageFromContainer<StandByRequest>(container)); - break; - case MessageType.AttemptThreadJoggingRequest: - HandleAttemptThreadJoggingRequest(MessageFactory.ParseTangoMessageFromContainer<AttemptThreadJoggingRequest>(container)); - break; - case MessageType.DataStoreItemModifiedRequest: - HandleDataStoreItemModifiedRequest(MessageFactory.ParseTangoMessageFromContainer<DataStoreItemModifiedRequest>(container)); - break; } } @@ -499,7 +411,7 @@ namespace Tango.Emulations.Emulators { for (int i = 0; i < request.Message.Amount; i++) { - Thread.Sleep(request.Message.Delay); + Thread.Sleep(request.Message.Delay * 10); var res = MessageFactory.CreateTangoMessage<ProgressResponse>(request.Container.Token); res.Message.Progress = i; @@ -507,8 +419,6 @@ namespace Tango.Emulations.Emulators Transporter.SendResponse(res); } - - Transporter.SendResponse(new ProgressResponse(), request.Container.Token, new TransportResponseConfig() { Completed = true }); }); } @@ -523,12 +433,8 @@ namespace Tango.Emulations.Emulators var cancelToken = CreateCancelToken(); - Stopwatch watch = new Stopwatch(); - Task.Factory.StartNew(() => { - watch.Start(); - while (_diagnostics_enabled && Transporter.State == TransportComponentState.Connected && !cancelToken.Canceled) { StartDiagnosticsResponse res = new StartDiagnosticsResponse(); @@ -553,8 +459,6 @@ namespace Tango.Emulations.Emulators for (int i = 0; i < 1; i++) { monitors.Dancer2Angle.Add(y); - monitors.GasSensor.Add(y); - monitors.FilterDeltaPressure.Add(y); } for (int i = 0; i < 30; i++) @@ -604,16 +508,13 @@ namespace Tango.Emulations.Emulators res.ComponentsStates.AddRange(_componentsStates); res.HeatersStates.AddRange(_heater_states); res.ValvesStates.AddRange(_valveStates); - res.ElapsedMilli = (uint)watch.ElapsedMilliseconds; - - watch.Restart(); if (!EmulateCorruption) { Transporter.SendResponse<StartDiagnosticsResponse>(res, request.Container.Token); } - Thread.Sleep(DIAGNOSTICS_INTERVAL); + Thread.Sleep(300); } }); @@ -709,7 +610,7 @@ namespace Tango.Emulations.Emulators Transporter.SendResponse<StartDebugLogResponse>(res, request.Container.Token); } - Thread.Sleep(1000); + Thread.Sleep(10); counter_message++; @@ -727,19 +628,18 @@ namespace Tango.Emulations.Emulators MachineStatus.State = MachineState.PreparingJob; JobTicket job = request.Message.JobTicket; - var jobTicket = job; - _current_job_ticket = jobTicket.Clone(); + _current_job_ticket = job; _current_job_resume_token = null; - if (jobTicket.UploadStrategy == JobUploadStrategy.JobDescriptionFile) + if (_current_job_ticket.UploadStrategy == JobUploadStrategy.JobDescriptionFile) { - using (FileStream fs = new FileStream(jobTicket.JobDescriptionFile, FileMode.Open)) + using (FileStream fs = new FileStream(_current_job_ticket.JobDescriptionFile, FileMode.Open)) { var segments = JobDescriptionFile.ReadJobDescriptionFile(fs); - jobTicket.Segments.AddRange(segments); + _current_job_ticket.Segments.AddRange(segments); } - var logedTicket = jobTicket.Clone(); + var logedTicket = _current_job_ticket.Clone(); foreach (var segment in logedTicket.Segments) { if (segment.BrushStops.Count > 2) @@ -757,127 +657,52 @@ namespace Tango.Emulations.Emulators double centimeter_per_second = request.Message.JobTicket.ProcessParameters.DyeingSpeed; + double progress = 0; _cancelJob = false; bool message_sent = false; - int units = (int)Math.Max(job.NumberOfUnits, 1); - double unit_length = job.Length;/// units; + double length = job.Segments.Sum(x => x.Length) * (Math.Max(job.NumberOfUnits, 1)); Task.Factory.StartNew(() => { MachineStatus.State = MachineState.RunningJob; - List<int> calculatedStopIndexes = new List<int>(); - double progress = 0; - double lastProgress = 0; - Stopwatch watch = new Stopwatch(); - Dictionary<int, IDSPackLevel> dispenserindexToPacklevel = new Dictionary<int, IDSPackLevel>(); - - for (int i = 0; i < units; i++) + while (progress < length + job.ProcessParameters.DryerBufferLength * ProcessParametersTable.DRYER_METERS_PER_CYCLE && !_cancelJob) { + var status = new PMR.Printing.JobStatus(); + status.Progress = progress; - while (progress < unit_length + (i == units - 1 ? (job.ProcessParameters.DryerBufferLength * ProcessParametersTable.DRYER_METERS_PER_CYCLE + ProcessParametersTable.DRYER_TO_SPOOL_LENGTH_METERS) : 0) && !_cancelJob) + if (!message_sent) { - var status = new PMR.Printing.JobStatus(); - status.Progress = progress; - - if (!message_sent) - { - message_sent = true; - status.Message = "Demo Message From Emulator..."; - } + message_sent = true; + status.Message = "Demo Message From Emulator..."; + } - if (!EmulateCorruption) + if (!EmulateCorruption) + { + if (_current_job_resume_token == null) { - if (_current_job_resume_token == null) - { - Transporter.SendResponse<JobResponse>(new JobResponse() - { - Status = status, - - }, request.Container.Token); - } - else + Transporter.SendResponse<JobResponse>(new JobResponse() { - Transporter.SendResponse<ResumeCurrentJobResponse>(new ResumeCurrentJobResponse() - { - Status = status, + Status = status, - }, _current_job_resume_token); - } + }, request.Container.Token); } - - progress += Math.Min((centimeter_per_second / 1000d), (unit_length + (i == units - 1 ? (job.ProcessParameters.DryerBufferLength * ProcessParametersTable.DRYER_METERS_PER_CYCLE + ProcessParametersTable.DRYER_TO_SPOOL_LENGTH_METERS) : 0)) - progress); - - double currentPosition = 0; - double nextStopPosition = unit_length; - - watch.Restart(); - for (int seg_index = 0; seg_index < jobTicket.Segments.Count(); seg_index++) + else { - var segment = jobTicket.Segments[seg_index]; - if ((seg_index + 1) < jobTicket.Segments.Count()) + Transporter.SendResponse<ResumeCurrentJobResponse>(new ResumeCurrentJobResponse() { - nextStopPosition = jobTicket.Segments[seg_index + 1].Length; - } + Status = status, - for (int index = 0; index < segment.BrushStops.Count(); index++) - { - var stop = segment.BrushStops[index]; - if ((index + 1) < segment.BrushStops.Count()) - { - var nextStop = segment.BrushStops[index + 1]; - nextStopPosition = nextStop.OffsetMeters; - } - - if (!calculatedStopIndexes.Contains(stop.Index)) - { - var brushStopPosition = currentPosition + stop.OffsetMeters; - if (brushStopPosition >= lastProgress && brushStopPosition <= progress) - { - foreach (var dispenser in stop.Dispensers) - { - var quantity = dispenser.NanoliterPerCentimeter * (nextStopPosition - stop.OffsetMeters) * 100d; - IDSPackLevel packLevel; - if (!dispenserindexToPacklevel.TryGetValue(dispenser.Index, out packLevel)) - { - packLevel = MachineStatus.IDSPacksLevels.SingleOrDefault(x => x.Index == dispenser.Index); - dispenserindexToPacklevel.Add(dispenser.Index, packLevel); - } - if (packLevel != null) - { - packLevel.DispenserLevel -= (int)quantity; - } - } - calculatedStopIndexes.Add(stop.Index); - } - } - } - currentPosition += segment.Length; - } - watch.Stop(); - lastProgress = progress; - int delay = (100 - (int)watch.ElapsedMilliseconds) > 0 ? (100 - (int)watch.ElapsedMilliseconds) : 5; - Thread.Sleep(delay); - - if (_cancelJob) - { - break; + }, _current_job_resume_token); } } - if (_cancelJob) - { - break; - } - } + progress += Math.Min((centimeter_per_second / 1000d), (length + job.ProcessParameters.DryerBufferLength * ProcessParametersTable.DRYER_METERS_PER_CYCLE) - progress); - foreach (var packLevel in MachineStatus.IDSPacksLevels) - { - Debug.WriteLine($"packLevel.DispenserLevel = {packLevel.DispenserLevel}"); - Debug.WriteLine($"quantity = {130000000 - packLevel.DispenserLevel}"); - Debug.WriteLine($"packLevel.Index = {packLevel.Index}"); + Thread.Sleep(100); } - jobTicket = null; + + _current_job_ticket = null; if (_cancelJob) { @@ -886,14 +711,14 @@ namespace Tango.Emulations.Emulators Transporter.SendResponse<JobResponse>(new JobResponse() { - }, request.Container.Token, new TransportResponseConfig() { ErrorCode = ErrorCode.ContinuousResponseAborted }); + }, request.Container.Token, false, ErrorCode.ContinuousResponseAborted); } else { Transporter.SendResponse<ResumeCurrentJobResponse>(new ResumeCurrentJobResponse() { - }, _current_job_resume_token, new TransportResponseConfig() { ErrorCode = ErrorCode.ContinuousResponseAborted }); + }, _current_job_resume_token, false, ErrorCode.ContinuousResponseAborted); } } else @@ -904,10 +729,10 @@ namespace Tango.Emulations.Emulators { Status = new PMR.Printing.JobStatus() { - Progress = unit_length + job.ProcessParameters.DryerBufferLength * ProcessParametersTable.DRYER_METERS_PER_CYCLE + ProcessParametersTable.DRYER_TO_SPOOL_LENGTH_METERS, + Progress = length + job.ProcessParameters.DryerBufferLength * ProcessParametersTable.DRYER_METERS_PER_CYCLE, } - }, request.Container.Token, new TransportResponseConfig() { Completed = !_cancelJob }); + }, request.Container.Token, !_cancelJob); } else { @@ -915,10 +740,10 @@ namespace Tango.Emulations.Emulators { Status = new PMR.Printing.JobStatus() { - Progress = unit_length + job.ProcessParameters.DryerBufferLength * ProcessParametersTable.DRYER_METERS_PER_CYCLE + ProcessParametersTable.DRYER_TO_SPOOL_LENGTH_METERS, + Progress = length + job.ProcessParameters.DryerBufferLength * ProcessParametersTable.DRYER_METERS_PER_CYCLE, } - }, _current_job_resume_token, new TransportResponseConfig() { Completed = !_cancelJob }); + }, _current_job_resume_token, !_cancelJob); } } @@ -928,16 +753,8 @@ namespace Tango.Emulations.Emulators private void HandleAbortJobRequest(TangoMessage<AbortJobRequest> request) { - //if (_jobAbortCounter == 1) - //{ _cancelJob = true; Transporter.SendResponse<AbortJobResponse>(new AbortJobResponse(), request.Container.Token); - // _jobAbortCounter = 0; - //} - //else - //{ - // _jobAbortCounter++; - //} } private void HandleMotorJoggingRequest(TangoMessage<MotorJoggingRequest> request) @@ -1006,27 +823,9 @@ namespace Tango.Emulations.Emulators Thread.Sleep(30); } - Transporter.SendResponse<MotorHomingResponse>(new MotorHomingResponse() { MaxProgress = 100, Progress = 100 }, request.Container.Token, new TransportResponseConfig() { Completed = true }); + Transporter.SendResponse<MotorHomingResponse>(new MotorHomingResponse() { MaxProgress = 100, Progress = 100 }, request.Container.Token, true); _motorHomingRequestCodes.Remove(homeRequest.MotorType); ResetGraphFactors(); - - if (request.Message.MotorType == PMR.Hardware.HardwareMotorType.MotoDhLid) - { - if (request.Message.Direction == MotorDirection.Backward) - { - var eventState1 = EventsStates.FirstOrDefault(x => x.EventType == PMR.Diagnostics.EventType.DyeingHeadArcLidIsOpen); - var eventState2 = EventsStates.FirstOrDefault(x => x.EventType == PMR.Diagnostics.EventType.DyeingHeadCoverIsOpen); - eventState1.IsActive = true; - eventState2.IsActive = true; - } - else - { - var eventState1 = EventsStates.FirstOrDefault(x => x.EventType == PMR.Diagnostics.EventType.DyeingHeadArcLidIsOpen); - var eventState2 = EventsStates.FirstOrDefault(x => x.EventType == PMR.Diagnostics.EventType.DyeingHeadCoverIsOpen); - eventState1.IsActive = false; - eventState2.IsActive = false; - } - } }); } @@ -1095,7 +894,7 @@ namespace Tango.Emulations.Emulators Thread.Sleep(30); } - Transporter.SendResponse<DispenserHomingResponse>(new DispenserHomingResponse() { MaxProgress = 100, Progress = 100 }, request.Container.Token, new TransportResponseConfig() { Completed = true }); + Transporter.SendResponse<DispenserHomingResponse>(new DispenserHomingResponse() { MaxProgress = 100, Progress = 100 }, request.Container.Token, true); _dispenserHomingRequestCodes.Remove(homeRequest.Index); ResetGraphFactors(); }); @@ -1118,7 +917,7 @@ namespace Tango.Emulations.Emulators } else { - Transporter.SendResponse<SetDigitalOutResponse>(new SetDigitalOutResponse(), request.Container.Token, new TransportResponseConfig() { ErrorCode = ErrorCode.InvalidDigitalPinNumber }); + Transporter.SendResponse<SetDigitalOutResponse>(new SetDigitalOutResponse(), request.Container.Token, null, ErrorCode.InvalidDigitalPinNumber); } } @@ -1214,16 +1013,9 @@ namespace Tango.Emulations.Emulators Name = "Machine Emulator", FPGA1Version = "1.1", FPGA2Version = "2.2", - FPGA3Version = "3.3", - DiagnosticsInterval = (uint)DIAGNOSTICS_INTERVAL, + FPGA3Version = "3.3" }, - IsAfterReset = _isAfterReset, - }, request.Container.Token, new TransportResponseConfig() { ErrorCode = request.Message.Password == "1234" ? ErrorCode.None : ErrorCode.UnauthorizedConnection }); - - - _connectionTime = DateTime.Now; - - _isAfterReset = false; + }, request.Container.Token, null, request.Message.Password == "1234" ? ErrorCode.None : ErrorCode.UnauthorizedConnection); } } @@ -1328,7 +1120,7 @@ namespace Tango.Emulations.Emulators } else { - Transporter.SendResponse<ResumeCurrentJobResponse>(new ResumeCurrentJobResponse(), request.Container.Token, new TransportResponseConfig() { Completed = true, ErrorCode = ErrorCode.NoJobInProgress }); + Transporter.SendResponse<ResumeCurrentJobResponse>(new ResumeCurrentJobResponse(), request.Container.Token, true, ErrorCode.NoJobInProgress); } } @@ -1342,7 +1134,7 @@ namespace Tango.Emulations.Emulators { Capacity = d.TotalSize, FreeSpace = d.TotalFreeSpace, - Root = "C:\\EmulatorStorage" + Root = "/" }, request.Container.Token); } @@ -1394,7 +1186,7 @@ namespace Tango.Emulations.Emulators msg = ex.Message; } - Transporter.SendResponse<GetFilesResponse>(response, request.Container.Token, new TransportResponseConfig() { ErrorCode = failed ? ErrorCode.GeneralError : ErrorCode.None, ErrorMessage = msg }); + Transporter.SendResponse<GetFilesResponse>(response, request.Container.Token, false, failed ? ErrorCode.GeneralError : ErrorCode.None, msg); } private void HandleFileDownloadRequest(TangoMessage<FileDownloadRequest> request) @@ -1405,7 +1197,7 @@ namespace Tango.Emulations.Emulators { DownloadID = Guid.NewGuid().ToString(), MaxChunkLength = Math.Min(MAX_CHUNK_LENGTH, length), - }, request.Container.Token, new TransportResponseConfig() { ErrorCode = File.Exists(request.Message.FileName) ? ErrorCode.None : ErrorCode.FileNotFound }); + }, request.Container.Token, null, File.Exists(request.Message.FileName) ? ErrorCode.None : ErrorCode.FileNotFound); } private void HandleFileChunkDownloadRequest(TangoMessage<FileChunkDownloadRequest> request) @@ -1430,7 +1222,7 @@ namespace Tango.Emulations.Emulators Transporter.SendResponse<FileChunkDownloadResponse>(new FileChunkDownloadResponse() { - }, request.Container.Token, new TransportResponseConfig() { ErrorCode = ErrorCode.FileRequestDenied, ErrorMessage = ex.Message }); + }, request.Container.Token, null, ErrorCode.FileRequestDenied, ex.Message); } } @@ -1443,7 +1235,7 @@ namespace Tango.Emulations.Emulators } catch (Exception ex) { - Transporter.SendResponse<CreateResponse>(new CreateResponse(), request.Container.Token, new TransportResponseConfig() { ErrorCode = ErrorCode.FileRequestInvalidParameter, ErrorMessage = ex.Message }); + Transporter.SendResponse<CreateResponse>(new CreateResponse(), request.Container.Token, null, ErrorCode.FileRequestInvalidParameter, ex.Message); } } @@ -1464,7 +1256,7 @@ namespace Tango.Emulations.Emulators } catch (Exception ex) { - Transporter.SendResponse<DeleteResponse>(new DeleteResponse(), request.Container.Token, new TransportResponseConfig() { ErrorCode = ErrorCode.FileRequestInvalidParameter, ErrorMessage = ex.Message }); + Transporter.SendResponse<DeleteResponse>(new DeleteResponse(), request.Container.Token, null, ErrorCode.FileRequestInvalidParameter, ex.Message); } } @@ -1497,7 +1289,7 @@ namespace Tango.Emulations.Emulators } catch (Exception ex) { - Transporter.SendResponse<FileChunkUploadResponse>(new FileChunkUploadResponse(), request.Container.Token, new TransportResponseConfig() { ErrorCode = ErrorCode.GeneralError, ErrorMessage = ex.Message }); + Transporter.SendResponse<FileChunkUploadResponse>(new FileChunkUploadResponse(), request.Container.Token, null, ErrorCode.GeneralError, ex.Message); } } @@ -1518,7 +1310,7 @@ namespace Tango.Emulations.Emulators } catch (Exception ex) { - Transporter.SendResponse<ValidateVersionResponse>(new ValidateVersionResponse(), request.Container.Token, new TransportResponseConfig() { ErrorCode = ErrorCode.GeneralError, ErrorMessage = ex.Message }); + Transporter.SendResponse<ValidateVersionResponse>(new ValidateVersionResponse(), request.Container.Token, null, ErrorCode.GeneralError, ex.Message); } }); } @@ -1536,235 +1328,12 @@ namespace Tango.Emulations.Emulators VersionPackageDescriptor package = VersionPackageDescriptor.Parser.ParseFrom(fs); } - for (int i = 0; i < 100; i++) - { - Transporter.SendResponse<ActivateVersionResponse>(new ActivateVersionResponse() - { - Progress = i + 1, - Total = 100 - }, request.Container.Token); - - Thread.Sleep(10); - } - - Transporter.SendResponse<ActivateVersionResponse>(new ActivateVersionResponse() - { - Progress = 100, - Total = 100 - }, request.Container.Token, new TransportResponseConfig() { Completed = true }); + Transporter.SendResponse<ActivateVersionResponse>(new ActivateVersionResponse(), request.Container.Token); } catch (Exception ex) { - Transporter.SendResponse<ActivateVersionResponse>(new ActivateVersionResponse(), request.Container.Token, new TransportResponseConfig() { ErrorCode = ErrorCode.GeneralError, ErrorMessage = ex.Message }); - } - }); - } - - private void HandleStartPowerDownRequest(TangoMessage<StartPowerDownRequest> request) - { - _abortPowerDown = false; - - Task.Factory.StartNew(async () => - { - MachineStatus.State = MachineState.PowerOff; - - for (int i = 0; i < 100; i++) - { - if (_abortPowerDown) return; - - await Task.Delay(200); - await Transporter.SendResponse<StartPowerDownResponse>(new StartPowerDownResponse() - { - ProgressPercentage = i++, - Message = $"Powering down {i}%..." - }, request.Container.Token); + Transporter.SendResponse<ActivateVersionResponse>(new ActivateVersionResponse(), request.Container.Token, null, ErrorCode.GeneralError, ex.Message); } - - await Task.Delay(500); - - await Transporter.SendResponse<StartPowerDownResponse>(new StartPowerDownResponse() - { - ProgressPercentage = 100, - Message = "Machine is turned off", - State = PowerDownState.PowerOffCompleted - }, request.Container.Token, new TransportResponseConfig() { Completed = true }); - }); - } - - private async void HandleAbortPowerDownRequest(TangoMessage<AbortPowerDownRequest> request) - { - _abortPowerDown = true; - await Task.Delay(1000); - await Transporter.SendResponse<AbortPowerDownResponse>(new AbortPowerDownResponse(), request.Container.Token); - } - - private async void HandleStartThreadLoadingRequest(TangoMessage<StartThreadLoadingRequest> request) - { - _isThreadLoadingStarted = true; - _threadLoadingToken = request.Container.Token; - await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse(), request.Container.Token); - } - - private async void HandleTryThreadLoadingRequest(TangoMessage<TryThreadLoadingRequest> request) - { - await Transporter.SendResponse<TryThreadLoadingResponse>(new TryThreadLoadingResponse(), request.Container.Token); - StartThreadLoading(); - } - - private async void HandleContinueThreadLoadingRequest(TangoMessage<ContinueThreadLoadingRequest> request) - { - if (_threadLoadingToken != null) - { - await Transporter.SendResponse<ContinueThreadLoadingResponse>(new ContinueThreadLoadingResponse(), request.Container.Token); - - await Task.Delay(1000); - await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.Finalizing }, _threadLoadingToken); - await Task.Delay(8000); - - //if (_rnd.Next(0, 100) > 50) - //{ - await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.Completed }, _threadLoadingToken); - //} - //else - //{ - // await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.FinalizationError, ErrorReason = "Emulator random error." }, _threadLoadingToken); - //} - } - else - { - await Transporter.SendResponse<ContinueThreadLoadingResponse>(new ContinueThreadLoadingResponse(), request.Container.Token, new TransportResponseConfig() { ErrorCode = ErrorCode.GeneralError, ErrorMessage = "StartThreadLoadingRequest was never sent." }); - } - } - - private async void HandleStartHeadCleaningRequest(TangoMessage<StartHeadCleaningRequest> request) - { - _abortHeadCleaning = false; - - for (int i = 0; i < 100; i++) - { - if (_abortHeadCleaning) - { - await Transporter.SendResponse<StartHeadCleaningResponse>(new StartHeadCleaningResponse() - { - - }, request.Container.Token, new TransportResponseConfig() - { - Completed = true, - ErrorCode = ErrorCode.ContinuousResponseAborted - }); - - return; - } - - await Task.Delay(200); - await Transporter.SendResponse<StartHeadCleaningResponse>(new StartHeadCleaningResponse() - { - Progress = i++, - Total = 100, - Status = $"Performing head cleaning..." - }, request.Container.Token); - } - - await Task.Delay(500); - - await Transporter.SendResponse<StartHeadCleaningResponse>(new StartHeadCleaningResponse() - { - Progress = 100, - Total = 100, - Status = "Completed", - }, request.Container.Token, new TransportResponseConfig() { Completed = true }); - } - - private async void HandleAbortHeadCleaningRequest(TangoMessage<AbortHeadCleaningRequest> request) - { - if (_rnd.Next(0, 100) > 60) - { - _abortHeadCleaning = true; - await Task.Delay(1000); - await Transporter.SendResponse<AbortHeadCleaningResponse>(new AbortHeadCleaningResponse(), request.Container.Token); - } - } - - private async void HandleStartPowerUpRequest(TangoMessage<StartPowerUpRequest> request) - { - await Transporter.SendResponse(new StartPowerUpResponse() { Message = "Power up started...", ProgressPercentage = 10, State = PowerUpState.BuiltInTest }, request.Container.Token); - Thread.Sleep(1000); - - await Transporter.SendResponse(new StartPowerUpResponse() { Message = "Testing dispensers...", ProgressPercentage = 20, State = PowerUpState.DispenserPressureBuildupTest }, request.Container.Token); - Thread.Sleep(1000); - - await Transporter.SendResponse(new StartPowerUpResponse() { Message = "Heating started...", ProgressPercentage = 30, State = PowerUpState.HeatingStarted }, request.Container.Token); - Thread.Sleep(1000); - - await Transporter.SendResponse(new StartPowerUpResponse() { Message = "Heating started...", ProgressPercentage = 40, State = PowerUpState.HwConfig }, request.Container.Token); - Thread.Sleep(1000); - - await Transporter.SendResponse(new StartPowerUpResponse() { Message = "Hardware configuration...", ProgressPercentage = 50, State = PowerUpState.HwConfig }, request.Container.Token); - Thread.Sleep(1000); - - await Transporter.SendResponse(new StartPowerUpResponse() { Message = "Initializing blower...", ProgressPercentage = 60, State = PowerUpState.InitialBlowerActivation }, request.Container.Token); - Thread.Sleep(1000); - - await Transporter.SendResponse(new StartPowerUpResponse() { Message = "Thread detection...", ProgressPercentage = 70, State = PowerUpState.ThreadDetection }, request.Container.Token); - Thread.Sleep(1000); - - await Transporter.SendResponse(new StartPowerUpResponse() { Message = "Waiting for cooler...", ProgressPercentage = 80, State = PowerUpState.WaitForCooler }, request.Container.Token); - Thread.Sleep(4000); - - await Transporter.SendResponse(new StartPowerUpResponse() { Message = "Ready to dye...", ProgressPercentage = 90, State = PowerUpState.MachineReadyToDye }, request.Container.Token, new TransportResponseConfig() - { - Completed = true - }); - } - - private void HandleStartInkFillingStatusRequest(TangoMessage<StartInkFillingStatusRequest> request) - { - Task.Factory.StartNew(() => - { - while (IsStarted) - { - if (!_emulateCorruption) - { - Transporter.SendResponse(new StartInkFillingStatusResponse() - { - Status = InkFillingStatus - }, request.Container.Token); - } - - Thread.Sleep(2000); - } - }); - } - - private async void HandleStandByRequest(TangoMessage<StandByRequest> request) - { - await Task.Delay(1500); - MachineStatus.State = MachineState.Sleep; - await Transporter.SendResponse(new StandByResponse(), request.Container.Token); - } - - private async void HandleAttemptThreadJoggingRequest(TangoMessage<AttemptThreadJoggingRequest> request) - { - await Task.Delay(3000); - - if (_rnd.Next(0, 100) > 50) - { - await Transporter.SendResponse(new AttemptThreadJoggingResponse(), request.Container.Token); - } - else - { - await Transporter.SendResponse(new AttemptThreadJoggingResponse(), request.Container.Token, new TransportResponseConfig() { ErrorCode = ErrorCode.GeneralError }); - } - } - - private async void HandleDataStoreItemModifiedRequest(TangoMessage<DataStoreItemModifiedRequest> request) - { - await Transporter.SendResponse<DataStoreItemModifiedResponse>(new DataStoreItemModifiedResponse(), request.Container.Token); - - GetDataStoreItem(new GetDataStoreItemRequest() - { - Collection = request.Message.Collection, - Key = request.Message.Key }); } @@ -1778,419 +1347,11 @@ namespace Tango.Emulations.Emulators { Action = CartridgeAction.Inserted, - }, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(10) }); + }, TimeSpan.FromSeconds(10)); return response.Message.Index; } - public async void StartThreadLoading() - { - await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.Preparing }, _threadLoadingToken); - await Task.Delay(8000); - - if (_rnd.Next(0, 100) > 50) - { - await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.PreparationError, ErrorReason = "Emulator preparation random error." }, _threadLoadingToken); - } - else - { - await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.ReadyForLoading }, _threadLoadingToken); - } - } - - public async void FinalizeThreadLoading() - { - await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.Finalizing }, _threadLoadingToken); - await Task.Delay(3000); - - if (_rnd.Next(0, 100) > 50) - { - await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.Completed }, _threadLoadingToken); - } - else - { - await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.FinalizationError, ErrorReason = "Emulator finalization random error." }, _threadLoadingToken); - } - } - - public void AbortJob() - { - _cancelJob = true; - } - - public async void SetThreadLoadingState(ThreadLoadingState state) - { - await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = state, Message = $"{state.ToString()}", ErrorReason = "Fake emulator error" }, _threadLoadingToken); - } - - public async void PerformDataStoreTest() - { - LogManager.Log("Starting data store test..."); - - { - try - { - LogManager.Log("Testing Int32..."); - - var response = await Transporter.SendRequest<PutDataStoreItemRequest, PutDataStoreItemResponse>(new PutDataStoreItemRequest() - { - Collection = "TEST", - Key = "int", - Item = new PMR.DataStore.DataStoreItem() - { - DataType = DataType.Int32, - Int32Value = 100 - } - }); - - if (response.Container.Error != ErrorCode.None) - { - LogManager.Log("Put Failed."); - LogManager.Log(response.ToJsonString()); - } - else - { - var res = await Transporter.SendRequest<GetDataStoreItemRequest, GetDataStoreItemResponse>(new GetDataStoreItemRequest() - { - Collection = "TEST", - Key = "int" - }); - - LogManager.Log(res.Container.Error != ErrorCode.None ? "Get Failed." : "Passed."); - - LogManager.Log(res.ToJsonString()); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Failed."); - } - } - - { - try - { - LogManager.Log("Testing float..."); - - var response = await Transporter.SendRequest<PutDataStoreItemRequest, PutDataStoreItemResponse>(new PutDataStoreItemRequest() - { - Collection = "TEST", - Key = "float", - Item = new PMR.DataStore.DataStoreItem() - { - DataType = DataType.Float, - FloatValue = 101f - } - }); - - if (response.Container.Error != ErrorCode.None) - { - LogManager.Log("Put Failed."); - LogManager.Log(response.ToJsonString()); - } - else - { - var res = await Transporter.SendRequest<GetDataStoreItemRequest, GetDataStoreItemResponse>(new GetDataStoreItemRequest() - { - Collection = "TEST", - Key = "float" - }); - - LogManager.Log(res.Container.Error != ErrorCode.None ? "Get Failed." : "Passed."); - - LogManager.Log(res.ToJsonString()); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Failed."); - } - } - - { - try - { - LogManager.Log("Testing double..."); - - var response = await Transporter.SendRequest<PutDataStoreItemRequest, PutDataStoreItemResponse>(new PutDataStoreItemRequest() - { - Collection = "TEST", - Key = "double", - Item = new PMR.DataStore.DataStoreItem() - { - DataType = DataType.Double, - DoubleValue = 102d - } - }); - - if (response.Container.Error != ErrorCode.None) - { - LogManager.Log("Put Failed."); - LogManager.Log(response.ToJsonString()); - } - else - { - var res = await Transporter.SendRequest<GetDataStoreItemRequest, GetDataStoreItemResponse>(new GetDataStoreItemRequest() - { - Collection = "TEST", - Key = "double" - }); - - LogManager.Log(res.Container.Error != ErrorCode.None ? "Get Failed." : "Passed."); - - LogManager.Log(res.ToJsonString()); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Failed."); - } - } - - { - try - { - LogManager.Log("Testing boolean..."); - - var response = await Transporter.SendRequest<PutDataStoreItemRequest, PutDataStoreItemResponse>(new PutDataStoreItemRequest() - { - Collection = "TEST", - Key = "bool", - Item = new PMR.DataStore.DataStoreItem() - { - DataType = DataType.Boolean, - BooleanValue = true - } - }); - - if (response.Container.Error != ErrorCode.None) - { - LogManager.Log("Put Failed."); - LogManager.Log(response.ToJsonString()); - } - else - { - var res = await Transporter.SendRequest<GetDataStoreItemRequest, GetDataStoreItemResponse>(new GetDataStoreItemRequest() - { - Collection = "TEST", - Key = "bool" - }); - - LogManager.Log(res.Container.Error != ErrorCode.None ? "Get Failed." : "Passed."); - - LogManager.Log(res.ToJsonString()); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Failed."); - } - } - - { - try - { - LogManager.Log("Testing string..."); - - var response = await Transporter.SendRequest<PutDataStoreItemRequest, PutDataStoreItemResponse>(new PutDataStoreItemRequest() - { - Collection = "TEST", - Key = "string", - Item = new PMR.DataStore.DataStoreItem() - { - DataType = DataType.String, - StringValue = "String Value" - } - }); - - if (response.Container.Error != ErrorCode.None) - { - LogManager.Log("Put Failed."); - LogManager.Log(response.ToJsonString()); - } - else - { - var res = await Transporter.SendRequest<GetDataStoreItemRequest, GetDataStoreItemResponse>(new GetDataStoreItemRequest() - { - Collection = "TEST", - Key = "string" - }); - - LogManager.Log(res.Container.Error != ErrorCode.None ? "Get Failed." : "Passed."); - - LogManager.Log(res.ToJsonString()); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Failed."); - } - } - - { - try - { - LogManager.Log("Testing bytes..."); - - var response = await Transporter.SendRequest<PutDataStoreItemRequest, PutDataStoreItemResponse>(new PutDataStoreItemRequest() - { - Collection = "TEST", - Key = "bytes", - Item = new PMR.DataStore.DataStoreItem() - { - DataType = DataType.Bytes, - BytesValue = ByteString.CopyFromUtf8("Bytes TEST TEST TEST"), - } - }); - - if (response.Container.Error != ErrorCode.None) - { - LogManager.Log("Put Failed."); - LogManager.Log(response.ToJsonString()); - } - else - { - var res = await Transporter.SendRequest<GetDataStoreItemRequest, GetDataStoreItemResponse>(new GetDataStoreItemRequest() - { - Collection = "TEST", - Key = "bytes" - }); - - LogManager.Log(res.Container.Error != ErrorCode.None ? "Get Failed." : "Passed."); - - LogManager.Log(res.Message.Item.BytesValue.ToStringUtf8()); - LogManager.Log(res.ToJsonString()); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Failed."); - } - } - - { - try - { - LogManager.Log("Testing proto..."); - - var response = await Transporter.SendRequest<PutDataStoreItemRequest, PutDataStoreItemResponse>(new PutDataStoreItemRequest() - { - Collection = "TEST", - Key = "proto", - Item = new PMR.DataStore.DataStoreItem() - { - DataType = DataType.Proto, - BytesValue = new CalculateRequest() { A = 10, B = 15 }.ToByteString(), - ProtoType = MessageType.CalculateRequest, - } - }); - - if (response.Container.Error != ErrorCode.None) - { - LogManager.Log("Put Failed."); - LogManager.Log(response.ToJsonString()); - } - else - { - var res = await Transporter.SendRequest<GetDataStoreItemRequest, GetDataStoreItemResponse>(new GetDataStoreItemRequest() - { - Collection = "TEST", - Key = "proto" - }); - - LogManager.Log(res.Container.Error != ErrorCode.None ? "Get Failed." : "Passed."); - - LogManager.Log(CalculateRequest.Parser.ParseFrom(res.Message.Item.BytesValue).ToJsonString()); - LogManager.Log(res.ToJsonString()); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Failed."); - } - } - - { - try - { - LogManager.Log("Testing int default..."); - - var res = await Transporter.SendRequest<GetDataStoreItemRequest, GetDataStoreItemResponse>(new GetDataStoreItemRequest() - { - Collection = "TEST", - Key = "intDefault", - DefaultItem = new PMR.DataStore.DataStoreItem() - { - DataType = DataType.Int32, - Int32Value = 10, - }, - }); - - LogManager.Log(res.Container.Error != ErrorCode.None ? "Get Failed." : "Passed."); - LogManager.Log(res.ToJsonString()); - } - catch (Exception ex) - { - LogManager.Log(ex, "Failed."); - } - } - - { - try - { - LogManager.Log("Testing proto default..."); - - var res = await Transporter.SendRequest<GetDataStoreItemRequest, GetDataStoreItemResponse>(new GetDataStoreItemRequest() - { - Collection = "TEST", - Key = "protoDefault", - DefaultItem = new PMR.DataStore.DataStoreItem() - { - DataType = DataType.Proto, - BytesValue = (new CalculateRequest() { A = 10, B = 15 }).ToByteString(), - ProtoType = MessageType.CalculateRequest, - }, - }); - - LogManager.Log(res.Container.Error != ErrorCode.None ? "Get Failed." : "Passed."); - - LogManager.Log(CalculateRequest.Parser.ParseFrom(res.Message.Item.BytesValue).ToJsonString()); - LogManager.Log(res.ToJsonString()); - } - catch (Exception ex) - { - LogManager.Log(ex, "Failed."); - } - } - } - - public async void PutDataStoreItem(PutDataStoreItemRequest request) - { - LogManager.Log($"Sending PutDataStoreItemRequest:\n{request.ToJsonString()}"); - try - { - var response = await Transporter.SendRequest<PutDataStoreItemRequest, PutDataStoreItemResponse>(request); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error putting data store item."); - } - } - - public async void GetDataStoreItem(GetDataStoreItemRequest request) - { - LogManager.Log($"Sending GetDataStoreItemRequest:\n{request.ToJsonString()}"); - try - { - var response = await Transporter.SendRequest<GetDataStoreItemRequest, GetDataStoreItemResponse>(request); - LogManager.Log($"Received GetDataStoreItemResponse:\n{response.Message.ToJsonString()}"); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error getting data store item."); - } - } - #endregion } } diff --git a/Software/Visual_Studio/Tango.Emulations/Emulators/MobileEmulator.cs b/Software/Visual_Studio/Tango.Emulations/Emulators/MobileEmulator.cs index 086d256f2..5e645928f 100644 --- a/Software/Visual_Studio/Tango.Emulations/Emulators/MobileEmulator.cs +++ b/Software/Visual_Studio/Tango.Emulations/Emulators/MobileEmulator.cs @@ -41,10 +41,8 @@ namespace Tango.Emulations.Emulators /// </summary> /// <param name="sender">The sender.</param> /// <param name="container">The container.</param> - protected override void OnTransporterRequestReceived(object sender, RequestReceivedEventArgs e) + protected override void OnTransporterRequestReceived(object sender, MessageContainer container) { - var container = e.Container; - switch (container.Type) { case MessageType.CalculateRequest: diff --git a/Software/Visual_Studio/Tango.Emulations/ExternalBridge/EmulatorExternalBridge.cs b/Software/Visual_Studio/Tango.Emulations/ExternalBridge/EmulatorExternalBridge.cs index d8c988436..da428b6f7 100644 --- a/Software/Visual_Studio/Tango.Emulations/ExternalBridge/EmulatorExternalBridge.cs +++ b/Software/Visual_Studio/Tango.Emulations/ExternalBridge/EmulatorExternalBridge.cs @@ -39,12 +39,9 @@ namespace Tango.Emulations.ExternalBridge /// </summary> public EmulatorExternalBridge() { - ComponentName = $"External Bridge Emulator Client {_component_counter++}"; - EnableDiagnostics = true; EnableEmbeddedDebugging = true; EnableEventsNotification = true; - EnableAutomaticThreadLoading = true; String address = new string(Guid.NewGuid().ToString().Replace("-", "").TakeLast(4).ToArray()); @@ -85,7 +82,5 @@ namespace Tango.Emulations.ExternalBridge { Machine = machine; } - - public bool CompressionEnabled { get; set; } } } diff --git a/Software/Visual_Studio/Tango.Emulations/Tango.Emulations.csproj b/Software/Visual_Studio/Tango.Emulations/Tango.Emulations.csproj index 022188335..e01f0be8d 100644 --- a/Software/Visual_Studio/Tango.Emulations/Tango.Emulations.csproj +++ b/Software/Visual_Studio/Tango.Emulations/Tango.Emulations.csproj @@ -90,7 +90,7 @@ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <ProjectExtensions> <VisualStudio> - <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" /> + <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" /> </VisualStudio> </ProjectExtensions> </Project>
\ No newline at end of file |
