netstandard and revert target type new

This commit is contained in:
Ben Harris 2024-04-19 00:24:48 -04:00
parent 5c2b0faf52
commit 53add8700f
26 changed files with 97 additions and 122 deletions

View File

@ -1,7 +1,5 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=3892ce1c_002Daad5_002D4870_002D98ea_002D199acb6b67c3/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from Solution #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;Solution /&gt;&#xD; <s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=64875d9c_002Daf58_002D4d04_002D996b_002Ddf4baee8e592/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=64875d9c_002Daf58_002D4d04_002D996b_002Ddf4baee8e592/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;Solution /&gt;&#xD; &lt;Solution /&gt;&#xD;
&lt;/SessionState&gt;</s:String></wpf:ResourceDictionary> &lt;/SessionState&gt;</s:String></wpf:ResourceDictionary>

View File

@ -12,7 +12,7 @@ namespace ChatSharp
{ {
internal CapabilityPool() internal CapabilityPool()
{ {
Capabilities = new(); Capabilities = new List<IrcCapability>();
} }
private List<IrcCapability> Capabilities { get; } private List<IrcCapability> Capabilities { get; }
@ -67,7 +67,7 @@ namespace ChatSharp
if (Capabilities.Any(cap => cap.Name == name)) if (Capabilities.Any(cap => cap.Name == name))
return; return;
Capabilities.Add(new(name)); Capabilities.Add(new IrcCapability(name));
} }
internal void AddRange(IEnumerable<string> range) internal void AddRange(IEnumerable<string> range)

View File

@ -12,7 +12,7 @@ namespace ChatSharp
{ {
internal ChannelCollection() internal ChannelCollection()
{ {
Channels = new(); Channels = new List<IrcChannel>();
} }
internal ChannelCollection(IrcClient client) : this() internal ChannelCollection(IrcClient client) : this()

View File

@ -1,17 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild> <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageLicenseExpression>MIT</PackageLicenseExpression> <PackageLicenseExpression>MIT</PackageLicenseExpression>
<RepositoryUrl>https://tildegit.org/ben/chatsharp</RepositoryUrl> <RepositoryUrl>https://tildegit.org/ben/chatsharp</RepositoryUrl>
<PackageReadmeFile>README.md</PackageReadmeFile> <PackageReadmeFile>README.md</PackageReadmeFile>
<PackageProjectUrl>https://tildegit.org/ben/chatsharp</PackageProjectUrl> <PackageProjectUrl>https://tildegit.org/ben/chatsharp</PackageProjectUrl>
<Description>c# irc library</Description> <Description>c# irc library</Description>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<None Include="..\README.md"> <None Include="..\README.md" Pack="true" PackagePath="\"/>
<Pack>True</Pack>
<PackagePath></PackagePath>
</None>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -37,11 +37,11 @@ namespace ChatSharp.Events
{ {
const string nickCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; const string nickCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
_random ??= new(); _random ??= new Random();
var nick = new char[8]; var nick = new char[8];
for (var i = 0; i < nick.Length; i++) for (var i = 0; i < nick.Length; i++)
nick[i] = nickCharacters[_random.Next(nickCharacters.Length)]; nick[i] = nickCharacters[_random.Next(nickCharacters.Length)];
return new(nick); return new string(nick);
} }
} }
} }

View File

@ -12,7 +12,7 @@ namespace ChatSharp.Events
internal PrivateMessageEventArgs(IrcClient client, IrcMessage ircMessage, ServerInfo serverInfo) internal PrivateMessageEventArgs(IrcClient client, IrcMessage ircMessage, ServerInfo serverInfo)
{ {
IrcMessage = ircMessage; IrcMessage = ircMessage;
PrivateMessage = new(client, IrcMessage, serverInfo); PrivateMessage = new PrivateMessage(client, IrcMessage, serverInfo);
} }
/// <summary> /// <summary>

View File

