Skip to content

Commit efda4ef

Browse files
committed
Implement IUIManager for enhanced UI management
Added the `IUIManager` interface and its implementation in `UIManager.cs` to manage UI operations through events. Introduced new event classes in `UIEvents.cs` and `SystemEvents.cs` for better communication between application components. Updated `Program.cs` for `IUIManager` initialization and modified `Form1.cs` to utilize the new UI manager for displaying messages and notifications. Enhanced event handling and added methods for user input requests in `UIManager.cs`. Refactored existing methods for consistent UI management and improved logging and error handling throughout the application.
1 parent 4c047a6 commit efda4ef

File tree

7 files changed

+1607
-434
lines changed

7 files changed

+1607
-434
lines changed

Program.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ private static void InitializeManagers(IServiceProvider serviceProvider, ILogger
8080
var inventoryManager = serviceProvider.GetRequiredService<IInventoryManager>();
8181
var locationManager = serviceProvider.GetRequiredService<ILocationManager>();
8282
var skillManager = serviceProvider.GetRequiredService<ISkillManager>();
83+
var uiManager = serviceProvider.GetRequiredService<IUIManager>();
8384

8485
// Initialize all managers
8586
if (playerManager is IBaseManager playerBaseManager)
@@ -100,11 +101,14 @@ private static void InitializeManagers(IServiceProvider serviceProvider, ILogger
100101
if (skillManager is IBaseManager skillBaseManager)
101102
skillBaseManager.Initialize();
102103

103-
logger.LogInformation("All game managers initialized successfully");
104+
if (uiManager is IBaseManager uiBaseManager)
105+
uiBaseManager.Initialize();
106+
107+
logger.LogInformation("All managers initialized successfully");
104108
}
105109
catch (Exception ex)
106110
{
107-
logger.LogError(ex, "Error initializing game managers");
111+
logger.LogCritical(ex, "Failed to initialize managers");
108112
throw;
109113
}
110114
}

src/Events/SystemEvents.cs

