fix: fix memory leaks
This commit is contained in:
parent
4e2e108076
commit
914f6ba20f
@ -62,6 +62,14 @@ namespace Client.Application.ViewModels
|
|||||||
this.pathMover = pathMover;
|
this.pathMover = pathMover;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UnsubscribeAll()
|
||||||
|
{
|
||||||
|
creature.PropertyChanged -= Creature_PropertyChanged;
|
||||||
|
creature.Transform.Position.PropertyChanged -= Position_PropertyChanged;
|
||||||
|
hero.Transform.Position.PropertyChanged -= HeroPosition_PropertyChanged;
|
||||||
|
hero.PropertyChanged -= Hero_PropertyChanged;
|
||||||
|
}
|
||||||
|
|
||||||
private void HeroPosition_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
private void HeroPosition_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
OnPropertyChanged("Distance");
|
OnPropertyChanged("Distance");
|
||||||
|
@ -109,6 +109,16 @@ namespace Client.Application.ViewModels
|
|||||||
MouseRightClickCommand = new RelayCommand(async (o) => await OnMouseRightClick(o));
|
MouseRightClickCommand = new RelayCommand(async (o) => await OnMouseRightClick(o));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UnsubscribeAll()
|
||||||
|
{
|
||||||
|
creature.PropertyChanged -= Creature_PropertyChanged;
|
||||||
|
creature.Transform.PropertyChanged -= Transform_PropertyChanged;
|
||||||
|
creature.Transform.Position.PropertyChanged -= Position_PropertyChanged;
|
||||||
|
creature.VitalStats.PropertyChanged -= VitalStats_PropertyChanged;
|
||||||
|
hero.Transform.Position.PropertyChanged -= HeroPosition_PropertyChanged;
|
||||||
|
hero.PropertyChanged -= Hero_PropertyChanged;
|
||||||
|
}
|
||||||
|
|
||||||
private void VitalStats_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
private void VitalStats_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.PropertyName == "Hp" || e.PropertyName == "MaxHp")
|
if (e.PropertyName == "Hp" || e.PropertyName == "MaxHp")
|
||||||
|
@ -92,6 +92,13 @@ namespace Client.Application.ViewModels
|
|||||||
MouseRightClickCommand = new RelayCommand(async (o) => await OnMouseRightClick(o));
|
MouseRightClickCommand = new RelayCommand(async (o) => await OnMouseRightClick(o));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UnsubscribeAll()
|
||||||
|
{
|
||||||
|
drop.PropertyChanged -= Drop_PropertyChanged;
|
||||||
|
drop.Transform.Position.PropertyChanged -= DropPosition_PropertyChanged;
|
||||||
|
hero.Transform.Position.PropertyChanged -= HeroPosition_PropertyChanged;
|
||||||
|
}
|
||||||
|
|
||||||
private void HeroPosition_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
private void HeroPosition_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
OnPropertyChanged("Distance");
|
OnPropertyChanged("Distance");
|
||||||
|
@ -73,24 +73,31 @@ namespace Client.Application.ViewModels
|
|||||||
this.hero = hero;
|
this.hero = hero;
|
||||||
this.worldHandler = worldHandler;
|
this.worldHandler = worldHandler;
|
||||||
this.pathMover = pathMover;
|
this.pathMover = pathMover;
|
||||||
drop.PropertyChanged += Creature_PropertyChanged;
|
drop.PropertyChanged += Drop_PropertyChanged;
|
||||||
drop.Transform.Position.PropertyChanged += Position_PropertyChanged;
|
drop.Transform.Position.PropertyChanged += DropPosition_PropertyChanged;
|
||||||
hero.Transform.Position.PropertyChanged += HeroPosition_PropertyChanged;
|
hero.Transform.Position.PropertyChanged += HeroPosition_PropertyChanged;
|
||||||
MouseLeftClickCommand = new RelayCommand(OnMouseLeftClick);
|
MouseLeftClickCommand = new RelayCommand(OnMouseLeftClick);
|
||||||
MouseRightClickCommand = new RelayCommand(async (o) => await OnMouseRightClick(o));
|
MouseRightClickCommand = new RelayCommand(async (o) => await OnMouseRightClick(o));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UnsubscribeAll()
|
||||||
|
{
|
||||||
|
drop.PropertyChanged -= Drop_PropertyChanged;
|
||||||
|
drop.Transform.Position.PropertyChanged -= DropPosition_PropertyChanged;
|
||||||
|
hero.Transform.Position.PropertyChanged -= HeroPosition_PropertyChanged;
|
||||||
|
}
|
||||||
|
|
||||||
private void HeroPosition_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
private void HeroPosition_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
OnPropertyChanged("Position");
|
OnPropertyChanged("Position");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Position_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
private void DropPosition_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
OnPropertyChanged("Position");
|
OnPropertyChanged("Position");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Creature_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
private void Drop_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.PropertyName == "Name" || e.PropertyName == "Amount")
|
if (e.PropertyName == "Name" || e.PropertyName == "Amount")
|
||||||
{
|
{
|
||||||
|
@ -105,6 +105,7 @@ namespace Client.Application.ViewModels
|
|||||||
}
|
}
|
||||||
else if (target != null && hero.Target == null)
|
else if (target != null && hero.Target == null)
|
||||||
{
|
{
|
||||||
|
target.UnsubscribeAll();
|
||||||
target = null;
|
target = null;
|
||||||
OnPropertyChanged("Target");
|
OnPropertyChanged("Target");
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ using Client.Domain.Entities;
|
|||||||
using Client.Domain.Events;
|
using Client.Domain.Events;
|
||||||
using Client.Domain.Service;
|
using Client.Domain.Service;
|
||||||
using Client.Domain.ValueObjects;
|
using Client.Domain.ValueObjects;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
@ -72,7 +73,12 @@ namespace Client.Application.ViewModels
|
|||||||
|
|
||||||
public void Handle(CreatureDeletedEvent @event)
|
public void Handle(CreatureDeletedEvent @event)
|
||||||
{
|
{
|
||||||
Creatures.RemoveAll(x => x.Id == @event.Id);
|
var creature = Creatures.Where(x => x.Id == @event.Id).FirstOrDefault();
|
||||||
|
if (creature != null)
|
||||||
|
{
|
||||||
|
creature.UnsubscribeAll();
|
||||||
|
Creatures.Remove(creature);
|
||||||
|
}
|
||||||
RemoveCreature(@event.Id);
|
RemoveCreature(@event.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,8 +93,18 @@ namespace Client.Application.ViewModels
|
|||||||
|
|
||||||
public void Handle(DropDeletedEvent @event)
|
public void Handle(DropDeletedEvent @event)
|
||||||
{
|
{
|
||||||
Drops.RemoveAll(x => x.Id == @event.Id);
|
var drop = Drops.Where(x => x.Id == @event.Id).FirstOrDefault();
|
||||||
Map.Drops.RemoveAll(x => x.Id == @event.Id);
|
if (drop != null)
|
||||||
|
{
|
||||||
|
drop.UnsubscribeAll();
|
||||||
|
Drops.Remove(drop);
|
||||||
|
}
|
||||||
|
var mapDrop = Map.Drops.Where(x => x.Id == @event.Id).FirstOrDefault();
|
||||||
|
if (mapDrop != null)
|
||||||
|
{
|
||||||
|
mapDrop.UnsubscribeAll();
|
||||||
|
Map.Drops.Remove(mapDrop);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Handle(ChatMessageCreatedEvent @event)
|
public void Handle(ChatMessageCreatedEvent @event)
|
||||||
@ -156,7 +172,12 @@ namespace Client.Application.ViewModels
|
|||||||
|
|
||||||
private void RemoveCreature(uint id)
|
private void RemoveCreature(uint id)
|
||||||
{
|
{
|
||||||
Map.Creatures.RemoveAll(x => x.Id == id);
|
var creature = Map.Creatures.Where(x => x.Id == id).FirstOrDefault();
|
||||||
|
if (creature != null)
|
||||||
|
{
|
||||||
|
creature.UnsubscribeAll();
|
||||||
|
Map.Creatures.Remove(creature);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnToggleAI(object? sender)
|
private void OnToggleAI(object? sender)
|
||||||
|
@ -230,11 +230,16 @@ namespace Client.Application.ViewModels
|
|||||||
{
|
{
|
||||||
foreach (var item in e.OldItems)
|
foreach (var item in e.OldItems)
|
||||||
{
|
{
|
||||||
|
Path[0].UnsubscribeAll();
|
||||||
Path.RemoveAt(0);
|
Path.RemoveAt(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (e.Action == NotifyCollectionChangedAction.Reset)
|
else if (e.Action == NotifyCollectionChangedAction.Reset)
|
||||||
{
|
{
|
||||||
|
foreach (var item in Path)
|
||||||
|
{
|
||||||
|
item.UnsubscribeAll();
|
||||||
|
}
|
||||||
Path.RemoveAll();
|
Path.RemoveAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,6 +69,11 @@ namespace Client.Application.ViewModels
|
|||||||
hero.Transform.Position.PropertyChanged += HeroPosition_PropertyChanged;
|
hero.Transform.Position.PropertyChanged += HeroPosition_PropertyChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UnsubscribeAll()
|
||||||
|
{
|
||||||
|
hero.Transform.Position.PropertyChanged -= HeroPosition_PropertyChanged;
|
||||||
|
}
|
||||||
|
|
||||||
private void HeroPosition_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
private void HeroPosition_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
OnPropertyChanged("From");
|
OnPropertyChanged("From");
|
||||||
|
@ -38,6 +38,14 @@ namespace Client.Application.ViewModels
|
|||||||
this.hero = hero;
|
this.hero = hero;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UnsubscribeAll()
|
||||||
|
{
|
||||||
|
creature.PropertyChanged -= Creature_PropertyChanged;
|
||||||
|
creature.Transform.Position.PropertyChanged -= Position_PropertyChanged;
|
||||||
|
creature.VitalStats.PropertyChanged -= VitalStats_PropertyChanged;
|
||||||
|
hero.Transform.Position.PropertyChanged -= HeroPosition_PropertyChanged;
|
||||||
|
}
|
||||||
|
|
||||||
private void VitalStats_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
private void VitalStats_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.PropertyName == "Hp")
|
if (e.PropertyName == "Hp")
|
||||||
|
Loading…
Reference in New Issue
Block a user