@ -2,6 +2,7 @@ using System;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using ChatSharp.Events;
namespace ChatSharp.Handlers namespace ChatSharp.Handlers
{ {
@ -25,7 +26,7 @@ namespace ChatSharp.Handlers
user.Account = whoQuery[0].User.Account; user.Account = whoQuery[0].User.Account;
}); });
client.OnUserJoinedChannel(new(channel, user)); client.OnUserJoinedChannel(new ChannelUserEventArgs(channel, user));
} }
} }
@ -34,7 +35,7 @@ namespace ChatSharp.Handlers
var channel = client.Channels.GetOrAdd(message.Parameters[1]); var channel = client.Channels.GetOrAdd(message.Parameters[1]);
var old = channel._Topic; var old = channel._Topic;
channel._Topic = message.Parameters[2]; channel._Topic = message.Parameters[2];
client.OnChannelTopicReceived(new(channel, old, channel._Topic)); client.OnChannelTopicReceived(new ChannelTopicEventArgs(channel, old, channel._Topic));
} }
public static void HandleGetEmptyTopic(IrcClient client, IrcMessage message) public static void HandleGetEmptyTopic(IrcClient client, IrcMessage message)
@ -42,7 +43,7 @@ namespace ChatSharp.Handlers
var channel = client.Channels.GetOrAdd(message.Parameters[1]); var channel = client.Channels.GetOrAdd(message.Parameters[1]);
var old = channel._Topic; var old = channel._Topic;
channel._Topic = message.Parameters[2]; channel._Topic = message.Parameters[2];
client.OnChannelTopicReceived(new(channel, old, channel._Topic)); client.OnChannelTopicReceived(new ChannelTopicEventArgs(channel, old, channel._Topic));
} }
public static void HandlePart(IrcClient client, IrcMessage message) public static void HandlePart(IrcClient client, IrcMessage message)
@ -58,7 +59,7 @@ namespace ChatSharp.Handlers
if (user.ChannelModes.ContainsKey(channel)) if (user.ChannelModes.ContainsKey(channel))
user.ChannelModes.Remove(channel); user.ChannelModes.Remove(channel);
client.OnUserPartedChannel(new(channel, user)); client.OnUserPartedChannel(new ChannelUserEventArgs(channel, user));
} }
public static void HandleUserListPart(IrcClient client, IrcMessage message) public static void HandleUserListPart(IrcClient client, IrcMessage message)
@ -127,7 +128,7 @@ namespace ChatSharp.Handlers
public static void HandleUserListEnd(IrcClient client, IrcMessage message) public static void HandleUserListEnd(IrcClient client, IrcMessage message)
{ {
var channel = client.Channels[message.Parameters[1]]; var channel = client.Channels[message.Parameters[1]];
client.OnChannelListReceived(new(channel)); client.OnChannelListReceived(new ChannelEventArgs(channel));
if (client.Settings.ModeOnJoin) if (client.Settings.ModeOnJoin)
try try
{ {
@ -164,7 +165,7 @@ namespace ChatSharp.Handlers
var kicked = channel.Users[message.Parameters[1]]; var kicked = channel.Users[message.Parameters[1]];
if (kicked.Channels.Contains(channel)) if (kicked.Channels.Contains(channel))
kicked.Channels.Remove(channel); kicked.Channels.Remove(channel);
client.OnUserKicked(new(channel, new(message.Prefix), client.OnUserKicked(new KickEventArgs(channel, new IrcUser(message.Prefix),
kicked, message.Parameters[2])); kicked, message.Parameters[2]));
} }
} }

View File

@ -1,3 +1,5 @@
using ChatSharp.Events;
namespace ChatSharp.Handlers namespace ChatSharp.Handlers
{ {
/// <summary> /// <summary>
@ -10,7 +12,7 @@ namespace ChatSharp.Handlers
/// </summary> /// </summary>
public static void HandleError(IrcClient client, IrcMessage message) public static void HandleError(IrcClient client, IrcMessage message)
{ {
client.OnErrorReply(new(message)); client.OnErrorReply(new ErrorReplyEventArgs(message));
} }
} }
} }

View File

