Undid the IPacketTarget system.
This commit is contained in:
parent
13ae843c8d
commit
a5089f14b8
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace SharpChat {
|
namespace SharpChat {
|
||||||
public class ChatChannel : IPacketTarget {
|
public class ChatChannel {
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string Password { get; set; } = string.Empty;
|
public string Password { get; set; } = string.Empty;
|
||||||
public bool IsTemporary { get; set; } = false;
|
public bool IsTemporary { get; set; } = false;
|
||||||
|
@ -16,8 +16,6 @@ namespace SharpChat {
|
||||||
public bool HasPassword
|
public bool HasPassword
|
||||||
=> !string.IsNullOrWhiteSpace(Password);
|
=> !string.IsNullOrWhiteSpace(Password);
|
||||||
|
|
||||||
public string TargetName => Name;
|
|
||||||
|
|
||||||
public ChatChannel() { }
|
public ChatChannel() { }
|
||||||
|
|
||||||
public ChatChannel(string name) {
|
public ChatChannel(string name) {
|
||||||
|
|
|
@ -74,7 +74,7 @@ namespace SharpChat {
|
||||||
conn.Send(new AuthSuccessPacket(user, chan, conn, maxMsgLength));
|
conn.Send(new AuthSuccessPacket(user, chan, conn, maxMsgLength));
|
||||||
conn.Send(new ContextUsersPacket(chan.GetUsers(new[] { user })));
|
conn.Send(new ContextUsersPacket(chan.GetUsers(new[] { user })));
|
||||||
|
|
||||||
foreach(IChatEvent msg in Events.GetTargetEventLog(chan.Name))
|
foreach(IChatEvent msg in Events.GetChannelEventLog(chan.Name))
|
||||||
conn.Send(new ContextMessagePacket(msg));
|
conn.Send(new ContextMessagePacket(msg));
|
||||||
|
|
||||||
lock(ChannelsAccess)
|
lock(ChannelsAccess)
|
||||||
|
@ -148,7 +148,7 @@ namespace SharpChat {
|
||||||
SendTo(user, new ContextClearPacket(chan, ContextClearMode.MessagesUsers));
|
SendTo(user, new ContextClearPacket(chan, ContextClearMode.MessagesUsers));
|
||||||
SendTo(user, new ContextUsersPacket(chan.GetUsers(new[] { user })));
|
SendTo(user, new ContextUsersPacket(chan.GetUsers(new[] { user })));
|
||||||
|
|
||||||
foreach(IChatEvent msg in Events.GetTargetEventLog(chan.Name))
|
foreach(IChatEvent msg in Events.GetChannelEventLog(chan.Name))
|
||||||
SendTo(user, new ContextMessagePacket(msg));
|
SendTo(user, new ContextMessagePacket(msg));
|
||||||
|
|
||||||
ForceChannel(user, chan);
|
ForceChannel(user, chan);
|
||||||
|
|
|
@ -78,15 +78,13 @@ namespace SharpChat {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ChatUser : BasicUser, IPacketTarget {
|
public class ChatUser : BasicUser {
|
||||||
public DateTimeOffset SilencedUntil { get; set; }
|
public DateTimeOffset SilencedUntil { get; set; }
|
||||||
|
|
||||||
private readonly List<ChatChannel> Channels = new();
|
private readonly List<ChatChannel> Channels = new();
|
||||||
|
|
||||||
public readonly ChatRateLimiter RateLimiter = new();
|
public readonly ChatRateLimiter RateLimiter = new();
|
||||||
|
|
||||||
public string TargetName => "@log";
|
|
||||||
|
|
||||||
public ChatChannel Channel => Channels.FirstOrDefault();
|
public ChatChannel Channel => Channels.FirstOrDefault();
|
||||||
|
|
||||||
// This needs to be a session thing
|
// This needs to be a session thing
|
||||||
|
|
|
@ -18,8 +18,7 @@ namespace SharpChat.Commands {
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return new ChatMessage {
|
return new ChatMessage {
|
||||||
Target = ctx.Channel,
|
ChannelName = ctx.Channel.Name,
|
||||||
TargetName = ctx.Channel.TargetName,
|
|
||||||
DateTime = DateTimeOffset.UtcNow,
|
DateTime = DateTimeOffset.UtcNow,
|
||||||
Sender = ctx.User,
|
Sender = ctx.User,
|
||||||
Text = string.Join(' ', ctx.Args),
|
Text = string.Join(' ', ctx.Args),
|
||||||
|
|
|
@ -32,16 +32,14 @@ namespace SharpChat.Commands {
|
||||||
|
|
||||||
ctx.Chat.SendTo(whisperUser, new ChatMessageAddPacket(new ChatMessage {
|
ctx.Chat.SendTo(whisperUser, new ChatMessageAddPacket(new ChatMessage {
|
||||||
DateTime = DateTimeOffset.Now,
|
DateTime = DateTimeOffset.Now,
|
||||||
Target = whisperUser,
|
ChannelName = string.Empty,
|
||||||
TargetName = whisperUser.TargetName,
|
|
||||||
Sender = ctx.User,
|
Sender = ctx.User,
|
||||||
Text = whisperStr,
|
Text = whisperStr,
|
||||||
Flags = ChatMessageFlags.Private,
|
Flags = ChatMessageFlags.Private,
|
||||||
}));
|
}));
|
||||||
ctx.Chat.SendTo(ctx.User, new ChatMessageAddPacket(new ChatMessage {
|
ctx.Chat.SendTo(ctx.User, new ChatMessageAddPacket(new ChatMessage {
|
||||||
DateTime = DateTimeOffset.Now,
|
DateTime = DateTimeOffset.Now,
|
||||||
Target = whisperUser,
|
ChannelName = string.Empty,
|
||||||
TargetName = whisperUser.TargetName,
|
|
||||||
Sender = ctx.User,
|
Sender = ctx.User,
|
||||||
Text = $"{whisperUser.DisplayName} {whisperStr}",
|
Text = $"{whisperUser.DisplayName} {whisperStr}",
|
||||||
Flags = ChatMessageFlags.Private,
|
Flags = ChatMessageFlags.Private,
|
||||||
|
|
|
@ -7,6 +7,6 @@ namespace SharpChat.EventStorage {
|
||||||
void AddEvent(IChatEvent evt);
|
void AddEvent(IChatEvent evt);
|
||||||
void RemoveEvent(IChatEvent evt);
|
void RemoveEvent(IChatEvent evt);
|
||||||
IChatEvent GetEvent(long seqId);
|
IChatEvent GetEvent(long seqId);
|
||||||
IEnumerable<IChatEvent> GetTargetEventLog(string target, int amount = 20, int offset = 0);
|
IEnumerable<IChatEvent> GetChannelEventLog(string channelName, int amount = 20, int offset = 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ namespace SharpChat.EventStorage {
|
||||||
new MySqlParameter("id", evt.SequenceId),
|
new MySqlParameter("id", evt.SequenceId),
|
||||||
new MySqlParameter("created", evt.DateTime.ToUnixTimeSeconds()),
|
new MySqlParameter("created", evt.DateTime.ToUnixTimeSeconds()),
|
||||||
new MySqlParameter("type", evt.GetType().FullName),
|
new MySqlParameter("type", evt.GetType().FullName),
|
||||||
new MySqlParameter("target", evt.Target.TargetName),
|
new MySqlParameter("target", evt.ChannelName),
|
||||||
new MySqlParameter("flags", (byte)evt.Flags),
|
new MySqlParameter("flags", (byte)evt.Flags),
|
||||||
new MySqlParameter("data", JsonSerializer.SerializeToUtf8Bytes(evt, evt.GetType())),
|
new MySqlParameter("data", JsonSerializer.SerializeToUtf8Bytes(evt, evt.GetType())),
|
||||||
new MySqlParameter("sender", evt.Sender?.UserId < 1 ? null : (long?)evt.Sender.UserId),
|
new MySqlParameter("sender", evt.Sender?.UserId < 1 ? null : (long?)evt.Sender.UserId),
|
||||||
|
@ -67,7 +67,7 @@ namespace SharpChat.EventStorage {
|
||||||
Type evtType = Type.GetType(Encoding.ASCII.GetString((byte[])reader["event_type"]));
|
Type evtType = Type.GetType(Encoding.ASCII.GetString((byte[])reader["event_type"]));
|
||||||
IChatEvent evt = JsonSerializer.Deserialize(Encoding.ASCII.GetString((byte[])reader["event_data"]), evtType) as IChatEvent;
|
IChatEvent evt = JsonSerializer.Deserialize(Encoding.ASCII.GetString((byte[])reader["event_data"]), evtType) as IChatEvent;
|
||||||
evt.SequenceId = reader.GetInt64("event_id");
|
evt.SequenceId = reader.GetInt64("event_id");
|
||||||
evt.TargetName = Encoding.ASCII.GetString((byte[])reader["event_target"]);
|
evt.ChannelName = Encoding.ASCII.GetString((byte[])reader["event_target"]);
|
||||||
evt.Flags = (ChatMessageFlags)reader.GetByte("event_flags");
|
evt.Flags = (ChatMessageFlags)reader.GetByte("event_flags");
|
||||||
evt.DateTime = DateTimeOffset.FromUnixTimeSeconds(reader.GetInt32("event_created"));
|
evt.DateTime = DateTimeOffset.FromUnixTimeSeconds(reader.GetInt32("event_created"));
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ namespace SharpChat.EventStorage {
|
||||||
return evt;
|
return evt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IChatEvent> GetTargetEventLog(string target, int amount = 20, int offset = 0) {
|
public IEnumerable<IChatEvent> GetChannelEventLog(string channelName, int amount = 20, int offset = 0) {
|
||||||
List<IChatEvent> events = new();
|
List<IChatEvent> events = new();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -98,7 +98,7 @@ namespace SharpChat.EventStorage {
|
||||||
+ " AND `event_id` > @offset"
|
+ " AND `event_id` > @offset"
|
||||||
+ " ORDER BY `event_id` DESC"
|
+ " ORDER BY `event_id` DESC"
|
||||||
+ " LIMIT @amount",
|
+ " LIMIT @amount",
|
||||||
new MySqlParameter("target", target),
|
new MySqlParameter("target", channelName),
|
||||||
new MySqlParameter("amount", amount),
|
new MySqlParameter("amount", amount),
|
||||||
new MySqlParameter("offset", offset)
|
new MySqlParameter("offset", offset)
|
||||||
);
|
);
|
||||||
|
|
|
@ -23,8 +23,8 @@ namespace SharpChat.EventStorage {
|
||||||
Events.Remove(evt.SequenceId);
|
Events.Remove(evt.SequenceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<IChatEvent> GetTargetEventLog(string target, int amount = 20, int offset = 0) {
|
public IEnumerable<IChatEvent> GetChannelEventLog(string channelName, int amount = 20, int offset = 0) {
|
||||||
IEnumerable<IChatEvent> subset = Events.Values.Where(ev => ev.TargetName == target);
|
IEnumerable<IChatEvent> subset = Events.Values.Where(ev => ev.ChannelName == channelName);
|
||||||
|
|
||||||
int start = subset.Count() - offset - amount;
|
int start = subset.Count() - offset - amount;
|
||||||
if(start < 0) {
|
if(start < 0) {
|
||||||
|
|
|
@ -7,10 +7,7 @@ namespace SharpChat.Events {
|
||||||
public BasicUser Sender { get; set; }
|
public BasicUser Sender { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public IPacketTarget Target { get; set; }
|
public string ChannelName { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public string TargetName { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public DateTimeOffset DateTime { get; set; }
|
public DateTimeOffset DateTime { get; set; }
|
||||||
|
|
|
@ -13,8 +13,7 @@ namespace SharpChat.Events {
|
||||||
public interface IChatEvent {
|
public interface IChatEvent {
|
||||||
DateTimeOffset DateTime { get; set; }
|
DateTimeOffset DateTime { get; set; }
|
||||||
BasicUser Sender { get; set; }
|
BasicUser Sender { get; set; }
|
||||||
IPacketTarget Target { get; set; }
|
string ChannelName { get; set; }
|
||||||
string TargetName { get; set; }
|
|
||||||
ChatMessageFlags Flags { get; set; }
|
ChatMessageFlags Flags { get; set; }
|
||||||
long SequenceId { get; set; }
|
long SequenceId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,7 @@ namespace SharpChat.Events {
|
||||||
public BasicUser Sender { get; set; }
|
public BasicUser Sender { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public IPacketTarget Target { get; set; }
|
public string ChannelName { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public string TargetName { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public ChatMessageFlags Flags { get; set; } = ChatMessageFlags.Log;
|
public ChatMessageFlags Flags { get; set; } = ChatMessageFlags.Log;
|
||||||
|
@ -22,11 +19,10 @@ namespace SharpChat.Events {
|
||||||
public long SequenceId { get; set; }
|
public long SequenceId { get; set; }
|
||||||
|
|
||||||
public UserChannelJoinEvent() { }
|
public UserChannelJoinEvent() { }
|
||||||
public UserChannelJoinEvent(DateTimeOffset joined, BasicUser user, IPacketTarget target) {
|
public UserChannelJoinEvent(DateTimeOffset joined, BasicUser user, ChatChannel channel) {
|
||||||
DateTime = joined;
|
DateTime = joined;
|
||||||
Sender = user;
|
Sender = user;
|
||||||
Target = target;
|
ChannelName = channel.Name;
|
||||||
TargetName = target?.TargetName;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,7 @@ namespace SharpChat.Events {
|
||||||
public BasicUser Sender { get; set; }
|
public BasicUser Sender { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public IPacketTarget Target { get; set; }
|
public string ChannelName { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public string TargetName { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public ChatMessageFlags Flags { get; set; } = ChatMessageFlags.Log;
|
public ChatMessageFlags Flags { get; set; } = ChatMessageFlags.Log;
|
||||||
|
@ -22,11 +19,10 @@ namespace SharpChat.Events {
|
||||||
public long SequenceId { get; set; }
|
public long SequenceId { get; set; }
|
||||||
|
|
||||||
public UserChannelLeaveEvent() { }
|
public UserChannelLeaveEvent() { }
|
||||||
public UserChannelLeaveEvent(DateTimeOffset parted, BasicUser user, IPacketTarget target) {
|
public UserChannelLeaveEvent(DateTimeOffset parted, BasicUser user, ChatChannel channel) {
|
||||||
DateTime = parted;
|
DateTime = parted;
|
||||||
Sender = user;
|
Sender = user;
|
||||||
Target = target;
|
ChannelName = channel.Name;
|
||||||
TargetName = target?.TargetName;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,7 @@ namespace SharpChat.Events {
|
||||||
public BasicUser Sender { get; set; }
|
public BasicUser Sender { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public IPacketTarget Target { get; set; }
|
public string ChannelName { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public string TargetName { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public ChatMessageFlags Flags { get; set; } = ChatMessageFlags.Log;
|
public ChatMessageFlags Flags { get; set; } = ChatMessageFlags.Log;
|
||||||
|
@ -22,11 +19,10 @@ namespace SharpChat.Events {
|
||||||
public long SequenceId { get; set; }
|
public long SequenceId { get; set; }
|
||||||
|
|
||||||
public UserConnectEvent() { }
|
public UserConnectEvent() { }
|
||||||
public UserConnectEvent(DateTimeOffset joined, BasicUser user, IPacketTarget target) {
|
public UserConnectEvent(DateTimeOffset joined, BasicUser user, ChatChannel channel) {
|
||||||
DateTime = joined;
|
DateTime = joined;
|
||||||
Sender = user;
|
Sender = user;
|
||||||
Target = target;
|
ChannelName = channel.Name;
|
||||||
TargetName = target?.TargetName;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,10 +12,7 @@ namespace SharpChat.Events {
|
||||||
public BasicUser Sender { get; set; }
|
public BasicUser Sender { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public IPacketTarget Target { get; set; }
|
public string ChannelName { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public string TargetName { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public ChatMessageFlags Flags { get; set; } = ChatMessageFlags.Log;
|
public ChatMessageFlags Flags { get; set; } = ChatMessageFlags.Log;
|
||||||
|
@ -27,11 +24,10 @@ namespace SharpChat.Events {
|
||||||
public UserDisconnectReason Reason { get; set; }
|
public UserDisconnectReason Reason { get; set; }
|
||||||
|
|
||||||
public UserDisconnectEvent() { }
|
public UserDisconnectEvent() { }
|
||||||
public UserDisconnectEvent(DateTimeOffset parted, BasicUser user, IPacketTarget target, UserDisconnectReason reason) {
|
public UserDisconnectEvent(DateTimeOffset parted, BasicUser user, ChatChannel channel, UserDisconnectReason reason) {
|
||||||
DateTime = parted;
|
DateTime = parted;
|
||||||
Sender = user;
|
Sender = user;
|
||||||
Target = target;
|
ChannelName = channel.Name;
|
||||||
TargetName = target?.TargetName;
|
|
||||||
Reason = reason;
|
Reason = reason;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
namespace SharpChat {
|
|
||||||
public interface IPacketTarget {
|
|
||||||
string TargetName { get; }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -88,8 +88,7 @@ namespace SharpChat.PacketHandlers {
|
||||||
}
|
}
|
||||||
|
|
||||||
message ??= new ChatMessage {
|
message ??= new ChatMessage {
|
||||||
Target = channel,
|
ChannelName = channel.Name,
|
||||||
TargetName = channel.TargetName,
|
|
||||||
DateTime = DateTimeOffset.UtcNow,
|
DateTime = DateTimeOffset.UtcNow,
|
||||||
Sender = user,
|
Sender = user,
|
||||||
Text = messageText,
|
Text = messageText,
|
||||||
|
|
Loading…
Reference in a new issue