Use interface instead of abstract classes as base for Sock Chat S2C packets.
This commit is contained in:
parent
4ace355374
commit
651c3f127d
56 changed files with 390 additions and 181 deletions
|
@ -1,7 +1,7 @@
|
|||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class AuthFailS2CPacket : SockChatS2CPacket {
|
||||
public class AuthFailS2CPacket : ISockChatS2CPacket {
|
||||
public enum FailReason {
|
||||
AuthInvalid,
|
||||
MaxSessions,
|
||||
|
@ -21,7 +21,7 @@ namespace SharpChat.SockChat.PacketsS2C {
|
|||
Expires = expires.Year >= 2100 ? -1 : expires.ToUnixTimeSeconds();
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
string packet = string.Format("1\tn\t{0}fail", Reason switch {
|
||||
FailReason.AuthInvalid => "auth",
|
||||
FailReason.MaxSessions => "sock",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class AuthSuccessS2CPacket : SockChatS2CPacket {
|
||||
public class AuthSuccessS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long UserId;
|
||||
private readonly string UserName;
|
||||
private readonly Colour UserColour;
|
||||
|
@ -26,7 +26,7 @@
|
|||
MaxMessageLength = maxMsgLength;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"1\ty\t{0}\t{1}\t{2}\t{3} {4} {5} {6} {7}\t{8}\t{9}",
|
||||
UserId,
|
||||
|
|
|
@ -1,14 +1,19 @@
|
|||
using System.Text;
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class BanListResponseS2CPacket : SockChatTimedS2CPacket {
|
||||
public class BanListResponseS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string[] Bans;
|
||||
|
||||
public BanListResponseS2CPacket(string[] bans) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
Bans = bans;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
StringBuilder sb = new();
|
||||
|
||||
sb.AppendFormat("2\t{0}\t-1\t0\fbanlist\f", TimeStamp.ToUnixTimeSeconds());
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelCreateResponseS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelCreateResponseS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string ChannelName;
|
||||
|
||||
public ChannelCreateResponseS2CPacket(string channelName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
ChannelName = channelName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t0\fcrchan\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelCreateS2CPacket : SockChatS2CPacket {
|
||||
public class ChannelCreateS2CPacket : ISockChatS2CPacket {
|
||||
private readonly string ChannelName;
|
||||
private readonly bool ChannelHasPassword;
|
||||
private readonly bool ChannelIsTemporary;
|
||||
|
@ -14,7 +14,7 @@
|
|||
ChannelIsTemporary = channelIsTemporary;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"4\t0\t{0}\t{1}\t{2}",
|
||||
SockChatUtility.SanitiseChannelName(ChannelName),
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelDeleteNotAllowedErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelDeleteNotAllowedErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string ChannelName;
|
||||
|
||||
public ChannelDeleteNotAllowedErrorS2CPacket(string channelName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
ChannelName = channelName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\fndchan\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelDeleteResponseS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelDeleteResponseS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string ChannelName;
|
||||
|
||||
public ChannelDeleteResponseS2CPacket(string channelName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
ChannelName = channelName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t0\fdelchan\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelDeleteS2CPacket : SockChatS2CPacket {
|
||||
public class ChannelDeleteS2CPacket : ISockChatS2CPacket {
|
||||
private readonly string ChannelName;
|
||||
|
||||
public ChannelDeleteS2CPacket(string channelName) {
|
||||
ChannelName = channelName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"4\t2\t{0}",
|
||||
SockChatUtility.SanitiseChannelName(ChannelName)
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelNameFormatErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
public override string Pack() {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelNameFormatErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
|
||||
public ChannelNameFormatErrorS2CPacket() {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
}
|
||||
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\finchan\t{1}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelNameInUseErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelNameInUseErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string ChannelName;
|
||||
|
||||
public ChannelNameInUseErrorS2CPacket(string channelName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
ChannelName = channelName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\fnischan\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelNotFoundErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelNotFoundErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string ChannelName;
|
||||
|
||||
public ChannelNotFoundErrorS2CPacket(string channelName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
ChannelName = channelName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\fnochan\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelPasswordChangedResponseS2CPacket : SockChatTimedS2CPacket {
|
||||
public override string Pack() {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelPasswordChangedResponseS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
|
||||
public ChannelPasswordChangedResponseS2CPacket() {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
}
|
||||
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t0\fcpwdchan\t{1}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelPasswordWrongErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelPasswordWrongErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string ChannelName;
|
||||
|
||||
public ChannelPasswordWrongErrorS2CPacket(string channelName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
ChannelName = channelName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\fipwchan\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelRankChangedResponseS2CPacket : SockChatTimedS2CPacket {
|
||||
public override string Pack() {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelRankChangedResponseS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
|
||||
public ChannelRankChangedResponseS2CPacket() {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
}
|
||||
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t0\fcprivchan\t{1}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelRankTooHighErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
public override string Pack() {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelRankTooHighErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
|
||||
public ChannelRankTooHighErrorS2CPacket() {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
}
|
||||
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\frankerr\t{1}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelRankTooLowErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelRankTooLowErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string ChannelName;
|
||||
|
||||
public ChannelRankTooLowErrorS2CPacket(string channelName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
ChannelName = channelName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\fipchan\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelUpdateS2CPacket : SockChatS2CPacket {
|
||||
public class ChannelUpdateS2CPacket : ISockChatS2CPacket {
|
||||
private readonly string ChannelNamePrevious;
|
||||
private readonly string ChannelNameNew;
|
||||
private readonly bool ChannelHasPassword;
|
||||
|
@ -17,7 +17,7 @@
|
|||
ChannelIsTemporary = channelIsTemporary;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"4\t1\t{0}\t{1}\t{2}\t{3}",
|
||||
SockChatUtility.SanitiseChannelName(ChannelNamePrevious),
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
using System.Text;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ChannelsPopulateS2CPacket : SockChatS2CPacket {
|
||||
public class ChannelsPopulateS2CPacket : ISockChatS2CPacket {
|
||||
public record ListEntry(string Name, bool HasPassword, bool IsTemporary);
|
||||
|
||||
private readonly ListEntry[] Entries;
|
||||
|
@ -10,7 +10,7 @@ namespace SharpChat.SockChat.PacketsS2C {
|
|||
Entries = entries;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
StringBuilder sb = new();
|
||||
|
||||
sb.AppendFormat("7\t2\t{0}", Entries.Length);
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class CommandFormatErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
public override string Pack() {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class CommandFormatErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
|
||||
public CommandFormatErrorS2CPacket() {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
}
|
||||
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\fcmdna\t{1}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class CommandNotAllowedErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class CommandNotAllowedErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string CommandName;
|
||||
|
||||
public CommandNotAllowedErrorS2CPacket(string commandName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
CommandName = commandName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\fcmdna\f/{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ContextClearS2CPacket : SockChatS2CPacket {
|
||||
public class ContextClearS2CPacket : ISockChatS2CPacket {
|
||||
public enum ClearMode {
|
||||
Messages = 0,
|
||||
Users = 1,
|
||||
|
@ -14,7 +14,7 @@
|
|||
Mode = mode;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format("8\t{0}", (int)Mode);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class FloodWarningS2CPacket : SockChatTimedS2CPacket {
|
||||
public override string Pack() {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class FloodWarningS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
|
||||
public FloodWarningS2CPacket() {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
}
|
||||
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t0\fflwarn\t{1}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class ForceDisconnectS2CPacket : SockChatS2CPacket {
|
||||
public class ForceDisconnectS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long Expires;
|
||||
|
||||
public ForceDisconnectS2CPacket() { }
|
||||
public ForceDisconnectS2CPacket() {
|
||||
}
|
||||
|
||||
public ForceDisconnectS2CPacket(DateTimeOffset expires) {
|
||||
Expires = expires.Year >= 2100 ? -1 : expires.ToUnixTimeSeconds();
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
if(Expires != 0)
|
||||
return string.Format("9\t1\t{0}", Expires);
|
||||
|
||||
|
|
5
SharpChat.SockChat/PacketsS2C/ISockChatS2CPacket.cs
Normal file
5
SharpChat.SockChat/PacketsS2C/ISockChatS2CPacket.cs
Normal file
|
@ -0,0 +1,5 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public interface ISockChatS2CPacket {
|
||||
string Pack();
|
||||
}
|
||||
}
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class KickBanNoRecordErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class KickBanNoRecordErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string TargetName;
|
||||
|
||||
public KickBanNoRecordErrorS2CPacket(string targetName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
TargetName = targetName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\fnotban\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class KickBanNotAllowedErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class KickBanNotAllowedErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string UserName;
|
||||
|
||||
public KickBanNotAllowedErrorS2CPacket(string userName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
UserName = userName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\fkickna\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class MOTDS2CPacket : SockChatTimedS2CPacket {
|
||||
public class MOTDS2CPacket : ISockChatS2CPacket {
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string Body;
|
||||
|
||||
public MOTDS2CPacket(DateTimeOffset timeStamp, string body) : base(timeStamp) {
|
||||
public MOTDS2CPacket(DateTimeOffset timeStamp, string body) {
|
||||
TimeStamp = timeStamp;
|
||||
Body = body;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\fsay\f{1}\twelcome\t0\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class MessageAddLogS2CPacket : SockChatTimedS2CPacket {
|
||||
public class MessageAddLogS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly long UserId;
|
||||
private readonly string UserName;
|
||||
private readonly Colour UserColour;
|
||||
|
@ -26,7 +28,9 @@ namespace SharpChat.SockChat.PacketsS2C {
|
|||
bool isPrivate,
|
||||
bool isBroadcast,
|
||||
bool notify
|
||||
) : base(messageId, timeStamp) {
|
||||
) {
|
||||
MessageId = messageId;
|
||||
TimeStamp = timeStamp;
|
||||
UserId = userId < 0 ? -1 : userId;
|
||||
UserName = userName;
|
||||
UserColour = userColour;
|
||||
|
@ -39,7 +43,7 @@ namespace SharpChat.SockChat.PacketsS2C {
|
|||
Notify = notify;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
string body = SockChatUtility.SanitiseMessageBody(Body);
|
||||
if(IsAction)
|
||||
body = string.Format("<i>{0}</i>", body);
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class MessageAddS2CPacket : SockChatTimedS2CPacket {
|
||||
public class MessageAddS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly long UserId;
|
||||
private readonly string Body;
|
||||
private readonly bool IsAction;
|
||||
|
@ -14,14 +16,16 @@ namespace SharpChat.SockChat.PacketsS2C {
|
|||
string body,
|
||||
bool isAction,
|
||||
bool isPrivate
|
||||
) : base(messageId, timeStamp) {
|
||||
) {
|
||||
MessageId = messageId;
|
||||
TimeStamp = timeStamp;
|
||||
UserId = userId < 0 ? -1 : userId;
|
||||
Body = body;
|
||||
IsAction = isAction;
|
||||
IsPrivate = isPrivate;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
string body = SockChatUtility.SanitiseMessageBody(Body);
|
||||
if(IsAction)
|
||||
body = string.Format("<i>{0}</i>", body);
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class MessageBroadcastS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class MessageBroadcastS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string Body;
|
||||
|
||||
public MessageBroadcastS2CPacket(string body) {
|
||||
public MessageBroadcastS2CPacket(long messageId, DateTimeOffset timeStamp, string body) {
|
||||
MessageId = messageId;
|
||||
TimeStamp = timeStamp;
|
||||
Body = body;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t0\fsay\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class MessageDeleteNotAllowedErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
public override string Pack() {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class MessageDeleteNotAllowedErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
|
||||
public MessageDeleteNotAllowedErrorS2CPacket() {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
}
|
||||
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\fdelerr\t{1}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class MessageDeleteS2CPacket : SockChatS2CPacket {
|
||||
public class MessageDeleteS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long DeletedMessageId;
|
||||
|
||||
public MessageDeleteS2CPacket(long deletedMessageId) {
|
||||
DeletedMessageId = deletedMessageId;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format("6\t{0}", DeletedMessageId);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class PardonResponseS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class PardonResponseS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string Subject;
|
||||
|
||||
public PardonResponseS2CPacket(string subject) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
Subject = subject;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t0\funban\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class PongS2CPacket : SockChatS2CPacket {
|
||||
public override string Pack() {
|
||||
public class PongS2CPacket : ISockChatS2CPacket {
|
||||
public string Pack() {
|
||||
return "0\tpong";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public abstract class SockChatS2CPacket {
|
||||
protected readonly long MessageId;
|
||||
|
||||
public SockChatS2CPacket() {
|
||||
MessageId = SharpId.Next();
|
||||
}
|
||||
|
||||
public SockChatS2CPacket(long messageId) {
|
||||
MessageId = messageId;
|
||||
}
|
||||
|
||||
public abstract string Pack();
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public abstract class SockChatTimedS2CPacket : SockChatS2CPacket {
|
||||
protected readonly DateTimeOffset TimeStamp;
|
||||
|
||||
public SockChatTimedS2CPacket() : base() {
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
}
|
||||
|
||||
public SockChatTimedS2CPacket(DateTimeOffset timeStamp) : base() {
|
||||
TimeStamp = timeStamp;
|
||||
}
|
||||
|
||||
public SockChatTimedS2CPacket(long messageId, DateTimeOffset timeStamp) : base(messageId) {
|
||||
TimeStamp = timeStamp;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,12 +1,12 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserChannelForceJoinS2CPacket : SockChatS2CPacket {
|
||||
public class UserChannelForceJoinS2CPacket : ISockChatS2CPacket {
|
||||
private readonly string ChannelName;
|
||||
|
||||
public UserChannelForceJoinS2CPacket(string channelName) {
|
||||
ChannelName = channelName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"5\t2\t{0}",
|
||||
SockChatUtility.SanitiseChannelName(ChannelName)
|
||||
|
|
|
@ -1,18 +1,22 @@
|
|||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserChannelJoinLogS2CPacket : SockChatTimedS2CPacket {
|
||||
public class UserChannelJoinLogS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string UserName;
|
||||
|
||||
public UserChannelJoinLogS2CPacket(
|
||||
long messageId,
|
||||
DateTimeOffset timeStamp,
|
||||
string userName
|
||||
) : base(messageId, timeStamp) {
|
||||
) {
|
||||
MessageId = messageId;
|
||||
TimeStamp = timeStamp;
|
||||
UserName = userName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\fjchan\f{1}\t{2}\t0\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserChannelJoinS2CPacket : SockChatS2CPacket {
|
||||
public class UserChannelJoinS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly long UserId;
|
||||
private readonly string UserName;
|
||||
private readonly Colour UserColour;
|
||||
|
@ -13,6 +14,7 @@
|
|||
int userRank,
|
||||
UserPermissions userPerms
|
||||
) {
|
||||
MessageId = SharpId.Next();
|
||||
UserId = userId;
|
||||
UserName = userName;
|
||||
UserColour = userColour;
|
||||
|
@ -20,7 +22,7 @@
|
|||
UserPerms = userPerms;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"5\t0\t{0}\t{1}\t{2}\t{3} {4} {5} {6} {7}\t{8}",
|
||||
UserId,
|
||||
|
|
|
@ -1,18 +1,22 @@
|
|||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserChannelLeaveLogS2CPacket : SockChatTimedS2CPacket {
|
||||
public class UserChannelLeaveLogS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string UserName;
|
||||
|
||||
public UserChannelLeaveLogS2CPacket(
|
||||
long messageId,
|
||||
DateTimeOffset timeStamp,
|
||||
string userName
|
||||
) : base(messageId, timeStamp) {
|
||||
) {
|
||||
MessageId = messageId;
|
||||
TimeStamp = timeStamp;
|
||||
UserName = userName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\flchan\f{1}\t{2}\t0\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserChannelLeaveS2CPacket : SockChatS2CPacket {
|
||||
public class UserChannelLeaveS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly long UserId;
|
||||
|
||||
public UserChannelLeaveS2CPacket(long userId) {
|
||||
MessageId = SharpId.Next();
|
||||
UserId = userId;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"5\t1\t{0}\t{1}",
|
||||
UserId,
|
||||
|
|
|
@ -1,18 +1,22 @@
|
|||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserConnectLogS2CPacket : SockChatTimedS2CPacket {
|
||||
public class UserConnectLogS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string UserName;
|
||||
|
||||
public UserConnectLogS2CPacket(
|
||||
long messageId,
|
||||
DateTimeOffset timeStamp,
|
||||
string userName
|
||||
) : base(messageId, timeStamp) {
|
||||
) {
|
||||
MessageId = messageId;
|
||||
TimeStamp = timeStamp;
|
||||
UserName = userName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\fjoin\f{1}\t{2}\t0\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserConnectS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserConnectS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly long UserId;
|
||||
private readonly string UserName;
|
||||
private readonly Colour UserColour;
|
||||
|
@ -7,12 +11,16 @@
|
|||
private readonly UserPermissions UserPerms;
|
||||
|
||||
public UserConnectS2CPacket(
|
||||
long messageId,
|
||||
DateTimeOffset timeStamp,
|
||||
long userId,
|
||||
string userName,
|
||||
Colour userColour,
|
||||
int userRank,
|
||||
UserPermissions userPerms
|
||||
) {
|
||||
MessageId = messageId;
|
||||
TimeStamp = timeStamp;
|
||||
UserId = userId;
|
||||
UserName = userName;
|
||||
UserColour = userColour;
|
||||
|
@ -20,7 +28,7 @@
|
|||
UserPerms = userPerms;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"1\t{0}\t{1}\t{2}\t{3}\t{4} {5} {6} {7} {8}\t{9}",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserDisconnectLogS2CPacket : SockChatTimedS2CPacket {
|
||||
public class UserDisconnectLogS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string UserName;
|
||||
private readonly UserDisconnectReason Reason;
|
||||
|
||||
|
@ -10,12 +12,14 @@ namespace SharpChat.SockChat.PacketsS2C {
|
|||
DateTimeOffset timeStamp,
|
||||
string userName,
|
||||
UserDisconnectReason reason
|
||||
) : base(messageId, timeStamp) {
|
||||
) {
|
||||
MessageId = messageId;
|
||||
TimeStamp = timeStamp;
|
||||
UserName = userName;
|
||||
Reason = reason;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\f{1}\f{2}\t{3}\t0\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,20 +1,28 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserDisconnectS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserDisconnectS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly long UserId;
|
||||
private readonly string UserName;
|
||||
private readonly UserDisconnectReason Reason;
|
||||
|
||||
public UserDisconnectS2CPacket(
|
||||
long messageId,
|
||||
DateTimeOffset timeStamp,
|
||||
long userId,
|
||||
string userName,
|
||||
UserDisconnectReason reason
|
||||
) {
|
||||
MessageId = messageId;
|
||||
TimeStamp = timeStamp;
|
||||
UserId = userId;
|
||||
UserName = userName;
|
||||
Reason = reason;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"3\t{0}\t{1}\t{2}\t{3}\t{4}",
|
||||
UserId,
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserNameInUseErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserNameInUseErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string UserName;
|
||||
|
||||
public UserNameInUseErrorS2CPacket(string userName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
UserName = userName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\fnameinuse\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserNotFoundErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserNotFoundErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string UserName;
|
||||
|
||||
public UserNotFoundErrorS2CPacket(string userName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
UserName = userName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\fusernf\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,14 +1,20 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserUpdateNotificationS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserUpdateNotificationS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string PreviousName;
|
||||
private readonly string NewName;
|
||||
|
||||
public UserUpdateNotificationS2CPacket(string previousName, string newName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
PreviousName = previousName;
|
||||
NewName = newName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t0\fnick\f{1}\f{2}\t{3}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UserUpdateS2CPacket : SockChatS2CPacket {
|
||||
public class UserUpdateS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long UserId;
|
||||
private readonly string UserName;
|
||||
private readonly Colour UserColour;
|
||||
|
@ -20,7 +20,7 @@
|
|||
UserPerms = userPerms;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"10\t{0}\t{1}\t{2}\t{3} {4} {5} {6} {7}",
|
||||
UserId,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
using System.Text;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class UsersPopulateS2CPacket : SockChatS2CPacket {
|
||||
public class UsersPopulateS2CPacket : ISockChatS2CPacket {
|
||||
public record ListEntry(long Id, string Name, Colour Colour, int Rank, UserPermissions Perms, bool Visible);
|
||||
|
||||
private readonly ListEntry[] Entries;
|
||||
|
@ -10,7 +10,7 @@ namespace SharpChat.SockChat.PacketsS2C {
|
|||
Entries = entries;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
StringBuilder sb = new();
|
||||
|
||||
sb.AppendFormat("7\t0\t{0}", Entries.Length);
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class WhoChannelNotFoundErrorS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class WhoChannelNotFoundErrorS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string ChannelName;
|
||||
|
||||
public WhoChannelNotFoundErrorS2CPacket(string channelName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
ChannelName = channelName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t1\fwhoerr\f{1}\t{2}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -2,18 +2,22 @@
|
|||
using System.Text;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class WhoChannelResponseS2CPacket : SockChatTimedS2CPacket {
|
||||
public class WhoChannelResponseS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string ChannelName;
|
||||
private readonly string[] Users;
|
||||
private readonly string SelfName;
|
||||
|
||||
public WhoChannelResponseS2CPacket(string channelName, string[] users, string selfName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
ChannelName = channelName;
|
||||
Users = users;
|
||||
SelfName = selfName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
StringBuilder sb = new();
|
||||
|
||||
sb.AppendFormat(
|
||||
|
|
|
@ -2,16 +2,20 @@
|
|||
using System.Text;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class WhoServerResponseS2CPacket : SockChatTimedS2CPacket {
|
||||
public class WhoServerResponseS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string[] Users;
|
||||
private readonly string SelfName;
|
||||
|
||||
public WhoServerResponseS2CPacket(string[] users, string selfName) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
Users = users;
|
||||
SelfName = selfName;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
StringBuilder sb = new();
|
||||
|
||||
sb.AppendFormat("2\t{0}\t-1\t0\fwho\f", TimeStamp.ToUnixTimeSeconds());
|
||||
|
|
|
@ -1,14 +1,20 @@
|
|||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class WhoisResponseS2CPacket : SockChatTimedS2CPacket {
|
||||
using System;
|
||||
|
||||
namespace SharpChat.SockChat.PacketsS2C {
|
||||
public class WhoisResponseS2CPacket : ISockChatS2CPacket {
|
||||
private readonly long MessageId;
|
||||
private readonly DateTimeOffset TimeStamp;
|
||||
private readonly string UserName;
|
||||
private readonly string RemoteAddress;
|
||||
|
||||
public WhoisResponseS2CPacket(string userName, string remoteAddress) {
|
||||
MessageId = SharpId.Next();
|
||||
TimeStamp = DateTimeOffset.UtcNow;
|
||||
UserName = userName;
|
||||
RemoteAddress = remoteAddress;
|
||||
}
|
||||
|
||||
public override string Pack() {
|
||||
public string Pack() {
|
||||
return string.Format(
|
||||
"2\t{0}\t-1\t0\fipaddr\f{1}\f{2}\t{3}\t10010",
|
||||
TimeStamp.ToUnixTimeSeconds(),
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace SharpChat.SockChat {
|
|||
Socket.Send(packet).Wait();
|
||||
}
|
||||
|
||||
public void Send(SockChatS2CPacket packet) {
|
||||
public void Send(ISockChatS2CPacket packet) {
|
||||
string data = packet.Pack();
|
||||
if(!string.IsNullOrWhiteSpace(data))
|
||||
Send(data);
|
||||
|
|
|
@ -25,7 +25,7 @@ namespace SharpChat {
|
|||
public void DispatchEvent(IChatEvent eventInfo) {
|
||||
if(eventInfo is MessageCreateEvent mce) {
|
||||
if(mce.IsBroadcast) {
|
||||
Send(new MessageBroadcastS2CPacket(mce.MessageText));
|
||||
Send(new MessageBroadcastS2CPacket(mce.MessageId, mce.MessageCreated, mce.MessageText));
|
||||
} else if(mce.IsPrivate) {
|
||||
// The channel name returned by GetDMChannelName should not be exposed to the user, instead @<Target User> should be displayed
|
||||
// e.g. nook sees @Arysil and Arysil sees @nook
|
||||
|
@ -203,7 +203,7 @@ namespace SharpChat {
|
|||
HandleDisconnect(user, reason);
|
||||
}
|
||||
|
||||
public void HandleChannelEventLog(string channelName, Action<SockChatS2CPacket> handler) {
|
||||
public void HandleChannelEventLog(string channelName, Action<ISockChatS2CPacket> handler) {
|
||||
foreach(StoredEventInfo msg in Events.GetChannelEventLog(channelName))
|
||||
handler(msg.Type switch {
|
||||
"msg:add" => new MessageAddLogS2CPacket(
|
||||
|
@ -247,7 +247,10 @@ namespace SharpChat {
|
|||
|
||||
public void HandleJoin(UserInfo user, ChannelInfo chan, SockChatConnectionInfo conn, int maxMsgLength) {
|
||||
if(!ChannelsUsers.Has(chan, user)) {
|
||||
long eventId = SharpId.Next();
|
||||
SendTo(chan, new UserConnectS2CPacket(
|
||||
eventId,
|
||||
DateTimeOffset.UtcNow,
|
||||
user.UserId,
|
||||
SockChatUtility.GetUserNameWithStatus(user),
|
||||
user.Colour,
|
||||
|
@ -255,7 +258,7 @@ namespace SharpChat {
|
|||
user.Permissions
|
||||
));
|
||||
Events.AddEvent(
|
||||
SharpId.Next(),
|
||||
eventId,
|
||||
"user:connect",
|
||||
chan.Name,
|
||||
user.UserId,
|
||||
|
@ -309,13 +312,16 @@ namespace SharpChat {
|
|||
ChannelsUsers.DeleteUser(user);
|
||||
|
||||
foreach(ChannelInfo chan in channels) {
|
||||
long eventId = SharpId.Next();
|
||||
SendTo(chan, new UserDisconnectS2CPacket(
|
||||
eventId,
|
||||
DateTimeOffset.UtcNow,
|
||||
user.UserId,
|
||||
SockChatUtility.GetUserNameWithStatus(user),
|
||||
reason
|
||||
));
|
||||
Events.AddEvent(
|
||||
SharpId.Next(),
|
||||
eventId,
|
||||
"user:disconnect",
|
||||
chan.Name,
|
||||
user.UserId,
|
||||
|
@ -422,7 +428,7 @@ namespace SharpChat {
|
|||
RemoveChannel(oldChan);
|
||||
}
|
||||
|
||||
public void Send(SockChatS2CPacket packet) {
|
||||
public void Send(ISockChatS2CPacket packet) {
|
||||
string data = packet.Pack();
|
||||
Connections.WithAuthed(conn => {
|
||||
if(conn is SockChatConnectionInfo scConn)
|
||||
|
@ -430,7 +436,7 @@ namespace SharpChat {
|
|||
});
|
||||
}
|
||||
|
||||
public void SendTo(UserInfo user, SockChatS2CPacket packet) {
|
||||
public void SendTo(UserInfo user, ISockChatS2CPacket packet) {
|
||||
string data = packet.Pack();
|
||||
Connections.WithUser(user, conn => {
|
||||
if(conn is SockChatConnectionInfo scConn)
|
||||
|
@ -438,7 +444,7 @@ namespace SharpChat {
|
|||
});
|
||||
}
|
||||
|
||||
public void SendTo(ChannelInfo channel, SockChatS2CPacket packet) {
|
||||
public void SendTo(ChannelInfo channel, ISockChatS2CPacket packet) {
|
||||
SendTo(channel, packet.Pack());
|
||||
}
|
||||
|
||||
|
@ -451,7 +457,7 @@ namespace SharpChat {
|
|||
});
|
||||
}
|
||||
|
||||
public void SendToUserChannels(UserInfo user, SockChatS2CPacket packet) {
|
||||
public void SendToUserChannels(UserInfo user, ISockChatS2CPacket packet) {
|
||||
ChannelInfo[] chans = GetUserChannels(user);
|
||||
string data = packet.Pack();
|
||||
foreach(ChannelInfo chan in chans)
|
||||
|
|
Loading…
Add table
Reference in a new issue