@ -8,7 +8,7 @@ namespace ChatSharp.Handlers
var parameters = parameterString[parameterString.IndexOf(' ')..].Split(' '); var parameters = parameterString[parameterString.IndexOf(' ')..].Split(' ');
var request = client.RequestManager.PeekOperation("GETMODE b " + parameters[1]); var request = client.RequestManager.PeekOperation("GETMODE b " + parameters[1]);
var list = (MaskCollection)request.State; var list = (MaskCollection)request.State;
list.Add(new(parameters[2], client.Users.GetOrAdd(parameters[3]), list.Add(new Mask(parameters[2], client.Users.GetOrAdd(parameters[3]),
IrcClient.DateTimeFromIrcTime(int.Parse(parameters[4])))); IrcClient.DateTimeFromIrcTime(int.Parse(parameters[4]))));
} }
@ -24,7 +24,7 @@ namespace ChatSharp.Handlers
var parameters = parameterString[(parameterString.IndexOf(' ') + 1)..].Split(' '); var parameters = parameterString[(parameterString.IndexOf(' ') + 1)..].Split(' ');
var request = client.RequestManager.PeekOperation("GETMODE e " + parameters[1]); var request = client.RequestManager.PeekOperation("GETMODE e " + parameters[1]);
var list = (MaskCollection)request.State; var list = (MaskCollection)request.State;
list.Add(new(parameters[2], client.Users.GetOrAdd(parameters[3]), list.Add(new Mask(parameters[2], client.Users.GetOrAdd(parameters[3]),
IrcClient.DateTimeFromIrcTime(int.Parse(parameters[4])))); IrcClient.DateTimeFromIrcTime(int.Parse(parameters[4]))));
} }
@ -40,7 +40,7 @@ namespace ChatSharp.Handlers
var parameters = parameterString[(parameterString.IndexOf(' ') + 1)..].Split(' '); var parameters = parameterString[(parameterString.IndexOf(' ') + 1)..].Split(' ');
var request = client.RequestManager.PeekOperation("GETMODE I " + parameters[1]); var request = client.RequestManager.PeekOperation("GETMODE I " + parameters[1]);
var list = (MaskCollection)request.State; var list = (MaskCollection)request.State;
list.Add(new(parameters[2], client.Users.GetOrAdd(parameters[3]), list.Add(new Mask(parameters[2], client.Users.GetOrAdd(parameters[3]),
IrcClient.DateTimeFromIrcTime(int.Parse(parameters[4])))); IrcClient.DateTimeFromIrcTime(int.Parse(parameters[4]))));
} }
@ -56,7 +56,7 @@ namespace ChatSharp.Handlers
var parameters = parameterString[(parameterString.IndexOf(' ') + 1)..].Split(' '); var parameters = parameterString[(parameterString.IndexOf(' ') + 1)..].Split(' ');
var request = client.RequestManager.PeekOperation("GETMODE q " + parameters[1]); var request = client.RequestManager.PeekOperation("GETMODE q " + parameters[1]);
var list = (MaskCollection)request.State; var list = (MaskCollection)request.State;
list.Add(new(parameters[2], client.Users.GetOrAdd(parameters[3]), list.Add(new Mask(parameters[2], client.Users.GetOrAdd(parameters[3]),
IrcClient.DateTimeFromIrcTime(int.Parse(parameters[4])))); IrcClient.DateTimeFromIrcTime(int.Parse(parameters[4]))));
} }

View File

@ -1,4 +1,5 @@
using System; using System;
using ChatSharp.Events;
namespace ChatSharp.Handlers namespace ChatSharp.Handlers
{ {
@ -17,21 +18,21 @@ namespace ChatSharp.Handlers
throw new IrcProtocolException("372 MOTD message is incorrectly formatted."); throw new IrcProtocolException("372 MOTD message is incorrectly formatted.");
var part = message.Parameters[1][2..]; var part = message.Parameters[1][2..];
MOTD += part + Environment.NewLine; MOTD += part + Environment.NewLine;
client.OnMOTDPartReceived(new(part)); client.OnMOTDPartReceived(new ServerMOTDEventArgs(part));
} }
public static void HandleEndOfMOTD(IrcClient client, IrcMessage message) public static void HandleEndOfMOTD(IrcClient client, IrcMessage message)
{ {
client.OnMOTDReceived(new(MOTD)); client.OnMOTDReceived(new ServerMOTDEventArgs(MOTD));
client.OnConnectionComplete(new()); client.OnConnectionComplete(EventArgs.Empty);
// Verify our identity // Verify our identity
VerifyOurIdentity(client); VerifyOurIdentity(client);
} }
public static void HandleMOTDNotFound(IrcClient client, IrcMessage message) public static void HandleMOTDNotFound(IrcClient client, IrcMessage message)
{ {
client.OnMOTDReceived(new(MOTD)); client.OnMOTDReceived(new ServerMOTDEventArgs(MOTD));
client.OnConnectionComplete(new()); client.OnConnectionComplete(EventArgs.Empty);
VerifyOurIdentity(client); VerifyOurIdentity(client);
} }

View File

