S2C packer methods now just return a single string.

This commit is contained in:
flash 2025-04-25 20:33:42 +00:00
parent 626951ad10
commit 3fc94c425e
Signed by: flash
GPG key ID: 2C9C2C574D47FE3E
26 changed files with 55 additions and 77 deletions

View file

@ -45,12 +45,9 @@ namespace SharpChat {
if(!Socket.IsAvailable)
return;
IEnumerable<string> data = packet.Pack();
if(data != null)
foreach(string line in data)
if(!string.IsNullOrWhiteSpace(line))
Socket.Send(line);
string data = packet.Pack();
if(!string.IsNullOrWhiteSpace(data))
Socket.Send(data);
}
public void BumpPing() {

View file

@ -138,7 +138,6 @@ namespace SharpChat {
string? statusText = null,
int? rank = null,
ChatUserPermissions? perms = null,
bool? isSuper = null,
bool silent = false
) {
ArgumentNullException.ThrowIfNull(user);
@ -153,7 +152,7 @@ namespace SharpChat {
if(nickName != null && !user.NickName.Equals(nickName)) {
if(!silent)
previousName = string.IsNullOrWhiteSpace(user.NickName) ? user.UserName : user.NickName;
previousName = user.LegacyName;
user.NickName = nickName;
hasChanged = true;
@ -184,13 +183,12 @@ namespace SharpChat {
hasChanged = true;
}
if(isSuper.HasValue) {
user.IsSuper = isSuper.Value;
hasChanged = true;
}
if(hasChanged) {
if(!string.IsNullOrWhiteSpace(previousName))
SendToUserChannels(user, new CommandResponseS2CPacket(RandomSnowflake.Next(), LCR.NICKNAME_CHANGE, false, previousName, user.LegacyNameWithStatus));
if(hasChanged)
SendToUserChannels(user, new UserUpdateS2CPacket(RandomSnowflake.Next(), user, previousName));
SendToUserChannels(user, new UserUpdateS2CPacket(user));
}
}
public void BanUser(ChatUser user, TimeSpan duration, UserDisconnectReason reason = UserDisconnectReason.Kicked) {

View file

@ -22,7 +22,6 @@ namespace SharpChat {
public ChatColour Colour { get; set; } = colour;
public int Rank { get; set; } = rank;
public ChatUserPermissions Permissions { get; set; } = perms;
public bool IsSuper { get; set; }
public string NickName { get; set; } = nickName;
public ChatUserStatus Status { get; set; } = status;
public string StatusText { get; set; } = statusText;

View file

@ -29,7 +29,7 @@ namespace SharpChat.Commands {
return;
}
if(!ctx.User.IsSuper && banUser.Rank >= ctx.User.Rank && banUser != ctx.User) {
if(banUser.Rank >= ctx.User.Rank && banUser != ctx.User) {
ctx.Chat.SendTo(ctx.User, new CommandResponseS2CPacket(msgId, LCR.KICK_NOT_ALLOWED, true, banUser.LegacyName));
return;
}

View file

@ -1,5 +1,5 @@
namespace SharpChat {
public interface S2CPacket {
IEnumerable<string> Pack();
string Pack();
}
}

View file

@ -19,7 +19,7 @@ namespace SharpChat.S2CPackets {
BanInfo = fbi ?? throw new ArgumentNullException(nameof(fbi));
}
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('1');
@ -47,7 +47,7 @@ namespace SharpChat.S2CPackets {
sb.Append(BanInfo?.ExpiresAt.ToUnixTimeSeconds() ?? 0);
}
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -9,7 +9,7 @@ namespace SharpChat.S2CPackets {
public ChatUser User { get; private set; } = user ?? throw new ArgumentNullException(nameof(user));
public ChatChannel Channel { get; private set; } = channel ?? throw new ArgumentNullException(nameof(channel));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('1');
@ -20,7 +20,7 @@ namespace SharpChat.S2CPackets {
sb.Append('\t');
sb.Append(maxMsgLength);
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -8,7 +8,7 @@ namespace SharpChat.S2CPackets {
) : S2CPacket {
public IEnumerable<MisuzuBanInfo> Bans { get; private set; } = bans ?? throw new ArgumentNullException(nameof(bans));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('2');
@ -28,7 +28,7 @@ namespace SharpChat.S2CPackets {
sb.Append(msgId);
sb.Append("\t10010");
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -4,7 +4,7 @@ namespace SharpChat.S2CPackets {
public class ChannelCreateS2CPacket(ChatChannel channel) : S2CPacket {
public ChatChannel Channel { get; private set; } = channel ?? throw new ArgumentNullException(nameof(channel));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('4');
@ -13,7 +13,7 @@ namespace SharpChat.S2CPackets {
sb.Append('\t');
sb.Append(Channel.Pack());
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -4,7 +4,7 @@ namespace SharpChat.S2CPackets {
public class ChannelDeleteS2CPacket(ChatChannel channel) : S2CPacket {
public ChatChannel Channel { get; private set; } = channel ?? throw new ArgumentNullException(nameof(channel));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('4');
@ -13,7 +13,7 @@ namespace SharpChat.S2CPackets {
sb.Append('\t');
sb.Append(Channel.Name);
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -5,7 +5,7 @@ namespace SharpChat.S2CPackets {
public string PreviousName { get; private set; } = previousName ?? throw new ArgumentNullException(nameof(previousName));
public ChatChannel Channel { get; private set; } = channel ?? throw new ArgumentNullException(nameof(channel));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('4');
@ -16,7 +16,7 @@ namespace SharpChat.S2CPackets {
sb.Append('\t');
sb.Append(Channel.Pack());
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -11,7 +11,7 @@ namespace SharpChat.S2CPackets {
) : S2CPacket {
public string Text { get; } = text ?? throw new ArgumentNullException(nameof(text));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('2');
@ -45,7 +45,7 @@ namespace SharpChat.S2CPackets {
isPrivate ? '1' : '0'
);
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -2,14 +2,14 @@
namespace SharpChat.S2CPackets {
public class ChatMessageDeleteS2CPacket(long eventId) : S2CPacket {
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('6');
sb.Append('\t');
sb.Append(eventId);
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -9,7 +9,7 @@ namespace SharpChat.S2CPackets {
) : S2CPacket {
public string StringId { get; private set; } = stringId ?? throw new ArgumentNullException(nameof(stringId));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
if(StringId == LCR.WELCOME) {
@ -52,7 +52,7 @@ namespace SharpChat.S2CPackets {
Flags.HasFlag(ChatMessageFlags.Private) ? '1' : '0'
);*/
yield return sb.ToString();
return sb.ToString();
}
}
@ -86,5 +86,6 @@ namespace SharpChat.S2CPackets {
public const string USER_NOT_BANNED = "notban";
public const string USER_UNBANNED = "unban";
public const string FLOOD_WARN = "flwarn";
public const string NICKNAME_CHANGE = "nick";
}
}

View file

@ -4,7 +4,7 @@ namespace SharpChat.S2CPackets {
public class ContextChannelsS2CPacket(IEnumerable<ChatChannel> channels) : S2CPacket {
public IEnumerable<ChatChannel> Channels { get; private set; } = channels?.Where(c => c != null) ?? throw new ArgumentNullException(nameof(channels));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('7');
@ -18,7 +18,7 @@ namespace SharpChat.S2CPackets {
sb.Append(channel.Pack());
}
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -10,14 +10,14 @@ namespace SharpChat.S2CPackets {
}
public class ContextClearS2CPacket(ContextClearMode mode) : S2CPacket {
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('8');
sb.Append('\t');
sb.Append((int)mode);
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -8,7 +8,7 @@ namespace SharpChat.S2CPackets
private const string V1_CHATBOT = "-1\tChatBot\tinherit\t\t";
public IEnumerable<string> Pack() {
public string Pack() {
bool isAction = Event.Flags.HasFlag(StoredEventFlags.Action);
bool isBroadcast = Event.Flags.HasFlag(StoredEventFlags.Broadcast);
bool isPrivate = Event.Flags.HasFlag(StoredEventFlags.Private);
@ -106,7 +106,7 @@ namespace SharpChat.S2CPackets
isPrivate ? '1' : '0'
);
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -4,7 +4,7 @@ namespace SharpChat.S2CPackets {
public class ContextUsersS2CPacket(IEnumerable<ChatUser> users) : S2CPacket {
public IEnumerable<ChatUser> Users { get; private set; } = users?.Where(u => u != null) ?? throw new ArgumentNullException(nameof(users));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('7');
@ -20,7 +20,7 @@ namespace SharpChat.S2CPackets {
sb.Append('1'); // visibility flag
}
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -20,7 +20,7 @@ namespace SharpChat.S2CPackets {
}
}
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('9');
@ -35,7 +35,7 @@ namespace SharpChat.S2CPackets {
sb.Append(Expires.ToUnixTimeSeconds());
}
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -1,7 +1,7 @@
namespace SharpChat.S2CPackets {
public class PongS2CPacket : S2CPacket {
public IEnumerable<string> Pack() {
yield return "0\tpong";
public string Pack() {
return "0\tpong";
}
}
}

View file

@ -4,7 +4,7 @@ namespace SharpChat.S2CPackets {
public class UserChannelForceJoinS2CPacket(ChatChannel channel) : S2CPacket {
public ChatChannel Channel { get; private set; } = channel ?? throw new ArgumentNullException(nameof(channel));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('5');
@ -13,7 +13,7 @@ namespace SharpChat.S2CPackets {
sb.Append('\t');
sb.Append(Channel.Name);
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -4,7 +4,7 @@ namespace SharpChat.S2CPackets {
public class UserChannelJoinS2CPacket(long msgId, ChatUser user) : S2CPacket {
public ChatUser User { get; private set; } = user ?? throw new ArgumentNullException(nameof(user));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('5');
@ -15,7 +15,7 @@ namespace SharpChat.S2CPackets {
sb.Append('\t');
sb.Append(msgId);
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -4,7 +4,7 @@ namespace SharpChat.S2CPackets {
public class UserChannelLeaveS2CPacket(long msgId, ChatUser user) : S2CPacket {
public ChatUser User { get; private set; } = user ?? throw new ArgumentNullException(nameof(user));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('5');
@ -15,7 +15,7 @@ namespace SharpChat.S2CPackets {
sb.Append('\t');
sb.Append(msgId);
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -4,7 +4,7 @@ namespace SharpChat.S2CPackets {
public class UserConnectS2CPacket(long msgId, DateTimeOffset joined, ChatUser user) : S2CPacket {
public ChatUser User { get; private set; } = user ?? throw new ArgumentNullException(nameof(user));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('1');
@ -15,7 +15,7 @@ namespace SharpChat.S2CPackets {
sb.Append('\t');
sb.Append(msgId);
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -16,7 +16,7 @@ namespace SharpChat.S2CPackets {
) : S2CPacket {
public ChatUser User { get; private set; } = user ?? throw new ArgumentNullException(nameof(user));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
sb.Append('3');
@ -47,7 +47,7 @@ namespace SharpChat.S2CPackets {
sb.Append('\t');
sb.Append(msgId);
yield return sb.ToString();
return sb.ToString();
}
}
}

View file

@ -1,34 +1,17 @@
using System.Text;
namespace SharpChat.S2CPackets {
public class UserUpdateS2CPacket(long msgId, ChatUser user, string previousName = "") : S2CPacket {
public class UserUpdateS2CPacket(ChatUser user) : S2CPacket {
public ChatUser User { get; private set; } = user ?? throw new ArgumentNullException(nameof(user));
public IEnumerable<string> Pack() {
public string Pack() {
StringBuilder sb = new();
bool isSilent = string.IsNullOrEmpty(previousName);
if(!isSilent) {
sb.Append('2');
sb.Append('\t');
sb.Append(DateTimeOffset.Now.ToUnixTimeSeconds());
sb.Append("\t-1\t0\fnick\f");
sb.Append(previousName);
sb.Append('\f');
sb.Append(User.LegacyNameWithStatus);
sb.Append('\t');
sb.Append(msgId);
sb.Append("\t10010");
yield return sb.ToString();
sb.Clear();
}
sb.Append("10");
sb.Append('\t');
sb.Append(User.Pack());
yield return sb.ToString();
return sb.ToString();
}
}
}