Lines changed: 315 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,315 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace WinFormsApp1.Events
5+
{
6+
/// <summary>
7+
/// Event for requesting data synchronization between managers
8+
/// </summary>
9+
public class DataSyncRequestEvent : GameEvent
10+
{
11+
public string SourceManager { get; set; }
12+
public string TargetManager { get; set; }
13+
public string DataType { get; set; }
14+
public object Data { get; set; }
15+
public string SyncId { get; set; }
16+
17+
public override int Priority => 12;
18+
19+
public DataSyncRequestEvent(string sourceManager, string targetManager, string dataType, object data, string syncId = null)
20+
{
21+
SourceManager = sourceManager;
22+
TargetManager = targetManager;
23+
DataType = dataType;
24+
Data = data;
25+
SyncId = syncId ?? Guid.NewGuid().ToString();
26+
Source = sourceManager;
27+
}
28+
}
29+
30+
/// <summary>
31+
/// Event for responding to data synchronization requests
32+
/// </summary>
33+
public class DataSyncResponseEvent : GameEvent
34+
{
35+
public string SyncId { get; set; }
36+
public bool Success { get; set; }
37+
public string ErrorMessage { get; set; }
38+
public object ResponseData { get; set; }
39+
40+
public DataSyncResponseEvent(string syncId, bool success, string errorMessage = "", object responseData = null)
41+
{
42+
SyncId = syncId;
43+
Success = success;
44+
ErrorMessage = errorMessage;
45+
ResponseData = responseData;
46+
Source = "SystemManager";
47+
}
48+
}
49+
50+
/// <summary>
51+
/// Event for manager state changes
52+
/// </summary>
53+
public class ManagerStateChangedEvent : GameEvent
54+
{
55+
public string ManagerName { get; set; }
56+
public ManagerState OldState { get; set; }
57+
public ManagerState NewState { get; set; }
58+
public string Reason { get; set; }
59+
public Dictionary<string, object> StateData { get; set; }
60+
61+
public override int Priority => 11;
62+
63+
public ManagerStateChangedEvent(string managerName, ManagerState oldState, ManagerState newState, string reason = "", Dictionary<string, object> stateData = null)
64+
{
65+
ManagerName = managerName;
66+
OldState = oldState;
67+
NewState = newState;
68+
Reason = reason;
69+
StateData = stateData ?? new Dictionary<string, object>();
70+
Source = managerName;
71+
}
72+
}
73+
74+
/// <summary>
75+
/// Manager states
76+
/// </summary>
77+
public enum ManagerState
78+
{
79+
Uninitialized,
80+
Initializing,
81+
Ready,
82+
Busy,
83+
Error,
84+
Shutting_Down,
85+
Shutdown
86+
}
87+
88+
/// <summary>
89+
/// Event for system-wide operations
90+
/// </summary>
91+
public class SystemOperationEvent : GameEvent
92+
{
93+
public SystemOperation Operation { get; set; }
94+
public Dictionary<string, object> Parameters { get; set; }
95+
public string OperationId { get; set; }
96+
public List<string> TargetManagers { get; set; }
97+
98+
public override int Priority => 13;
99+
100+
public SystemOperationEvent(SystemOperation operation, Dictionary<string, object> parameters = null, List<string> targetManagers = null, string operationId = null)
101+
{
102+
Operation = operation;
103+
Parameters = parameters ?? new Dictionary<string, object>();
104+
TargetManagers = targetManagers ?? new List<string>();
105+
OperationId = operationId ?? Guid.NewGuid().ToString();
106+
Source = "SystemManager";
107+
}
108+
}
109+
110+
/// <summary>
111+
/// System operations
112+
/// </summary>
113+
public enum SystemOperation
114+
{
115+
Initialize,
116+
Shutdown,
117+
Reset,
118+
Backup,
119+
Restore,
120+
Validate,
121+
Synchronize,
122+
Maintenance,
123+
Performance_Check,
124+
Memory_Cleanup
125+
}
126+
127+
/// <summary>
128+
/// Event for system operation responses
129+
/// </summary>
130+
public class SystemOperationResponseEvent : GameEvent
131+
{
132+
public string OperationId { get; set; }
133+
public string RespondingManager { get; set; }
134+
public bool Success { get; set; }
135+
public string Message { get; set; }
136+
public Dictionary<string, object> Results { get; set; }
137+
public TimeSpan ExecutionTime { get; set; }
138+
139+
public SystemOperationResponseEvent(string operationId, string respondingManager, bool success, string message = "", Dictionary<string, object> results = null, TimeSpan executionTime = default)
140+
{
141+
OperationId = operationId;
142+
RespondingManager = respondingManager;
143+
Success = success;
144+
Message = message;
145+
Results = results ?? new Dictionary<string, object>();
146+
ExecutionTime = executionTime;
147+
Source = respondingManager;
148+
}
149+
}
150+
151+
/// <summary>
152+
/// Event for performance metrics
153+
/// </summary>
154+
public class PerformanceMetricEvent : GameEvent
155+
{
156+
public string MetricName { get; set; }
157+
public double Value { get; set; }
158+
public string Unit { get; set; }
159+
public DateTime Timestamp { get; set; }
160+
public string Category { get; set; }
161+
public Dictionary<string, object> Metadata { get; set; }
162+
163+
public PerformanceMetricEvent(string metricName, double value, string unit = "", string category = "General", Dictionary<string, object> metadata = null)
164+
{
165+
MetricName = metricName;
166+
Value = value;
167+
Unit = unit;
168+
Category = category;
169+
Timestamp = DateTime.UtcNow;
170+
Metadata = metadata ?? new Dictionary<string, object>();
171+
Source = "PerformanceMonitor";
172+
}
173+
}
174+
175+
/// <summary>
176+
/// Event for error reporting across the system
177+
/// </summary>
178+
public class SystemErrorEvent : GameEvent
179+
{
180+
public string ErrorCode { get; set; }
181+
public string ErrorMessage { get; set; }
182+
public Exception Exception { get; set; }
183+
public ErrorSeverity Severity { get; set; }
184+
public string Component { get; set; }
185+
public Dictionary<string, object> Context { get; set; }
186+
public bool IsRecoverable { get; set; }
187+
188+
public override int Priority => 14; // High priority for errors
189+
190+
public SystemErrorEvent(string errorCode, string errorMessage, Exception exception = null, ErrorSeverity severity = ErrorSeverity.Error, string component = "", Dictionary<string, object> context = null, bool isRecoverable = true)
191+
{
192+
ErrorCode = errorCode;
193+
ErrorMessage = errorMessage;
194+
Exception = exception;
195+
Severity = severity;
196+
Component = component;
197+
Context = context ?? new Dictionary<string, object>();
198+
IsRecoverable = isRecoverable;
199+
Source = component;
200+
}
201+
}
202+
203+
/// <summary>
204+
/// Error severity levels
205+
/// </summary>
206+
public enum ErrorSeverity
207+
{
208+
Info,
209+
Warning,
210+
Error,
211+
Critical,
212+
Fatal
213+
}
214+
215+
/// <summary>
216+
/// Event for resource management
217+
/// </summary>
218+
public class ResourceEvent : GameEvent
219+
{
220+
public ResourceOperation Operation { get; set; }
221+
public string ResourceType { get; set; }
222+
public string ResourceId { get; set; }
223+
public object ResourceData { get; set; }
224+
public long ResourceSize { get; set; }
225+
public string RequestingManager { get; set; }
226+
227+
public ResourceEvent(ResourceOperation operation, string resourceType, string resourceId, object resourceData = null, long resourceSize = 0, string requestingManager = "")
228+
{
229+
Operation = operation;
230+
ResourceType = resourceType;
231+
ResourceId = resourceId;
232+
ResourceData = resourceData;
233+
ResourceSize = resourceSize;
234+
RequestingManager = requestingManager;
235+
Source = "ResourceManager";
236+
}
237+
}
238+
239+
/// <summary>
240+
/// Resource operations
241+
/// </summary>
242+
public enum ResourceOperation
243+
{
244+
Allocate,
245+
Deallocate,
246+
Load,
247+
Unload,
248+
Cache,
249+
Evict,
250+
Validate,
251+
Cleanup
252+
}
253+
254+
/// <summary>
255+
/// Event for configuration changes
256+
/// </summary>
257+
public class ConfigurationChangedEvent : GameEvent
258+
{
259+
public string ConfigurationKey { get; set; }
260+
public object OldValue { get; set; }
261+
public object NewValue { get; set; }
262+
public string Category { get; set; }
263+
public bool RequiresRestart { get; set; }
264+
public List<string> AffectedManagers { get; set; }
265+
266+
public override int Priority => 10;
267+
268+
public ConfigurationChangedEvent(string configurationKey, object oldValue, object newValue, string category = "General", bool requiresRestart = false, List<string> affectedManagers = null)
269+
{
270+
ConfigurationKey = configurationKey;
271+
OldValue = oldValue;
272+
NewValue = newValue;
273+
Category = category;
274+
RequiresRestart = requiresRestart;
275+
AffectedManagers = affectedManagers ?? new List<string>();
276+
Source = "ConfigurationManager";
277+
}
278+
}
279+
280+
/// <summary>
281+
/// Event for audit logging
282+
/// </summary>
283+
public class AuditEvent : GameEvent
284+
{
285+
public string Action { get; set; }
286+
public string Actor { get; set; }
287+
public string Target { get; set; }
288+
public DateTime Timestamp { get; set; }
289+
public Dictionary<string, object> Details { get; set; }
290+
public AuditLevel Level { get; set; }
291+
292+
public AuditEvent(string action, string actor, string target, AuditLevel level = AuditLevel.Info, Dictionary<string, object> details = null)
293+
{
294+
Action = action;
295+
Actor = actor;
296+
Target = target;
297+
Level = level;
298+
Timestamp = DateTime.UtcNow;
299+
Details = details ?? new Dictionary<string, object>();
300+
Source = "AuditManager";
301+
}
302+
}
303+
304+
/// <summary>
305+
/// Audit levels
306+
/// </summary>
307+
public enum AuditLevel
308+
{
309+
Debug,
310+
Info,
311+
Warning,
312+
Security,
313+
Critical
314+
}
315+
}

0 commit comments

Comments
 (0)