@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.Linq; using System.Linq;
using ChatSharp.Events; using ChatSharp.Events;
@ -95,7 +96,7 @@ namespace ChatSharp.Handlers
var oldNick = user.Nick; var oldNick = user.Nick;
user.Nick = message.Parameters[0]; user.Nick = message.Parameters[0];
client.OnNickChanged(new() client.OnNickChanged(new NickChangedEventArgs
{ {
User = user, User = user,
OldNick = oldNick, OldNick = oldNick,
@ -109,7 +110,7 @@ namespace ChatSharp.Handlers
if (client.User.Nick != user.Nick) if (client.User.Nick != user.Nick)
{ {
client.Users.Remove(user); client.Users.Remove(user);
client.OnUserQuit(new(user)); client.OnUserQuit(new UserEventArgs(user));
} }
} }
@ -121,7 +122,7 @@ namespace ChatSharp.Handlers
public static void HandleNotice(IrcClient client, IrcMessage message) public static void HandleNotice(IrcClient client, IrcMessage message)
{ {
client.OnNoticeReceived(new(message)); client.OnNoticeReceived(new IrcNoticeEventArgs(message));
} }
public static void HandlePrivmsg(IrcClient client, IrcMessage message) public static void HandlePrivmsg(IrcClient client, IrcMessage message)
@ -186,22 +187,22 @@ namespace ChatSharp.Handlers
// TODO: Support the ones here that aren't done properly // TODO: Support the ones here that aren't done properly
if (client.ServerInfo.SupportedChannelModes.ParameterizedSettings.Contains(c)) if (client.ServerInfo.SupportedChannelModes.ParameterizedSettings.Contains(c))
{ {
client.OnModeChanged(new(channel.Name, new(message.Prefix), client.OnModeChanged(new ModeChangeEventArgs(channel.Name, new IrcUser(message.Prefix),
(add ? "+" : "-") + c + " " + message.Parameters[i++])); (add ? "+" : "-") + c + " " + message.Parameters[i++]));
} }
else if (client.ServerInfo.SupportedChannelModes.ChannelLists.Contains(c)) else if (client.ServerInfo.SupportedChannelModes.ChannelLists.Contains(c))
{ {
client.OnModeChanged(new(channel.Name, new(message.Prefix), client.OnModeChanged(new ModeChangeEventArgs(channel.Name, new IrcUser(message.Prefix),
(add ? "+" : "-") + c + " " + message.Parameters[i++])); (add ? "+" : "-") + c + " " + message.Parameters[i++]));
} }
else if (client.ServerInfo.SupportedChannelModes.ChannelUserModes.Contains(c)) else if (client.ServerInfo.SupportedChannelModes.ChannelUserModes.Contains(c))
{ {
if (!channel.UsersByMode.ContainsKey(c)) if (!channel.UsersByMode.ContainsKey(c))
channel.UsersByMode.Add(c, channel.UsersByMode.Add(c,
new(channel.Users.Where(u => new UserPoolView(channel.Users.Where(u =>
{ {
if (!u.ChannelModes.ContainsKey(channel)) if (!u.ChannelModes.ContainsKey(channel))
u.ChannelModes.Add(channel, new()); u.ChannelModes.Add(channel, new List<char?>());
return u.ChannelModes[channel].Contains(c); return u.ChannelModes[channel].Contains(c);
}))); })));
var user = new IrcUser(message.Parameters[i]); var user = new IrcUser(message.Parameters[i]);
@ -217,7 +218,7 @@ namespace ChatSharp.Handlers
user.ChannelModes[channel] = null; user.ChannelModes[channel] = null;
} }
client.OnModeChanged(new(channel.Name, new(message.Prefix), client.OnModeChanged(new ModeChangeEventArgs(channel.Name, new IrcUser(message.Prefix),
(add ? "+" : "-") + c + " " + message.Parameters[i++])); (add ? "+" : "-") + c + " " + message.Parameters[i++]));
} }
@ -233,7 +234,7 @@ namespace ChatSharp.Handlers
channel.Mode = channel.Mode.Replace(c.ToString(), string.Empty); channel.Mode = channel.Mode.Replace(c.ToString(), string.Empty);
} }
client.OnModeChanged(new(channel.Name, new(message.Prefix), client.OnModeChanged(new ModeChangeEventArgs(channel.Name, new IrcUser(message.Prefix),
(add ? "+" : "-") + c)); (add ? "+" : "-") + c));
} }
} }

View File

