using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using YY.Admin.Core; using static YY.Admin.Core.SysUserEvents; using Prism.Events; namespace YY.Admin.EventBus { public class SysUserEventSubscriber : IDisposable { private readonly IEventAggregator _eventAggregator; private readonly ILoggerService _logger; private readonly List _subscriptions = new(); public SysUserEventSubscriber( IEventAggregator eventAggregator, ILoggerService logger) { _eventAggregator = eventAggregator; _logger = logger; SubscribeEvents(); } public void SubscribeEvents() { _eventAggregator.GetEvent().Subscribe(OnAddUser, ThreadOption.BackgroundThread); _eventAggregator.GetEvent().Subscribe(OnUpdateUser, ThreadOption.BackgroundThread); _eventAggregator.GetEvent().Subscribe(OnDeleteUser, ThreadOption.BackgroundThread); _eventAggregator.GetEvent().Subscribe(OnSetUserStatus, ThreadOption.BackgroundThread); _eventAggregator.GetEvent().Subscribe(OnChangePwd, ThreadOption.BackgroundThread); _eventAggregator.GetEvent().Subscribe(OnResetPwd, ThreadOption.BackgroundThread); _eventAggregator.GetEvent().Subscribe(OnUnlockUserLogin, ThreadOption.BackgroundThread); _eventAggregator.GetEvent().Subscribe(OnRegisterUser, ThreadOption.BackgroundThread); _eventAggregator.GetEvent().Subscribe(OnLoginUser, ThreadOption.BackgroundThread); _eventAggregator.GetEvent().Subscribe(OnLoginOut, ThreadOption.BackgroundThread); _eventAggregator.GetEvent().Subscribe(OnUpdateUserRole, ThreadOption.BackgroundThread); } public void OnAddUser(SysUser payload) { try { _logger.Information($"添加新用户: {payload.Account}"); } catch (Exception ex) { _logger.Error($"添加用户事件处理失败: {ex.Message}", ex); } } public void OnRegisterUser(SysUser payload) { try { Task.Run(() => { }); _logger.Information($"用户注册"); } catch (Exception ex) { _logger.Error($"注册用户事件处理失败: {ex.Message}", ex); } } public void OnUpdateUser((SysUser Original, SysUser Updated) payload) { try { _logger.Information($"更新用户"); } catch (Exception ex) { _logger.Error($"更新用户事件处理失败: {ex.Message}", ex); } } public void OnDeleteUser(SysUser payload) { try { } catch (Exception ex) { _logger.Error($"删除用户事件处理失败: {ex.Message}", ex); } } public void OnSetUserStatus((SysUser User, StatusEnum NewStatus) payload) { try { } catch (Exception ex) { _logger.Error($"设置用户状态事件处理失败: {ex.Message}", ex); } } public void OnChangePwd(SysUser payload) { try { } catch (Exception ex) { _logger.Error($"设置用户状态事件处理失败: {ex.Message}", ex); } } public void OnUpdateUserRole((SysUser User, List RoleIds) payload) { try { } catch (Exception ex) { _logger.Error($"更新用户角色事件处理失败: {ex.Message}", ex); } } public void OnUnlockUserLogin(SysUser payload) { try { } catch (Exception ex) { _logger.Error($"解除登录锁定事件处理失败: {ex.Message}", ex); } } public void OnResetPwd(SysUser payload) { throw new NotImplementedException(); } public void OnLoginUser(SysUser payload) { try { _logger.Information($"登录成功"); } catch (Exception ex) { _logger.Error($"登录处理失败: {ex.Message}", ex); } } public void OnLoginOut(SysUser payload) { // 勿抛异常:Prism 事件总线上若此处抛错,可能影响同事件其它订阅者(如主窗口释放与 WS 停止) _logger.Information($"用户登出事件: {payload?.Account ?? ""}"); } public void Dispose() { // 显式取消所有订阅 foreach (var token in _subscriptions) { token.Dispose(); } } } }