mirror of
https://github.com/Ikatono/TwitchIrcClient.git
synced 2025-10-29 04:56:12 -05:00
Added locking to Irc Callback lists
This commit is contained in:
@@ -162,8 +162,17 @@ namespace TwitchIrcClient.IRC
|
|||||||
message += command.ToCommand() + " ";
|
message += command.ToCommand() + " ";
|
||||||
if (parameters is not null && parameters.Any())
|
if (parameters is not null && parameters.Any())
|
||||||
{
|
{
|
||||||
message += string.Join(' ', parameters.SkipLast(1));
|
//if ((command == IrcMessageType.NICK || command == IrcMessageType.PASS)
|
||||||
message += " :" + parameters.Last();
|
// && parameters.Count() == 1)
|
||||||
|
if (false)
|
||||||
|
{
|
||||||
|
message += " " + parameters.Single();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
message += string.Join(' ', parameters.SkipLast(1));
|
||||||
|
message += " :" + parameters.Last();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
SendLine(message);
|
SendLine(message);
|
||||||
}
|
}
|
||||||
@@ -185,13 +194,13 @@ namespace TwitchIrcClient.IRC
|
|||||||
{
|
{
|
||||||
user ??= $"justinfan{Random.Shared.NextInt64(10000):D4}";
|
user ??= $"justinfan{Random.Shared.NextInt64(10000):D4}";
|
||||||
pass ??= "pass";
|
pass ??= "pass";
|
||||||
SendLine($"NICK {user}");
|
SendMessage(IrcMessageType.PASS, parameters: [pass]);
|
||||||
SendLine($"PASS {pass}");
|
SendMessage(IrcMessageType.NICK, parameters: [user]);
|
||||||
}
|
}
|
||||||
public void JoinChannel(string channel)
|
public void JoinChannel(string channel)
|
||||||
{
|
{
|
||||||
channel = channel.TrimStart('#');
|
channel = channel.TrimStart('#');
|
||||||
SendLine($"JOIN #{channel}");
|
SendMessage(IrcMessageType.JOIN, ["#" + channel]);
|
||||||
}
|
}
|
||||||
private async void ListenForInput()
|
private async void ListenForInput()
|
||||||
{
|
{
|
||||||
@@ -308,30 +317,36 @@ namespace TwitchIrcClient.IRC
|
|||||||
public void AddCallback(MessageCallbackItem callbackItem)
|
public void AddCallback(MessageCallbackItem callbackItem)
|
||||||
{
|
{
|
||||||
ObjectDisposedException.ThrowIf(disposedValue, this);
|
ObjectDisposedException.ThrowIf(disposedValue, this);
|
||||||
UserCallbacks.Add(callbackItem);
|
lock (UserCallbacks)
|
||||||
|
UserCallbacks.Add(callbackItem);
|
||||||
}
|
}
|
||||||
public bool RemoveCallback(MessageCallbackItem callbackItem)
|
public bool RemoveCallback(MessageCallbackItem callbackItem)
|
||||||
{
|
{
|
||||||
ObjectDisposedException.ThrowIf(disposedValue, this);
|
ObjectDisposedException.ThrowIf(disposedValue, this);
|
||||||
return UserCallbacks.Remove(callbackItem);
|
lock (UserCallbacks)
|
||||||
|
return UserCallbacks.Remove(callbackItem);
|
||||||
}
|
}
|
||||||
protected void AddSystemCallback(MessageCallbackItem callbackItem)
|
protected void AddSystemCallback(MessageCallbackItem callbackItem)
|
||||||
{
|
{
|
||||||
ObjectDisposedException.ThrowIf(disposedValue, this);
|
ObjectDisposedException.ThrowIf(disposedValue, this);
|
||||||
SystemCallbacks.Add(callbackItem);
|
lock (SystemCallbacks)
|
||||||
|
SystemCallbacks.Add(callbackItem);
|
||||||
}
|
}
|
||||||
protected bool RemoveSystemCallback(MessageCallbackItem callbackItem)
|
protected bool RemoveSystemCallback(MessageCallbackItem callbackItem)
|
||||||
{
|
{
|
||||||
ObjectDisposedException.ThrowIf(disposedValue, this);
|
ObjectDisposedException.ThrowIf(disposedValue, this);
|
||||||
return SystemCallbacks.Remove(callbackItem);
|
lock (SystemCallbacks)
|
||||||
|
return SystemCallbacks.Remove(callbackItem);
|
||||||
}
|
}
|
||||||
private void RunCallbacks(ReceivedMessage message)
|
private void RunCallbacks(ReceivedMessage message)
|
||||||
{
|
{
|
||||||
ArgumentNullException.ThrowIfNull(message, nameof(message));
|
ArgumentNullException.ThrowIfNull(message, nameof(message));
|
||||||
if (disposedValue)
|
if (disposedValue)
|
||||||
return;
|
return;
|
||||||
SystemCallbacks.ForEach(c => c.TryCall(this, message));
|
lock (SystemCallbacks)
|
||||||
UserCallbacks.ForEach(c => c.TryCall(this, message));
|
SystemCallbacks.ForEach(c => c.TryCall(this, message));
|
||||||
|
lock (UserCallbacks)
|
||||||
|
UserCallbacks.ForEach(c => c.TryCall(this, message));
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Dispose
|
#region Dispose
|
||||||
@@ -346,6 +361,7 @@ namespace TwitchIrcClient.IRC
|
|||||||
TokenSource.Dispose();
|
TokenSource.Dispose();
|
||||||
Client?.Dispose();
|
Client?.Dispose();
|
||||||
_HeartbeatTimer?.Dispose();
|
_HeartbeatTimer?.Dispose();
|
||||||
|
_Stream?.Dispose();
|
||||||
}
|
}
|
||||||
disposedValue = true;
|
disposedValue = true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user