@ -1,3 +1,5 @@
using ChatSharp.Events;
namespace ChatSharp.Handlers namespace ChatSharp.Handlers
{ {
internal static class ServerHandlers internal static class ServerHandlers
@ -5,7 +7,7 @@ namespace ChatSharp.Handlers
public static void HandleISupport(IrcClient client, IrcMessage message) public static void HandleISupport(IrcClient client, IrcMessage message)
{ {
if (client.ServerInfo == null) if (client.ServerInfo == null)
client.ServerInfo = new(); client.ServerInfo = new ServerInfo();
foreach (var item in message.Parameters) foreach (var item in message.Parameters)
{ {
string key, value; string key, value;
@ -57,7 +59,7 @@ namespace ChatSharp.Handlers
var limitedModes = limits[i].Remove(limits[i].IndexOf(':')); var limitedModes = limits[i].Remove(limits[i].IndexOf(':'));
var limit = int.Parse(limits[i][(limits[i].IndexOf(':') + 1)..]); var limit = int.Parse(limits[i][(limits[i].IndexOf(':') + 1)..]);
foreach (var mode in limitedModes) foreach (var mode in limitedModes)
client.ServerInfo.ModeListLimits[i] = new(mode, limit); client.ServerInfo.ModeListLimits[i] = new ServerInfo.ModeListLimit(mode, limit);
} }
break; break;
@ -92,7 +94,7 @@ namespace ChatSharp.Handlers
} }
} }
client.OnServerInfoReceived(new(client.ServerInfo)); client.OnServerInfoReceived(new SupportsEventArgs(client.ServerInfo));
} }
public static void HandleMyInfo(IrcClient client, IrcMessage message) public static void HandleMyInfo(IrcClient client, IrcMessage message)
@ -100,7 +102,7 @@ namespace ChatSharp.Handlers
// 004 sendak.freenode.net ircd-seven-1.1.3 DOQRSZaghilopswz CFILMPQbcefgijklmnopqrstvz bkloveqjfI // 004 sendak.freenode.net ircd-seven-1.1.3 DOQRSZaghilopswz CFILMPQbcefgijklmnopqrstvz bkloveqjfI
// TODO: Figure out how to properly handle this message // TODO: Figure out how to properly handle this message
if (client.ServerInfo == null) if (client.ServerInfo == null)
client.ServerInfo = new(); client.ServerInfo = new ServerInfo();
if (message.Parameters.Length >= 5) if (message.Parameters.Length >= 5)
foreach (var c in message.Parameters[4]) foreach (var c in message.Parameters[4])
if (!client.ServerInfo.SupportedChannelModes.ChannelUserModes.Contains(c)) if (!client.ServerInfo.SupportedChannelModes.ChannelUserModes.Contains(c))

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using ChatSharp.Events;
namespace ChatSharp.Handlers namespace ChatSharp.Handlers
{ {
@ -68,7 +69,7 @@ namespace ChatSharp.Handlers
if (!client.Users.Contains(whois.User.Nick)) if (!client.Users.Contains(whois.User.Nick))
client.Users.Add(whois.User); client.Users.Add(whois.User);
request.Callback?.Invoke(request); request.Callback?.Invoke(request);
client.OnWhoIsReceived(new(whois)); client.OnWhoIsReceived(new WhoIsReceivedEventArgs(whois));
} }
public static void HandleWho(IrcClient client, IrcMessage message) public static void HandleWho(IrcClient client, IrcMessage message)
@ -81,7 +82,7 @@ namespace ChatSharp.Handlers
var who = new ExtendedWho var who = new ExtendedWho
{ {
Channel = message.Parameters[1], Channel = message.Parameters[1],
User = new() User = new IrcUser
{ {
User = message.Parameters[2], User = message.Parameters[2],
Nick = message.Parameters[5] Nick = message.Parameters[5]
@ -236,7 +237,7 @@ namespace ChatSharp.Handlers
client.Users.Add(whox.User); client.Users.Add(whox.User);
request.Callback?.Invoke(request); request.Callback?.Invoke(request);
client.OnWhoxReceived(new(whoxList.ToArray())); client.OnWhoxReceived(new WhoxReceivedEventArgs(whoxList.ToArray()));
} }
else else
{ {
@ -250,7 +251,7 @@ namespace ChatSharp.Handlers
client.Users.Add(who.User); client.Users.Add(who.User);
request.Callback?.Invoke(request); request.Callback?.Invoke(request);
client.OnWhoxReceived(new(whoList.ToArray())); client.OnWhoxReceived(new WhoxReceivedEventArgs(whoList.ToArray()));
} }
} }

View File

@ -14,7 +14,7 @@ namespace ChatSharp
{ {
Client = client; Client = client;
Name = name; Name = name;
Users = new(client.Users.Where(u => u.Channels.Contains(this))); Users = new UserPoolView(client.Users.Where(u => u.Channels.Contains(this)));
} }
private IrcClient Client { get; } private IrcClient Client { get; }

View File

