--- source_files: - Common/DTS.Common.CPU/Classes/BREngine.cs - Common/DTS.Common.CPU/Classes/CPUEngine.cs generated_at: "2026-04-16T03:28:53.637809+00:00" model: "Qwen/Qwen3-Coder-Next-FP8" schema_version: 1 sha256: "66174fba615f1ce2" --- # Classes ## Documentation: `CPUEngine` Module --- ### 1. **Purpose** The `CPUEngine` class serves as a core infrastructure component responsible for managing cross-cutting concerns in the CPU-related domain of the DTS system—specifically, event-driven UI notifications and status updates via Prism’s interaction patterns and event aggregation. It acts as a bridge between internal system events (e.g., status changes, notifications) and UI-level interaction requests, enabling decoupled communication between backend logic and the presentation layer. It does *not* implement CPU-specific computation logic (as suggested by the empty `BREngine` class), but rather provides a reusable base for UI interaction coordination within the CPU domain. --- ### 2. **Public Interface** #### `CPUEngine()` - **Signature**: `public CPUEngine()` - **Behavior**: Constructor. Initializes Prism dependencies (`IUnityContainer`, `IEventAggregator`, `IServiceLocator`) via the current `ServiceLocator`. Registers handlers for `RaiseNotification` and `ShowStatus` events. Instantiates `NotificationRequest` and `ConfirmationRequest` interaction requests. #### `NotificationRequest` - **Signature**: `public InteractionRequest NotificationRequest { get; private set; }` - **Behavior**: Exposes a Prism `InteractionRequest` for displaying notifications (e.g., informational popups). Triggered internally via `OnRaiseNotification` when a `RaiseNotification` event is published. #### `ConfirmationRequest` - **Signature**: `public new InteractionRequest ConfirmationRequest { get; private set; }` - **Behavior**: Exposes a Prism `InteractionRequest` for confirmation dialogs (e.g., yes/no prompts). *Currently unused*—no code raises this request. #### `OnPropertyChanged(string propertyName)` - **Signature**: `public void OnPropertyChanged(string propertyName)` - **Behavior**: Raises the `PropertyChanged` event for data binding (implements `INotifyPropertyChanged` via `ICPUEngine`). Used to notify UI of property changes. #### `PropertyChanged` - **Signature**: `public new event PropertyChangedEventHandler PropertyChanged;` - **Behavior**: Standard .NET event for property change notifications. Overridden from base interface `ICPUEngine`. --- ### 3. **Invariants** - **Event Subscription Consistency**: Upon construction, `_eventAggregator` *must* successfully resolve `IEventAggregator` and subscribe to `RaiseNotification` and `ShowStatus` events. Failure to do so would break notification/status handling. - **Service Locator Dependency**: The class *requires* that `ServiceLocator.Current` is set and returns a valid `IServiceLocator` containing registered implementations for `IUnityContainer`, `IServiceLocator`, and `IEventAggregator`. If not, constructor throws. - **Notification Payload Transformation**: When handling `RaiseNotification`, the internal `NotificationContentEventArgs` is *always* transformed into a `NotificationContentEventArgs` (note: same name, likely a typo—see *Gotchas*) with `Title` extracted separately. The `Content` of the `Notification` object is *always* a `NotificationContentEventArgs` (without title), and `Title` is taken from the event args. - **No-op Status Handler**: `OnStatusChange` is currently commented out—no status update logic is active. Thus, `IsBusy`, `IsBusyMessage`, and related properties (if any) are *not* updated. --- ### 4. **Dependencies** #### **External Dependencies (Imports/Usings)** - **Prism Libraries**: - `Microsoft.Practices.Prism.Events` (`IEventAggregator`, `RaiseNotification`, `ShowStatus`) - `Microsoft.Practices.Prism.Interactivity.InteractionRequest` (`InteractionRequest`, `Notification`, `Confirmation`) - `Microsoft.Practices.Prism.Regions` (`IRegionManager`) - `Microsoft.Practices.Unity` (`IUnityContainer`) - `Microsoft.Practices.ServiceLocation` (`IServiceLocator`) - **DTS Internal Libraries**: - `DTS.Common.Events` (`RaiseNotification`, `ShowStatus`, `StatusInfo`, `NotificationContentEventArgs`) - `DTS.Common.Interface` (`ICPUEngine`) - `DTS.Common.Base` (likely contains base types like `NotificationContentEventArgs`) #### **Internal Dependencies** - **Consumers**: Any module needing to trigger notifications or status updates can publish `RaiseNotification` or `ShowStatus` events via `_eventAggregator`. - **Consumed By**: UI layers (e.g., views/view models) that bind to `NotificationRequest`/`ConfirmationRequest` for modal dialogs. #### **Required Services in Container** - `IUnityContainer` - `IServiceLocator` - `IEventAggregator` - `IRegionManager` (declared but unused in current implementation) --- ### 5. **Gotchas** - **`new` Keyword on `IRegionManager`**: `_regionManager` is declared as `private new IRegionManager _regionManager;` but is *never assigned or used*. This suggests incomplete refactoring or legacy code. - **`NotificationContentEventArgs` Ambiguity**: - In `OnRaiseNotification`, a new `NotificationContentEventArgs` is constructed from `eventArgsWithTitle.Message`, `MessageDetails`, and `Image`. - However, the source does not define whether `NotificationContentEventArgs` has a constructor accepting these parameters—nor is there a `NotificationContentEventArgsWithoutTitle` type (mentioned in the comment) referenced elsewhere. This implies either: - A missing type definition, - Or a naming collision (same class name used for two purposes), - Or a typo (e.g., `NotificationContentEventArgsWithoutTitle` should be `NotificationContentEventArgs`). - **Critical risk**: If `NotificationContentEventArgs` lacks the expected constructor, runtime exceptions occur. - **`ShowStatus` Handler is Dead Code**: `OnStatusChange` is fully commented out. If status tracking is expected, this is a functional gap. - **No `ConfirmationRequest` Usage**: `ConfirmationRequest` is instantiated but never raised—either unused or intended for future implementation. - **`ICPUEngine` Contract Unknown**: Since `ICPUEngine` is not provided, we cannot verify if `OnPropertyChanged` and `PropertyChanged` are correctly implemented per interface expectations (e.g., `new` keyword usage may conflict with interface implementation). - **No Null Checks**: `ServiceLocator.Current` and `_unityContainer.Resolve()` calls lack null/error handling—could throw if services are missing. > **Note**: No CPU-specific logic (e.g., instruction execution, register management) is present. The class name `CPUEngine` is likely a domain label, not a functional description.