Skip to content

Commit

Permalink
use locks in GuildInfo for underlying list
Browse files Browse the repository at this point in the history
  • Loading branch information
foglio1024 committed Apr 2, 2024
1 parent 86237d9 commit 5308c88
Showing 1 changed file with 23 additions and 5 deletions.
28 changes: 23 additions & 5 deletions TCC.Core/Data/GuildInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ namespace TCC.Data;

public class GuildInfo
{
readonly object _lock = new object();
readonly ThreadSafeObservableCollection<GuildMemberData> _members = [];

public bool InGuild { get; private set; }
Expand All @@ -16,30 +17,47 @@ public class GuildInfo

public string NameOf(uint id)
{
var found = _members.ToSyncList().FirstOrDefault(m => m.PlayerId == id);
GuildMemberData found;
lock (_lock)
{
found = _members.ToSyncList().FirstOrDefault(m => m.PlayerId == id);
}
return found.Name != ""
? found.Name
: "Unknown player";
}

public void Set(List<GuildMemberData> newMembers, uint masterId, string masterName)
{
foreach (var member in newMembers.Where(x => !Has(x.Name)))
lock (_lock)
{
_members.Add(member);
foreach (var member in newMembers.Where(x => !Has(x.Name)))
{
_members.Add(member);
}
}
InGuild = true;
SetMaster(masterId, masterName);
}

public bool Has(string name)
{
return _members.ToSyncList().Exists(m => m.Name == name);
bool ret = false;

lock (_lock)
{
ret = _members.ToSyncList().Exists(m => m.Name == name);
}
return ret;
}

public void Clear()
{
Task.Run(() => _members.Clear());
lock (_lock)
{
_members.Clear();
}

InGuild = false;
Master = default;
AmIMaster = false;
Expand Down

0 comments on commit 5308c88

Please sign in to comment.