@ -163,7 +163,7 @@ namespace ChatSharp
public void WhoIs(string nick, Action<WhoIs> callback) public void WhoIs(string nick, Action<WhoIs> callback)
{ {
var whois = new WhoIs(); var whois = new WhoIs();
RequestManager.QueueOperation("WHOIS " + nick, new(whois, ro => { callback?.Invoke((WhoIs)ro.State); })); RequestManager.QueueOperation("WHOIS " + nick, new RequestOperation(whois, ro => { callback?.Invoke((WhoIs)ro.State); }));
SendRawMessage("WHOIS {0}", nick); SendRawMessage("WHOIS {0}", nick);
} }
@ -190,7 +190,7 @@ namespace ChatSharp
var queryKey = string.Format("WHO {0} {1} {2:D}", target, queryType, _fields); var queryKey = string.Format("WHO {0} {1} {2:D}", target, queryType, _fields);
RequestManager.QueueOperation(queryKey, RequestManager.QueueOperation(queryKey,
new(whox, ro => { callback?.Invoke((List<ExtendedWho>)ro.State); })); new RequestOperation(whox, ro => { callback?.Invoke((List<ExtendedWho>)ro.State); }));
SendRawMessage(whoQuery); SendRawMessage(whoQuery);
} }
else else
@ -200,7 +200,7 @@ namespace ChatSharp
var whoQuery = string.Format("WHO {0}", target); var whoQuery = string.Format("WHO {0}", target);
RequestManager.QueueOperation(whoQuery, RequestManager.QueueOperation(whoQuery,
new(whox, ro => { callback?.Invoke((List<ExtendedWho>)ro.State); })); new RequestOperation(whox, ro => { callback?.Invoke((List<ExtendedWho>)ro.State); }));
SendRawMessage(whoQuery); SendRawMessage(whoQuery);
} }
} }
@ -218,7 +218,7 @@ namespace ChatSharp
/// </summary> /// </summary>
public void GetMode(string channel, Action<IrcChannel> callback) public void GetMode(string channel, Action<IrcChannel> callback)
{ {
RequestManager.QueueOperation("MODE " + channel, new(channel, ro => RequestManager.QueueOperation("MODE " + channel, new RequestOperation(channel, ro =>
{ {
var c = Channels[(string)ro.State]; var c = Channels[(string)ro.State];
callback?.Invoke(c); callback?.Invoke(c);
@ -240,7 +240,7 @@ namespace ChatSharp
/// </summary> /// </summary>
public void GetModeList(string channel, char mode, Action<MaskCollection> callback) public void GetModeList(string channel, char mode, Action<MaskCollection> callback)
{ {
RequestManager.QueueOperation("GETMODE " + mode + " " + channel, new(new MaskCollection(), ro => RequestManager.QueueOperation("GETMODE " + mode + " " + channel, new RequestOperation(new MaskCollection(), ro =>
{ {
var c = (MaskCollection)ro.State; var c = (MaskCollection)ro.State;
callback?.Invoke(c); callback?.Invoke(c);

View File

@ -35,18 +35,18 @@ namespace ChatSharp
User = user ?? throw new ArgumentNullException(nameof(user)); User = user ?? throw new ArgumentNullException(nameof(user));
ServerAddress = serverAddress ?? throw new ArgumentNullException(nameof(serverAddress)); ServerAddress = serverAddress ?? throw new ArgumentNullException(nameof(serverAddress));
Encoding = Encoding.UTF8; Encoding = Encoding.UTF8;
Settings = new(); Settings = new ClientSettings();
Handlers = new(); Handlers = new Dictionary<string, MessageHandler>();
MessageHandlers.RegisterDefaultHandlers(this); MessageHandlers.RegisterDefaultHandlers(this);
RequestManager = new(); RequestManager = new RequestManager();
UseSSL = useSSL; UseSSL = useSSL;
WriteQueue = new(); WriteQueue = new ConcurrentQueue<string>();
ServerInfo = new(); ServerInfo = new ServerInfo();
PrivmsgPrefix = ""; PrivmsgPrefix = "";
Channels = User.Channels = new(this); Channels = User.Channels = new ChannelCollection(this);
// Add self to user pool // Add self to user pool
Users = new() { User }; Users = new UserPool { User };
Capabilities = new(); Capabilities = new CapabilityPool();
// List of supported capabilities // List of supported capabilities
Capabilities.AddRange(new[] Capabilities.AddRange(new[]
@ -58,7 +58,7 @@ namespace ChatSharp
IsNegotiatingCapabilities = false; IsNegotiatingCapabilities = false;
IsAuthenticatingSasl = false; IsAuthenticatingSasl = false;
RandomNumber = new(); RandomNumber = new Random();
} }
private Dictionary<string, MessageHandler> Handlers { get; } private Dictionary<string, MessageHandler> Handlers { get; }
@ -199,17 +199,17 @@ namespace ChatSharp
{ {
if (Socket != null && Socket.Connected) if (Socket != null && Socket.Connected)
throw new InvalidOperationException("Socket is already connected to server."); throw new InvalidOperationException("Socket is already connected to server.");
Socket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ReadBuffer = new byte[ReadBufferLength]; ReadBuffer = new byte[ReadBufferLength];
ReadBufferIndex = 0; ReadBufferIndex = 0;
PingTimer = new(30000); PingTimer = new Timer(30000);
PingTimer.Elapsed += (_, _) => PingTimer.Elapsed += (x, y) =>
{ {
if (!string.IsNullOrEmpty(ServerNameFromPing)) if (!string.IsNullOrEmpty(ServerNameFromPing))
SendRawMessage("PING :{0}", ServerNameFromPing); SendRawMessage("PING :{0}", ServerNameFromPing);
}; };
var checkQueue = new Timer(1000); var checkQueue = new Timer(1000);
checkQueue.Elapsed += (_, _) => checkQueue.Elapsed += (x, y) =>
{ {
if (!WriteQueue.IsEmpty) if (!WriteQueue.IsEmpty)
{ {
@ -260,7 +260,7 @@ namespace ChatSharp
if (UseSSL) if (UseSSL)
{ {
if (IgnoreInvalidSSL) if (IgnoreInvalidSSL)
NetworkStream = new SslStream(NetworkStream, false, (_, _, _, _) => true); NetworkStream = new SslStream(NetworkStream, false, (a, b, c, d) => true);
else else
NetworkStream = new SslStream(NetworkStream); NetworkStream = new SslStream(NetworkStream);
((SslStream)NetworkStream).AuthenticateAsClient(ServerHostname); ((SslStream)NetworkStream).AuthenticateAsClient(ServerHostname);
@ -279,11 +279,11 @@ namespace ChatSharp
} }
catch (SocketException e) catch (SocketException e)
{ {
OnNetworkError(new(e.SocketErrorCode)); OnNetworkError(new SocketErrorEventArgs(e.SocketErrorCode));
} }
catch (Exception e) catch (Exception e)
{ {
OnError(new(e)); OnError(new ErrorEventArgs(e));
} }
} }
@ -291,7 +291,7 @@ namespace ChatSharp
{ {
if (NetworkStream == null) if (NetworkStream == null)
{ {
OnNetworkError(new(SocketError.NotConnected)); OnNetworkError(new SocketErrorEventArgs(SocketError.NotConnected));
return; return;
} }
@ -303,7 +303,7 @@ namespace ChatSharp
catch (IOException e) catch (IOException e)
{ {
if (e.InnerException is SocketException socketException) if (e.InnerException is SocketException socketException)
OnNetworkError(new(socketException.SocketErrorCode)); OnNetworkError(new SocketErrorEventArgs(socketException.SocketErrorCode));
else else
throw; throw;
return; return;
@ -332,7 +332,7 @@ namespace ChatSharp
private void HandleMessage(string rawMessage) private void HandleMessage(string rawMessage)
{ {
OnRawMessageReceived(new(rawMessage, false)); OnRawMessageReceived(new RawMessageEventArgs(rawMessage, false));
var message = new IrcMessage(rawMessage); var message = new IrcMessage(rawMessage);
if (Handlers.ContainsKey(message.Command.ToUpper())) if (Handlers.ContainsKey(message.Command.ToUpper()))
{ {
@ -347,7 +347,7 @@ namespace ChatSharp
{ {
if (NetworkStream == null) if (NetworkStream == null)
{ {
OnNetworkError(new(SocketError.NotConnected)); OnNetworkError(new SocketErrorEventArgs(SocketError.NotConnected));
return; return;
} }
@ -377,7 +377,7 @@ namespace ChatSharp
{ {
if (NetworkStream == null) if (NetworkStream == null)
{ {
OnNetworkError(new(SocketError.NotConnected)); OnNetworkError(new SocketErrorEventArgs(SocketError.NotConnected));
IsWriting = false; IsWriting = false;
return; return;
} }
@ -389,7 +389,7 @@ namespace ChatSharp
catch (IOException e) catch (IOException e)
{ {
if (e.InnerException is SocketException socketException) if (e.InnerException is SocketException socketException)
OnNetworkError(new(socketException.SocketErrorCode)); OnNetworkError(new SocketErrorEventArgs(socketException.SocketErrorCode));
else else
throw; throw;
return; return;
@ -399,7 +399,7 @@ namespace ChatSharp
IsWriting = false; IsWriting = false;
} }
OnRawMessageSent(new((string)result.AsyncState, true)); OnRawMessageSent(new RawMessageEventArgs((string)result.AsyncState, true));
string nextMessage; string nextMessage;
if (!WriteQueue.IsEmpty) if (!WriteQueue.IsEmpty)

View File

@ -29,13 +29,13 @@ namespace ChatSharp
{ {
var replacedTag = rawTag.Replace(@"\:", ";"); var replacedTag = rawTag.Replace(@"\:", ";");
// The spec declares `@a=` as a tag with an empty value, while `@b;` as a tag with a null value // The spec declares `@a=` as a tag with an empty value, while `@b;` as a tag with a null value
KeyValuePair<string, string> tag = new(replacedTag, null); KeyValuePair<string, string> tag = new KeyValuePair<string, string>(replacedTag, null);
if (replacedTag.Contains("=")) if (replacedTag.Contains("="))
{ {
var key = replacedTag.Substring(0, replacedTag.IndexOf("=", StringComparison.Ordinal)); var key = replacedTag.Substring(0, replacedTag.IndexOf("=", StringComparison.Ordinal));
var value = replacedTag[(replacedTag.IndexOf("=", StringComparison.Ordinal) + 1)..]; var value = replacedTag[(replacedTag.IndexOf("=", StringComparison.Ordinal) + 1)..];
tag = new(key, value); tag = new KeyValuePair<string, string>(key, value);
} }
tags.Add(tag); tags.Add(tag);
@ -91,13 +91,13 @@ namespace ChatSharp
if (Tags.Any(tag => tag.Key == "t")) if (Tags.Any(tag => tag.Key == "t"))
{ {
var tag = Tags.SingleOrDefault(x => x.Key == "t"); var tag = Tags.SingleOrDefault(x => x.Key == "t");
Timestamp = new(tag.Value, true); Timestamp = new Timestamp(tag.Value, true);
} }
// server-time tag // server-time tag
else if (Tags.Any(tag => tag.Key == "time")) else if (Tags.Any(tag => tag.Key == "time"))
{ {
var tag = Tags.SingleOrDefault(x => x.Key == "time"); var tag = Tags.SingleOrDefault(x => x.Key == "time");
Timestamp = new(tag.Value); Timestamp = new Timestamp(tag.Value);
} }
} }

View File

@ -10,8 +10,8 @@ namespace ChatSharp
{ {
internal IrcUser() internal IrcUser()
{ {
Channels = new(); Channels = new ChannelCollection();
ChannelModes = new(); ChannelModes = new Dictionary<IrcChannel, List<char?>>();
Account = "*"; Account = "*";
} }

View File

@ -11,7 +11,7 @@ namespace ChatSharp
{ {
internal MaskCollection() internal MaskCollection()
{ {
Masks = new(); Masks = new List<Mask>();
} }
private List<Mask> Masks { get; } private List<Mask> Masks { get; }

View File

@ -8,7 +8,7 @@ namespace ChatSharp
{ {
public RequestManager() public RequestManager()
{ {
PendingOperations = new(); PendingOperations = new Dictionary<string, RequestOperation>();
} }
internal Dictionary<string, RequestOperation> PendingOperations { get; } internal Dictionary<string, RequestOperation> PendingOperations { get; }

View File

@ -11,7 +11,7 @@ namespace ChatSharp
{ {
// Guess for some defaults // Guess for some defaults
Prefixes = new[] { "ovhaq", "@+%&~" }; Prefixes = new[] { "ovhaq", "@+%&~" };
SupportedChannelModes = new(); SupportedChannelModes = new ChannelModes();
IsGuess = true; IsGuess = true;
ExtendedWho = false; ExtendedWho = false;
} }
@ -115,8 +115,8 @@ namespace ChatSharp
public List<char?> GetModesForNick(string nick) public List<char?> GetModesForNick(string nick)
{ {
var supportedPrefixes = Prefixes[1]; var supportedPrefixes = Prefixes[1];
List<char?> modeList = new(); List<char?> modeList = new List<char?>();
List<char> nickPrefixes = new(); List<char> nickPrefixes = new List<char>();
foreach (var prefix in supportedPrefixes) foreach (var prefix in supportedPrefixes)
if (nick.Contains(prefix)) if (nick.Contains(prefix))

View File

@ -13,7 +13,7 @@ namespace ChatSharp
{ {
internal UserPool() internal UserPool()
{ {
Users = new(); Users = new List<IrcUser>();
} }
private List<IrcUser> Users { get; } private List<IrcUser> Users { get; }

View File

@ -10,7 +10,7 @@ namespace ChatSharp
{ {
internal WhoIs() internal WhoIs()
{ {
User = new(); User = new IrcUser();
SecondsIdle = -1; SecondsIdle = -1;
Channels = Array.Empty<string>(); Channels = Array.Empty<string>();
} }

View File

@ -12,7 +12,7 @@ namespace ChatSharp
{ {
QueryType = -1; QueryType = -1;
Channel = "*"; Channel = "*";
User = new(); User = new IrcUser();
IP = string.Empty; IP = string.Empty;
Server = string.Empty; Server = string.Empty;
Flags = string.Empty; Flags = string.Empty;

View File

@ -1,17 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="MSTest.Sdk/3.3.1">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\ChatSharp\ChatSharp.csproj"/> <ProjectReference Include="..\ChatSharp\ChatSharp.csproj"/>
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0"/>
<PackageReference Include="MSTest.TestAdapter" Version="2.2.9"/>
<PackageReference Include="Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers" Version="0.3.310801">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="MSTest.TestFramework" Version="2.2.9"/>
</ItemGroup>
</Project> </Project>

View File

@ -1,19 +0,0 @@
using System.Reflection;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("ChatSharpTests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ChatSharpTests")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("24d593ec-ca81-41dc-9fe7-a434ddde229d")]
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]