S2C packer methods now just return a single string.
This commit is contained in:
parent
626951ad10
commit
3fc94c425e
26 changed files with 55 additions and 77 deletions
SharpChat
ChatConnection.csChatContext.csChatUser.cs
Commands
S2CPacket.csS2CPackets
AuthFailS2CPacket.csAuthSuccessS2CPacket.csBanListS2CPacket.csChannelCreateS2CPacket.csChannelDeleteS2CPacket.csChannelUpdateS2CPacket.csChatMessageAddS2CPacket.csChatMessageDeleteS2CPacket.csCommandResponseS2CPacket.csContextChannelsS2CPacket.csContextClearS2CPacket.csContextMessageS2CPacket.csContextUsersS2CPacket.csForceDisconnectS2CPacket.csPongS2CPacket.csUserChannelForceJoinS2CPacket.csUserChannelJoinS2CPacket.csUserChannelLeaveS2CPacket.csUserConnectS2CPacket.csUserDisconnectS2CPacket.csUserUpdateS2CPacket.cs
|
@ -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() {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
namespace SharpChat {
|
||||
public interface S2CPacket {
|
||||
IEnumerable<string> Pack();
|
||||
string Pack();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue