# Architecture Overview
**Referenced Files in This Document**
- [README.md](file://README.md)
- [ClassicAssist.Shared/Engine.cs](file://ClassicAssist.Shared/Engine.cs)
- [ClassicAssist.Avalonia/Program.cs](file://ClassicAssist.Avalonia/Program.cs)
- [ClassicAssist.Avalonia/App.axaml.cs](file://ClassicAssist.Avalonia/App.axaml.cs)
- [ClassicAssist.Launcher/MainViewModel.cs](file://ClassicAssist.Launcher/MainViewModel.cs)
- [ClassicAssist.Shared/UO/Network/PacketHandler.cs](file://ClassicAssist.Shared/UO/Network/PacketHandler.cs)
- [ClassicAssist.Shared/UO/Objects/Entity.cs](file://ClassicAssist.Shared/UO/Objects/Entity.cs)
- [ClassicAssist.Shared/Data/Macros/MacroManager.cs](file://ClassicAssist.Shared/Data/Macros/MacroManager.cs)
- [ClassicAssist.Shared/UI/ViewModels/MainWindowViewModel.cs](file://ClassicAssist.Shared/UI/ViewModels/MainWindowViewModel.cs)
- [ClassicAssist.Avalonia/Views/MainWindow.axaml.cs](file://ClassicAssist.Avalonia/Views/MainWindow.axaml.cs)
- [ClassicAssist.Avalonia/AvaloniaDispatcher.cs](file://ClassicAssist.Avalonia/AvaloniaDispatcher.cs)
- [ClassicAssist/WPFDispatcher.cs](file://ClassicAssist/WPFDispatcher.cs)
- [ClassicAssist.Shared/IDispatcher.cs](file://ClassicAssist.Shared/IDispatcher.cs)
## Table of Contents
1. [Introduction](#introduction)
2. [Project Structure](#project-structure)
3. [Core Components](#core-components)
4. [Architecture Overview](#architecture-overview)
5. [Detailed Component Analysis](#detailed-component-analysis)
6. [Dependency Analysis](#dependency-analysis)
7. [Performance Considerations](#performance-considerations)
8. [Troubleshooting Guide](#troubleshooting-guide)
9. [Conclusion](#conclusion)
## Introduction
ClassicAssist.Avalonia is a cross-platform Ultima Online game assistant application built using the Avalonia UI framework. The system follows a layered architecture pattern that separates concerns between the user interface layer, shared business logic, and platform-specific implementations. This design enables code reuse across multiple UI frameworks (WPF and Avalonia) while maintaining clean separation of responsibilities.
The application provides comprehensive game automation features including macro scripting, agent management, filtering systems, and real-time packet processing for Ultima Online gameplay enhancement.
## Project Structure
The ClassicAssist.Avalonia solution follows a modular architecture with clear separation between different functional areas:
```mermaid
graph TB
subgraph "UI Layer"
A[ClassicAssist.Avalonia]
B[ClassicAssist.WPF]
C[ClassicAssist.Launcher]
end
subgraph "Shared Core"
D[ClassicAssist.Shared]
E[ClassicAssist.Tests]
end
subgraph "External Dependencies"
F[UO Game Engine]
G[Plugin System]
end
A --> D
B --> D
C --> D
D --> F
D --> G
```
**Diagram sources**
- [ClassicAssist.Avalonia/Program.cs](file://ClassicAssist.Avalonia/Program.cs)
- [ClassicAssist.Shared/Engine.cs](file://ClassicAssist.Shared/Engine.cs)
- [ClassicAssist.Launcher/MainViewModel.cs](file://ClassicAssist.Launcher/MainViewModel.cs)
The project structure demonstrates a clean separation where:
- **ClassicAssist.Shared**: Contains all business logic, data models, and core functionality
- **ClassicAssist.Avalonia**: Avalonia-specific UI implementation
- **ClassicAssist.WPF**: WPF-specific UI implementation
- **ClassicAssist.Launcher**: Application launcher and configuration management
**Section sources**
- [README.md](file://README.md)
- [ClassicAssist.Avalonia/Program.cs](file://ClassicAssist.Avalonia/Program.cs)
## Core Components
### Shared Library Architecture
The ClassicAssist.Shared library serves as the foundation containing all reusable business logic:
#### Network Processing Pipeline
The network subsystem handles Ultima Online protocol communication through a sophisticated packet processing pipeline:
```mermaid
sequenceDiagram
participant Game as "UO Game Client"
participant Network as "PacketHandler"
participant Filters as "PacketFilters"
participant Handlers as "PacketHandlers"
participant UI as "UI Layer"
Game->>Network : Incoming Packet
Network->>Filters : Apply Filters
Filters-->>Network : Filtered Data
Network->>Handlers : Route to Handler
Handlers->>Handlers : Process Logic
Handlers->>UI : Update State
UI-->>Game : Response Actions
```
**Diagram sources**
- [ClassicAssist.Shared/UO/Network/PacketHandler.cs](file://ClassicAssist.Shared/UO/Network/PacketHandler.cs)
- [ClassicAssist.Shared/UO/Objects/Entity.cs](file://ClassicAssist.Shared/UO/Objects/Entity.cs)
#### Plugin-Based Extensibility Model
The system implements a robust plugin architecture allowing third-party extensions:
```mermaid
classDiagram
class PluginBase {
<>
+string Name
+string Version
+Initialize() void
+Execute(context) object
+Dispose() void
}
class MacroCommand {
+string CommandName
+string Description
+Execute(parameters) object
}
class AgentPlugin {
+AgentType Type
+ConfigureDialog() Window
+ProcessLogic() void
}
class FilterPlugin {
+FilterCriteria Criteria
+ApplyFilter(data) bool
}
PluginBase <|-- MacroCommand
PluginBase <|-- AgentPlugin
PluginBase <|-- FilterPlugin
```
**Diagram sources**
- [ClassicAssist.Shared/Data/Macros/MacroManager.cs](file://ClassicAssist.Shared/Data/Macros/MacroManager.cs)
**Section sources**
- [ClassicAssist.Shared/Engine.cs](file://ClassicAssist.Shared/Engine.cs)
- [ClassicAssist.Shared/UO/Network/PacketHandler.cs](file://ClassicAssist.Shared/UO/Network/PacketHandler.cs)
## Architecture Overview
### High-Level System Architecture
The ClassicAssist.Avalonia system follows a multi-layered architecture pattern:
```mermaid
graph TB
subgraph "Presentation Layer"
A[Avalonia UI]
B[WPF UI]
C[Launcher UI]
end
subgraph "Application Layer"
D[Main Application Controller]
E[Window Management]
F[State Management]
end
subgraph "Business Logic Layer"
G[Shared Business Logic]
H[Game Engine Integration]
I[Plugin Framework]
end
subgraph "Data Layer"
J[Configuration Storage]
K[Game Data Cache]
L[Network Communication]
end
A --> D
B --> D
C --> D
D --> G
D --> H
D --> I
G --> J
H --> K
H --> L
```
**Diagram sources**
- [ClassicAssist.Avalonia/App.axaml.cs](file://ClassicAssist.Avalonia/App.axaml.cs)
- [ClassicAssist.Shared/Engine.cs](file://ClassicAssist.Shared/Engine.cs)
### Cross-Platform UI Abstraction
The system achieves cross-platform compatibility through abstraction layers:
```mermaid
classDiagram
class IDispatcher {
<>
+Invoke(action) void
+BeginInvoke(action) void
+Synchronize(context) void
}
class AvaloniaDispatcher {
+Invoke(action) void
+BeginInvoke(action) void
+Synchronize(context) void
}
class WPFDispatcher {
+Invoke(action) void
+BeginInvoke(action) void
+Synchronize(context) void
}
class IUIInvoker {
<>
+ShowMessageBox(message) void
+OpenFileDialog() string
+SaveFileDialog() string
}
class AvaloniaUIInvoker {
+ShowMessageBox(message) void
+OpenFileDialog() string
+SaveFileDialog() string
}
class WPFUIInvoker {
+ShowMessageBox(message) void
+OpenFileDialog() string
+SaveFileDialog() string
}
IDispatcher <|.. AvaloniaDispatcher
IDispatcher <|.. WPFDispatcher
IUIInvoker <|.. AvaloniaUIInvoker
IUIInvoker <|.. WPFUIInvoker
```
**Diagram sources**
- [ClassicAssist.Shared/IDispatcher.cs](file://ClassicAssist.Shared/IDispatcher.cs)
- [ClassicAssist.Avalonia/AvaloniaDispatcher.cs](file://ClassicAssist.Avalonia/AvaloniaDispatcher.cs)
- [ClassicAssist/WPFDispatcher.cs](file://ClassicAssist/WPFDispatcher.cs)
**Section sources**
- [ClassicAssist.Avalonia/App.axaml.cs](file://ClassicAssist.Avalonia/App.axaml.cs)
- [ClassicAssist.Avalonia/AvaloniaDispatcher.cs](file://ClassicAssist.Avalonia/AvaloniaDispatcher.cs)
## Detailed Component Analysis
### Main Application Flow
The application initialization and main flow follows a structured startup sequence:
```mermaid
sequenceDiagram
participant Program as "Program.Main"
participant App as "Avalonia Application"
participant Engine as "Shared Engine"
participant MainWindow as "Main Window"
participant ViewModel as "Main Window ViewModel"
Program->>App : Initialize Application
App->>Engine : Load Shared Engine
Engine->>Engine : Initialize Plugins
Engine->>Engine : Setup Network
App->>MainWindow : Create Main Window
MainWindow->>ViewModel : Bind ViewModel
ViewModel->>Engine : Request Initial Data
Engine-->>ViewModel : Provide Data
ViewModel-->>MainWindow : Update UI
```
**Diagram sources**
- [ClassicAssist.Avalonia/Program.cs](file://ClassicAssist.Avalonia/Program.cs)
- [ClassicAssist.Avalonia/App.axaml.cs](file://ClassicAssist.Avalonia/App.axaml.cs)
- [ClassicAssist.Shared/Engine.cs](file://ClassicAssist.Shared/Engine.cs)
### Data Flow Architecture
The system implements a unidirectional data flow pattern ensuring predictable state updates:
```mermaid
flowchart TD
A[Network Packet] --> B[Packet Handler]
B --> C{Filter Check}
C --> |Pass| D[Business Logic Processor]
C --> |Blocked| E[Discard]
D --> F[State Manager]
F --> G[ViewModel Update]
G --> H[UI Binding]
H --> I[Visual Update]
J[User Action] --> K[Command Handler]
K --> L[Business Logic]
L --> M[Network Outgoing]
M --> N[Game Server]
```
**Diagram sources**
- [ClassicAssist.Shared/UO/Network/PacketHandler.cs](file://ClassicAssist.Shared/UO/Network/PacketHandler.cs)
- [ClassicAssist.Shared/UI/ViewModels/MainWindowViewModel.cs](file://ClassicAssist.Shared/UI/ViewModels/MainWindowViewModel.cs)
### Plugin System Implementation
The extensible plugin architecture supports multiple extension points:
```mermaid
classDiagram
class PluginManager {
-Dictionary~string,PluginBase~ plugins
+LoadPlugins(path) void
+GetPlugin(name) PluginBase
+ExecutePlugin(name, context) object
+UnloadPlugin(name) void
}
class PluginBase {
<>
#string name
#string version
#string description
+virtual Initialize() void
+virtual Execute(context) object
+virtual Dispose() void
}
class MacroPlugin {
+MacroEntry[] macros
+RegisterCommands() void
+ExecuteMacro(name) void
}
class AgentPlugin {
+IAgent[] agents
+StartAgents() void
+StopAgents() void
}
PluginManager --> PluginBase : manages
PluginBase <|-- MacroPlugin
PluginBase <|-- AgentPlugin
```
**Diagram sources**
- [ClassicAssist.Shared/Data/Macros/MacroManager.cs](file://ClassicAssist.Shared/Data/Macros/MacroManager.cs)
**Section sources**
- [ClassicAssist.Avalonia/Program.cs](file://ClassicAssist.Avalonia/Program.cs)
- [ClassicAssist.Avalonia/Views/MainWindow.axaml.cs](file://ClassicAssist.Avalonia/Views/MainWindow.axaml.cs)
- [ClassicAssist.Shared/UI/ViewModels/MainWindowViewModel.cs](file://ClassicAssist.Shared/UI/ViewModels/MainWindowViewModel.cs)
## Dependency Analysis
### Component Coupling and Cohesion
The system demonstrates high cohesion within modules and loose coupling between components:
```mermaid
graph TB
subgraph "High Cohesion Modules"
A[Network Module]
B[UI Module]
C[Plugin Module]
D[Data Module]
end
subgraph "Low Coupling Interfaces"
E[IDispatcher]
F[IUIInvoker]
G[IPlugin]
H[IConfigProvider]
end
A --> E
B --> F
C --> G
D --> H
```
### External Dependencies Management
The system manages external dependencies through NuGet packages and assembly references:
```mermaid
graph LR
subgraph "Core Dependencies"
A[Avalonia Framework]
B[Newtonsoft.Json]
C[Microsoft.CSharp]
end
subgraph "Game Integration"
D[UO Protocol Parser]
E[Memory Access Libraries]
end
subgraph "UI Extensions"
F[Avalonia.Controls]
G[Avalonia.Themes]
end
A --> F
A --> G
B --> C
D --> E
```
**Diagram sources**
- [ClassicAssist.Avalonia/ClassicAssist.Avalonia.csproj](file://ClassicAssist.Avalonia/ClassicAssist.Avalonia.csproj)
- [ClassicAssist.Shared/ClassicAssist.Shared.csproj](file://ClassicAssist.Shared/ClassicAssist.Shared.csproj)
**Section sources**
- [ClassicAssist.Shared/Engine.cs](file://ClassicAssist.Shared/Engine.cs)
- [ClassicAssist.Avalonia/Program.cs](file://ClassicAssist.Avalonia/Program.cs)
## Performance Considerations
### Memory Management and Optimization
The system implements several performance optimization strategies:
- **Object Pooling**: Reusable objects for frequently created instances
- **Lazy Loading**: Deferred loading of heavy resources
- **Background Processing**: Asynchronous operations for non-blocking UI
- **Event Aggregation**: Efficient event handling patterns
### Threading Model
The application uses a single-threaded UI model with background workers:
```mermaid
stateDiagram-v2
[*] --> Idle
Idle --> Initializing : "Application Start"
Initializing --> Running : "Engine Ready"
Running --> Paused : "Pause Request"
Paused --> Running : "Resume Request"
Running --> Stopping : "Shutdown"
Stopping --> [*] : "Cleanup Complete"
```
## Troubleshooting Guide
### Common Issues and Solutions
#### Network Connectivity Problems
- Verify Ultima Online client connection status
- Check firewall settings for port access
- Validate packet filter configurations
#### UI Rendering Issues
- Ensure proper dispatcher usage for thread safety
- Verify Avalonia theme resource loading
- Check for memory leaks in custom controls
#### Plugin Loading Failures
- Validate plugin assembly signatures
- Check dependency version compatibility
- Review plugin manifest files
**Section sources**
- [ClassicAssist.Shared/Engine.cs](file://ClassicAssist.Shared/Engine.cs)
- [ClassicAssist.Avalonia/App.axaml.cs](file://ClassicAssist.Avalonia/App.axaml.cs)
## Conclusion
ClassicAssist.Avalonia demonstrates a well-architected cross-platform game assistant application that successfully balances code reuse, maintainability, and extensibility. The layered architecture with clear separation of concerns enables efficient development across multiple UI frameworks while providing a robust foundation for plugin-based extensions.
The system's design principles emphasize:
- **Separation of Concerns**: Clear boundaries between UI, business logic, and data layers
- **Cross-Platform Compatibility**: Abstracted interfaces enabling multiple UI implementations
- **Extensibility**: Plugin architecture supporting third-party enhancements
- **Performance**: Optimized data flow and memory management strategies
This architectural approach ensures long-term maintainability while providing a solid foundation for future feature additions and platform support expansion.