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
SharpChat.SockChat
PacketsS2C
AuthFailS2CPacket.csAuthSuccessS2CPacket.csBanListResponseS2CPacket.csChannelCreateResponseS2CPacket.csChannelCreateS2CPacket.csChannelDeleteNotAllowedErrorS2CPacket.csChannelDeleteResponseS2CPacket.csChannelDeleteS2CPacket.csChannelNameFormatErrorS2CPacket.csChannelNameInUseErrorS2CPacket.csChannelNotFoundErrorS2CPacket.csChannelPasswordChangedResponseS2CPacket.csChannelPasswordWrongErrorS2CPacket.csChannelRankChangedResponseS2CPacket.csChannelRankTooHighErrorS2CPacket.csChannelRankTooLowErrorS2CPacket.csChannelUpdateS2CPacket.csChannelsPopulateS2CPacket.csCommandFormatErrorS2CPacket.csCommandNotAllowedErrorS2CPacket.csContextClearS2CPacket.csFloodWarningS2CPacket.csForceDisconnectS2CPacket.csISockChatS2CPacket.csKickBanNoRecordErrorS2CPacket.csKickBanNotAllowedErrorS2CPacket.csMOTDS2CPacket.csMessageAddLogS2CPacket.csMessageAddS2CPacket.csMessageBroadcastS2CPacket.csMessageDeleteNotAllowedErrorS2CPacket.csMessageDeleteS2CPacket.csPardonResponseS2CPacket.csPongS2CPacket.csSockChatS2CPacket.csSockChatTimedS2CPacket.csUserChannelForceJoinS2CPacket.csUserChannelJoinLogS2CPacket.csUserChannelJoinS2CPacket.csUserChannelLeaveLogS2CPacket.csUserChannelLeaveS2CPacket.csUserConnectLogS2CPacket.csUserConnectS2CPacket.csUserDisconnectLogS2CPacket.csUserDisconnectS2CPacket.csUserNameInUseErrorS2CPacket.csUserNotFoundErrorS2CPacket.csUserUpdateNotificationS2CPacket.csUserUpdateS2CPacket.csUsersPopulateS2CPacket.csWhoChannelNotFoundErrorS2CPacket.csWhoChannelResponseS2CPacket.csWhoServerResponseS2CPacket.csWhoisResponseS2CPacket.cs
SockChatConnectionInfo.csSockChatContext.cs
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class AuthFailS2CPacket : SockChatS2CPacket {
|
public class AuthFailS2CPacket : ISockChatS2CPacket {
|
||||||
public enum FailReason {
|
public enum FailReason {
|
||||||
AuthInvalid,
|
AuthInvalid,
|
||||||
MaxSessions,
|
MaxSessions,
|
||||||
|
@ -21,7 +21,7 @@ namespace SharpChat.SockChat.PacketsS2C {
|
||||||
Expires = expires.Year >= 2100 ? -1 : expires.ToUnixTimeSeconds();
|
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 {
|
string packet = string.Format("1\tn\t{0}fail", Reason switch {
|
||||||
FailReason.AuthInvalid => "auth",
|
FailReason.AuthInvalid => "auth",
|
||||||
FailReason.MaxSessions => "sock",
|
FailReason.MaxSessions => "sock",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class AuthSuccessS2CPacket : SockChatS2CPacket {
|
public class AuthSuccessS2CPacket : ISockChatS2CPacket {
|
||||||
private readonly long UserId;
|
private readonly long UserId;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly Colour UserColour;
|
private readonly Colour UserColour;
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
MaxMessageLength = maxMsgLength;
|
MaxMessageLength = maxMsgLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"1\ty\t{0}\t{1}\t{2}\t{3} {4} {5} {6} {7}\t{8}\t{9}",
|
"1\ty\t{0}\t{1}\t{2}\t{3} {4} {5} {6} {7}\t{8}\t{9}",
|
||||||
UserId,
|
UserId,
|
||||||
|
|
|
@ -1,14 +1,19 @@
|
||||||
using System.Text;
|
using System;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class BanListResponseS2CPacket : SockChatTimedS2CPacket {
|
public class BanListResponseS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string[] Bans;
|
private readonly string[] Bans;
|
||||||
|
|
||||||
public BanListResponseS2CPacket(string[] bans) {
|
public BanListResponseS2CPacket(string[] bans) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
Bans = bans;
|
Bans = bans;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
|
|
||||||
sb.AppendFormat("2\t{0}\t-1\t0\fbanlist\f", TimeStamp.ToUnixTimeSeconds());
|
sb.AppendFormat("2\t{0}\t-1\t0\fbanlist\f", TimeStamp.ToUnixTimeSeconds());
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class ChannelCreateResponseS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class ChannelCreateResponseS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelCreateResponseS2CPacket(string channelName) {
|
public ChannelCreateResponseS2CPacket(string channelName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t0\fcrchan\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t0\fcrchan\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class ChannelCreateS2CPacket : SockChatS2CPacket {
|
public class ChannelCreateS2CPacket : ISockChatS2CPacket {
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
private readonly bool ChannelHasPassword;
|
private readonly bool ChannelHasPassword;
|
||||||
private readonly bool ChannelIsTemporary;
|
private readonly bool ChannelIsTemporary;
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
ChannelIsTemporary = channelIsTemporary;
|
ChannelIsTemporary = channelIsTemporary;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"4\t0\t{0}\t{1}\t{2}",
|
"4\t0\t{0}\t{1}\t{2}",
|
||||||
SockChatUtility.SanitiseChannelName(ChannelName),
|
SockChatUtility.SanitiseChannelName(ChannelName),
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class ChannelDeleteNotAllowedErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class ChannelDeleteNotAllowedErrorS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelDeleteNotAllowedErrorS2CPacket(string channelName) {
|
public ChannelDeleteNotAllowedErrorS2CPacket(string channelName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\fndchan\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t1\fndchan\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class ChannelDeleteResponseS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class ChannelDeleteResponseS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelDeleteResponseS2CPacket(string channelName) {
|
public ChannelDeleteResponseS2CPacket(string channelName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t0\fdelchan\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t0\fdelchan\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class ChannelDeleteS2CPacket : SockChatS2CPacket {
|
public class ChannelDeleteS2CPacket : ISockChatS2CPacket {
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelDeleteS2CPacket(string channelName) {
|
public ChannelDeleteS2CPacket(string channelName) {
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"4\t2\t{0}",
|
"4\t2\t{0}",
|
||||||
SockChatUtility.SanitiseChannelName(ChannelName)
|
SockChatUtility.SanitiseChannelName(ChannelName)
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class ChannelNameFormatErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
public override string Pack() {
|
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(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\finchan\t{1}\t10010",
|
"2\t{0}\t-1\t1\finchan\t{1}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class ChannelNameInUseErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class ChannelNameInUseErrorS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelNameInUseErrorS2CPacket(string channelName) {
|
public ChannelNameInUseErrorS2CPacket(string channelName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\fnischan\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t1\fnischan\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class ChannelNotFoundErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class ChannelNotFoundErrorS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelNotFoundErrorS2CPacket(string channelName) {
|
public ChannelNotFoundErrorS2CPacket(string channelName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\fnochan\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t1\fnochan\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class ChannelPasswordChangedResponseS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
public override string Pack() {
|
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(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t0\fcpwdchan\t{1}\t10010",
|
"2\t{0}\t-1\t0\fcpwdchan\t{1}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class ChannelPasswordWrongErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class ChannelPasswordWrongErrorS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelPasswordWrongErrorS2CPacket(string channelName) {
|
public ChannelPasswordWrongErrorS2CPacket(string channelName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\fipwchan\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t1\fipwchan\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class ChannelRankChangedResponseS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
public override string Pack() {
|
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(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t0\fcprivchan\t{1}\t10010",
|
"2\t{0}\t-1\t0\fcprivchan\t{1}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class ChannelRankTooHighErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
public override string Pack() {
|
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(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\frankerr\t{1}\t10010",
|
"2\t{0}\t-1\t1\frankerr\t{1}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class ChannelRankTooLowErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class ChannelRankTooLowErrorS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelRankTooLowErrorS2CPacket(string channelName) {
|
public ChannelRankTooLowErrorS2CPacket(string channelName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\fipchan\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t1\fipchan\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class ChannelUpdateS2CPacket : SockChatS2CPacket {
|
public class ChannelUpdateS2CPacket : ISockChatS2CPacket {
|
||||||
private readonly string ChannelNamePrevious;
|
private readonly string ChannelNamePrevious;
|
||||||
private readonly string ChannelNameNew;
|
private readonly string ChannelNameNew;
|
||||||
private readonly bool ChannelHasPassword;
|
private readonly bool ChannelHasPassword;
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
ChannelIsTemporary = channelIsTemporary;
|
ChannelIsTemporary = channelIsTemporary;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"4\t1\t{0}\t{1}\t{2}\t{3}",
|
"4\t1\t{0}\t{1}\t{2}\t{3}",
|
||||||
SockChatUtility.SanitiseChannelName(ChannelNamePrevious),
|
SockChatUtility.SanitiseChannelName(ChannelNamePrevious),
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class ChannelsPopulateS2CPacket : SockChatS2CPacket {
|
public class ChannelsPopulateS2CPacket : ISockChatS2CPacket {
|
||||||
public record ListEntry(string Name, bool HasPassword, bool IsTemporary);
|
public record ListEntry(string Name, bool HasPassword, bool IsTemporary);
|
||||||
|
|
||||||
private readonly ListEntry[] Entries;
|
private readonly ListEntry[] Entries;
|
||||||
|
@ -10,7 +10,7 @@ namespace SharpChat.SockChat.PacketsS2C {
|
||||||
Entries = entries;
|
Entries = entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
|
|
||||||
sb.AppendFormat("7\t2\t{0}", Entries.Length);
|
sb.AppendFormat("7\t2\t{0}", Entries.Length);
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class CommandFormatErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
public override string Pack() {
|
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(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\fcmdna\t{1}\t10010",
|
"2\t{0}\t-1\t1\fcmdna\t{1}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class CommandNotAllowedErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class CommandNotAllowedErrorS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string CommandName;
|
private readonly string CommandName;
|
||||||
|
|
||||||
public CommandNotAllowedErrorS2CPacket(string commandName) {
|
public CommandNotAllowedErrorS2CPacket(string commandName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
CommandName = commandName;
|
CommandName = commandName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\fcmdna\f/{1}\t{2}\t10010",
|
"2\t{0}\t-1\t1\fcmdna\f/{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class ContextClearS2CPacket : SockChatS2CPacket {
|
public class ContextClearS2CPacket : ISockChatS2CPacket {
|
||||||
public enum ClearMode {
|
public enum ClearMode {
|
||||||
Messages = 0,
|
Messages = 0,
|
||||||
Users = 1,
|
Users = 1,
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
Mode = mode;
|
Mode = mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format("8\t{0}", (int)Mode);
|
return string.Format("8\t{0}", (int)Mode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class FloodWarningS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
public override string Pack() {
|
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(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t0\fflwarn\t{1}\t10010",
|
"2\t{0}\t-1\t0\fflwarn\t{1}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class ForceDisconnectS2CPacket : SockChatS2CPacket {
|
public class ForceDisconnectS2CPacket : ISockChatS2CPacket {
|
||||||
private readonly long Expires;
|
private readonly long Expires;
|
||||||
|
|
||||||
public ForceDisconnectS2CPacket() { }
|
public ForceDisconnectS2CPacket() {
|
||||||
|
}
|
||||||
|
|
||||||
public ForceDisconnectS2CPacket(DateTimeOffset expires) {
|
public ForceDisconnectS2CPacket(DateTimeOffset expires) {
|
||||||
Expires = expires.Year >= 2100 ? -1 : expires.ToUnixTimeSeconds();
|
Expires = expires.Year >= 2100 ? -1 : expires.ToUnixTimeSeconds();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
if(Expires != 0)
|
if(Expires != 0)
|
||||||
return string.Format("9\t1\t{0}", Expires);
|
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 {
|
using System;
|
||||||
public class KickBanNoRecordErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class KickBanNoRecordErrorS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string TargetName;
|
private readonly string TargetName;
|
||||||
|
|
||||||
public KickBanNoRecordErrorS2CPacket(string targetName) {
|
public KickBanNoRecordErrorS2CPacket(string targetName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
TargetName = targetName;
|
TargetName = targetName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\fnotban\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t1\fnotban\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class KickBanNotAllowedErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class KickBanNotAllowedErrorS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
|
|
||||||
public KickBanNotAllowedErrorS2CPacket(string userName) {
|
public KickBanNotAllowedErrorS2CPacket(string userName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\fkickna\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t1\fkickna\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class MOTDS2CPacket : SockChatTimedS2CPacket {
|
public class MOTDS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string Body;
|
private readonly string Body;
|
||||||
|
|
||||||
public MOTDS2CPacket(DateTimeOffset timeStamp, string body) : base(timeStamp) {
|
public MOTDS2CPacket(DateTimeOffset timeStamp, string body) {
|
||||||
|
TimeStamp = timeStamp;
|
||||||
Body = body;
|
Body = body;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\fsay\f{1}\twelcome\t0\t10010",
|
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\fsay\f{1}\twelcome\t0\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
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 long UserId;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly Colour UserColour;
|
private readonly Colour UserColour;
|
||||||
|
@ -26,7 +28,9 @@ namespace SharpChat.SockChat.PacketsS2C {
|
||||||
bool isPrivate,
|
bool isPrivate,
|
||||||
bool isBroadcast,
|
bool isBroadcast,
|
||||||
bool notify
|
bool notify
|
||||||
) : base(messageId, timeStamp) {
|
) {
|
||||||
|
MessageId = messageId;
|
||||||
|
TimeStamp = timeStamp;
|
||||||
UserId = userId < 0 ? -1 : userId;
|
UserId = userId < 0 ? -1 : userId;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
UserColour = userColour;
|
UserColour = userColour;
|
||||||
|
@ -39,7 +43,7 @@ namespace SharpChat.SockChat.PacketsS2C {
|
||||||
Notify = notify;
|
Notify = notify;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
string body = SockChatUtility.SanitiseMessageBody(Body);
|
string body = SockChatUtility.SanitiseMessageBody(Body);
|
||||||
if(IsAction)
|
if(IsAction)
|
||||||
body = string.Format("<i>{0}</i>", body);
|
body = string.Format("<i>{0}</i>", body);
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
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 long UserId;
|
||||||
private readonly string Body;
|
private readonly string Body;
|
||||||
private readonly bool IsAction;
|
private readonly bool IsAction;
|
||||||
|
@ -14,14 +16,16 @@ namespace SharpChat.SockChat.PacketsS2C {
|
||||||
string body,
|
string body,
|
||||||
bool isAction,
|
bool isAction,
|
||||||
bool isPrivate
|
bool isPrivate
|
||||||
) : base(messageId, timeStamp) {
|
) {
|
||||||
|
MessageId = messageId;
|
||||||
|
TimeStamp = timeStamp;
|
||||||
UserId = userId < 0 ? -1 : userId;
|
UserId = userId < 0 ? -1 : userId;
|
||||||
Body = body;
|
Body = body;
|
||||||
IsAction = isAction;
|
IsAction = isAction;
|
||||||
IsPrivate = isPrivate;
|
IsPrivate = isPrivate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
string body = SockChatUtility.SanitiseMessageBody(Body);
|
string body = SockChatUtility.SanitiseMessageBody(Body);
|
||||||
if(IsAction)
|
if(IsAction)
|
||||||
body = string.Format("<i>{0}</i>", body);
|
body = string.Format("<i>{0}</i>", body);
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class MessageBroadcastS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class MessageBroadcastS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string Body;
|
private readonly string Body;
|
||||||
|
|
||||||
public MessageBroadcastS2CPacket(string body) {
|
public MessageBroadcastS2CPacket(long messageId, DateTimeOffset timeStamp, string body) {
|
||||||
|
MessageId = messageId;
|
||||||
|
TimeStamp = timeStamp;
|
||||||
Body = body;
|
Body = body;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t0\fsay\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t0\fsay\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class MessageDeleteNotAllowedErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
public override string Pack() {
|
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(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\fdelerr\t{1}\t10010",
|
"2\t{0}\t-1\t1\fdelerr\t{1}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class MessageDeleteS2CPacket : SockChatS2CPacket {
|
public class MessageDeleteS2CPacket : ISockChatS2CPacket {
|
||||||
private readonly long DeletedMessageId;
|
private readonly long DeletedMessageId;
|
||||||
|
|
||||||
public MessageDeleteS2CPacket(long deletedMessageId) {
|
public MessageDeleteS2CPacket(long deletedMessageId) {
|
||||||
DeletedMessageId = deletedMessageId;
|
DeletedMessageId = deletedMessageId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format("6\t{0}", DeletedMessageId);
|
return string.Format("6\t{0}", DeletedMessageId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class PardonResponseS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class PardonResponseS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string Subject;
|
private readonly string Subject;
|
||||||
|
|
||||||
public PardonResponseS2CPacket(string subject) {
|
public PardonResponseS2CPacket(string subject) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
Subject = subject;
|
Subject = subject;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t0\funban\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t0\funban\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class PongS2CPacket : SockChatS2CPacket {
|
public class PongS2CPacket : ISockChatS2CPacket {
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return "0\tpong";
|
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 {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class UserChannelForceJoinS2CPacket : SockChatS2CPacket {
|
public class UserChannelForceJoinS2CPacket : ISockChatS2CPacket {
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public UserChannelForceJoinS2CPacket(string channelName) {
|
public UserChannelForceJoinS2CPacket(string channelName) {
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"5\t2\t{0}",
|
"5\t2\t{0}",
|
||||||
SockChatUtility.SanitiseChannelName(ChannelName)
|
SockChatUtility.SanitiseChannelName(ChannelName)
|
||||||
|
|
|
@ -1,18 +1,22 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class UserChannelJoinLogS2CPacket : SockChatTimedS2CPacket {
|
public class UserChannelJoinLogS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
|
|
||||||
public UserChannelJoinLogS2CPacket(
|
public UserChannelJoinLogS2CPacket(
|
||||||
long messageId,
|
long messageId,
|
||||||
DateTimeOffset timeStamp,
|
DateTimeOffset timeStamp,
|
||||||
string userName
|
string userName
|
||||||
) : base(messageId, timeStamp) {
|
) {
|
||||||
|
MessageId = messageId;
|
||||||
|
TimeStamp = timeStamp;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\fjchan\f{1}\t{2}\t0\t10010",
|
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\fjchan\f{1}\t{2}\t0\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class UserChannelJoinS2CPacket : SockChatS2CPacket {
|
public class UserChannelJoinS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
private readonly long UserId;
|
private readonly long UserId;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly Colour UserColour;
|
private readonly Colour UserColour;
|
||||||
|
@ -13,6 +14,7 @@
|
||||||
int userRank,
|
int userRank,
|
||||||
UserPermissions userPerms
|
UserPermissions userPerms
|
||||||
) {
|
) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
UserId = userId;
|
UserId = userId;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
UserColour = userColour;
|
UserColour = userColour;
|
||||||
|
@ -20,7 +22,7 @@
|
||||||
UserPerms = userPerms;
|
UserPerms = userPerms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"5\t0\t{0}\t{1}\t{2}\t{3} {4} {5} {6} {7}\t{8}",
|
"5\t0\t{0}\t{1}\t{2}\t{3} {4} {5} {6} {7}\t{8}",
|
||||||
UserId,
|
UserId,
|
||||||
|
|
|
@ -1,18 +1,22 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class UserChannelLeaveLogS2CPacket : SockChatTimedS2CPacket {
|
public class UserChannelLeaveLogS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
|
|
||||||
public UserChannelLeaveLogS2CPacket(
|
public UserChannelLeaveLogS2CPacket(
|
||||||
long messageId,
|
long messageId,
|
||||||
DateTimeOffset timeStamp,
|
DateTimeOffset timeStamp,
|
||||||
string userName
|
string userName
|
||||||
) : base(messageId, timeStamp) {
|
) {
|
||||||
|
MessageId = messageId;
|
||||||
|
TimeStamp = timeStamp;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\flchan\f{1}\t{2}\t0\t10010",
|
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\flchan\f{1}\t{2}\t0\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class UserChannelLeaveS2CPacket : SockChatS2CPacket {
|
public class UserChannelLeaveS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
private readonly long UserId;
|
private readonly long UserId;
|
||||||
|
|
||||||
public UserChannelLeaveS2CPacket(long userId) {
|
public UserChannelLeaveS2CPacket(long userId) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
UserId = userId;
|
UserId = userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"5\t1\t{0}\t{1}",
|
"5\t1\t{0}\t{1}",
|
||||||
UserId,
|
UserId,
|
||||||
|
|
|
@ -1,18 +1,22 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class UserConnectLogS2CPacket : SockChatTimedS2CPacket {
|
public class UserConnectLogS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
|
|
||||||
public UserConnectLogS2CPacket(
|
public UserConnectLogS2CPacket(
|
||||||
long messageId,
|
long messageId,
|
||||||
DateTimeOffset timeStamp,
|
DateTimeOffset timeStamp,
|
||||||
string userName
|
string userName
|
||||||
) : base(messageId, timeStamp) {
|
) {
|
||||||
|
MessageId = messageId;
|
||||||
|
TimeStamp = timeStamp;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\fjoin\f{1}\t{2}\t0\t10010",
|
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\fjoin\f{1}\t{2}\t0\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class UserConnectS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class UserConnectS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly long UserId;
|
private readonly long UserId;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly Colour UserColour;
|
private readonly Colour UserColour;
|
||||||
|
@ -7,12 +11,16 @@
|
||||||
private readonly UserPermissions UserPerms;
|
private readonly UserPermissions UserPerms;
|
||||||
|
|
||||||
public UserConnectS2CPacket(
|
public UserConnectS2CPacket(
|
||||||
|
long messageId,
|
||||||
|
DateTimeOffset timeStamp,
|
||||||
long userId,
|
long userId,
|
||||||
string userName,
|
string userName,
|
||||||
Colour userColour,
|
Colour userColour,
|
||||||
int userRank,
|
int userRank,
|
||||||
UserPermissions userPerms
|
UserPermissions userPerms
|
||||||
) {
|
) {
|
||||||
|
MessageId = messageId;
|
||||||
|
TimeStamp = timeStamp;
|
||||||
UserId = userId;
|
UserId = userId;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
UserColour = userColour;
|
UserColour = userColour;
|
||||||
|
@ -20,7 +28,7 @@
|
||||||
UserPerms = userPerms;
|
UserPerms = userPerms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"1\t{0}\t{1}\t{2}\t{3}\t{4} {5} {6} {7} {8}\t{9}",
|
"1\t{0}\t{1}\t{2}\t{3}\t{4} {5} {6} {7} {8}\t{9}",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
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 string UserName;
|
||||||
private readonly UserDisconnectReason Reason;
|
private readonly UserDisconnectReason Reason;
|
||||||
|
|
||||||
|
@ -10,12 +12,14 @@ namespace SharpChat.SockChat.PacketsS2C {
|
||||||
DateTimeOffset timeStamp,
|
DateTimeOffset timeStamp,
|
||||||
string userName,
|
string userName,
|
||||||
UserDisconnectReason reason
|
UserDisconnectReason reason
|
||||||
) : base(messageId, timeStamp) {
|
) {
|
||||||
|
MessageId = messageId;
|
||||||
|
TimeStamp = timeStamp;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
Reason = reason;
|
Reason = reason;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\f{1}\f{2}\t{3}\t0\t10010",
|
"7\t1\t{0}\t-1\tChatBot\tinherit\t\t0\f{1}\f{2}\t{3}\t0\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,20 +1,28 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class UserDisconnectS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class UserDisconnectS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly long UserId;
|
private readonly long UserId;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly UserDisconnectReason Reason;
|
private readonly UserDisconnectReason Reason;
|
||||||
|
|
||||||
public UserDisconnectS2CPacket(
|
public UserDisconnectS2CPacket(
|
||||||
|
long messageId,
|
||||||
|
DateTimeOffset timeStamp,
|
||||||
long userId,
|
long userId,
|
||||||
string userName,
|
string userName,
|
||||||
UserDisconnectReason reason
|
UserDisconnectReason reason
|
||||||
) {
|
) {
|
||||||
|
MessageId = messageId;
|
||||||
|
TimeStamp = timeStamp;
|
||||||
UserId = userId;
|
UserId = userId;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
Reason = reason;
|
Reason = reason;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"3\t{0}\t{1}\t{2}\t{3}\t{4}",
|
"3\t{0}\t{1}\t{2}\t{3}\t{4}",
|
||||||
UserId,
|
UserId,
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class UserNameInUseErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class UserNameInUseErrorS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
|
|
||||||
public UserNameInUseErrorS2CPacket(string userName) {
|
public UserNameInUseErrorS2CPacket(string userName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\fnameinuse\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t1\fnameinuse\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class UserNotFoundErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class UserNotFoundErrorS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
|
|
||||||
public UserNotFoundErrorS2CPacket(string userName) {
|
public UserNotFoundErrorS2CPacket(string userName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\fusernf\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t1\fusernf\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,14 +1,20 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class UserUpdateNotificationS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class UserUpdateNotificationS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string PreviousName;
|
private readonly string PreviousName;
|
||||||
private readonly string NewName;
|
private readonly string NewName;
|
||||||
|
|
||||||
public UserUpdateNotificationS2CPacket(string previousName, string newName) {
|
public UserUpdateNotificationS2CPacket(string previousName, string newName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
PreviousName = previousName;
|
PreviousName = previousName;
|
||||||
NewName = newName;
|
NewName = newName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t0\fnick\f{1}\f{2}\t{3}\t10010",
|
"2\t{0}\t-1\t0\fnick\f{1}\f{2}\t{3}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
public class UserUpdateS2CPacket : SockChatS2CPacket {
|
public class UserUpdateS2CPacket : ISockChatS2CPacket {
|
||||||
private readonly long UserId;
|
private readonly long UserId;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly Colour UserColour;
|
private readonly Colour UserColour;
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
UserPerms = userPerms;
|
UserPerms = userPerms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"10\t{0}\t{1}\t{2}\t{3} {4} {5} {6} {7}",
|
"10\t{0}\t{1}\t{2}\t{3} {4} {5} {6} {7}",
|
||||||
UserId,
|
UserId,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
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);
|
public record ListEntry(long Id, string Name, Colour Colour, int Rank, UserPermissions Perms, bool Visible);
|
||||||
|
|
||||||
private readonly ListEntry[] Entries;
|
private readonly ListEntry[] Entries;
|
||||||
|
@ -10,7 +10,7 @@ namespace SharpChat.SockChat.PacketsS2C {
|
||||||
Entries = entries;
|
Entries = entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
|
|
||||||
sb.AppendFormat("7\t0\t{0}", Entries.Length);
|
sb.AppendFormat("7\t0\t{0}", Entries.Length);
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class WhoChannelNotFoundErrorS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class WhoChannelNotFoundErrorS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public WhoChannelNotFoundErrorS2CPacket(string channelName) {
|
public WhoChannelNotFoundErrorS2CPacket(string channelName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t1\fwhoerr\f{1}\t{2}\t10010",
|
"2\t{0}\t-1\t1\fwhoerr\f{1}\t{2}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -2,18 +2,22 @@
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
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 ChannelName;
|
||||||
private readonly string[] Users;
|
private readonly string[] Users;
|
||||||
private readonly string SelfName;
|
private readonly string SelfName;
|
||||||
|
|
||||||
public WhoChannelResponseS2CPacket(string channelName, string[] users, string selfName) {
|
public WhoChannelResponseS2CPacket(string channelName, string[] users, string selfName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
Users = users;
|
Users = users;
|
||||||
SelfName = selfName;
|
SelfName = selfName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
|
|
||||||
sb.AppendFormat(
|
sb.AppendFormat(
|
||||||
|
|
|
@ -2,16 +2,20 @@
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
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[] Users;
|
||||||
private readonly string SelfName;
|
private readonly string SelfName;
|
||||||
|
|
||||||
public WhoServerResponseS2CPacket(string[] users, string selfName) {
|
public WhoServerResponseS2CPacket(string[] users, string selfName) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
Users = users;
|
Users = users;
|
||||||
SelfName = selfName;
|
SelfName = selfName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
|
|
||||||
sb.AppendFormat("2\t{0}\t-1\t0\fwho\f", TimeStamp.ToUnixTimeSeconds());
|
sb.AppendFormat("2\t{0}\t-1\t0\fwho\f", TimeStamp.ToUnixTimeSeconds());
|
||||||
|
|
|
@ -1,14 +1,20 @@
|
||||||
namespace SharpChat.SockChat.PacketsS2C {
|
using System;
|
||||||
public class WhoisResponseS2CPacket : SockChatTimedS2CPacket {
|
|
||||||
|
namespace SharpChat.SockChat.PacketsS2C {
|
||||||
|
public class WhoisResponseS2CPacket : ISockChatS2CPacket {
|
||||||
|
private readonly long MessageId;
|
||||||
|
private readonly DateTimeOffset TimeStamp;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly string RemoteAddress;
|
private readonly string RemoteAddress;
|
||||||
|
|
||||||
public WhoisResponseS2CPacket(string userName, string remoteAddress) {
|
public WhoisResponseS2CPacket(string userName, string remoteAddress) {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
RemoteAddress = remoteAddress;
|
RemoteAddress = remoteAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public string Pack() {
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t-1\t0\fipaddr\f{1}\f{2}\t{3}\t10010",
|
"2\t{0}\t-1\t0\fipaddr\f{1}\f{2}\t{3}\t10010",
|
||||||
TimeStamp.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
|
|
@ -30,7 +30,7 @@ namespace SharpChat.SockChat {
|
||||||
Socket.Send(packet).Wait();
|
Socket.Send(packet).Wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Send(SockChatS2CPacket packet) {
|
public void Send(ISockChatS2CPacket packet) {
|
||||||
string data = packet.Pack();
|
string data = packet.Pack();
|
||||||
if(!string.IsNullOrWhiteSpace(data))
|
if(!string.IsNullOrWhiteSpace(data))
|
||||||
Send(data);
|
Send(data);
|
||||||
|
|
|
@ -25,7 +25,7 @@ namespace SharpChat {
|
||||||
public void DispatchEvent(IChatEvent eventInfo) {
|
public void DispatchEvent(IChatEvent eventInfo) {
|
||||||
if(eventInfo is MessageCreateEvent mce) {
|
if(eventInfo is MessageCreateEvent mce) {
|
||||||
if(mce.IsBroadcast) {
|
if(mce.IsBroadcast) {
|
||||||
Send(new MessageBroadcastS2CPacket(mce.MessageText));
|
Send(new MessageBroadcastS2CPacket(mce.MessageId, mce.MessageCreated, mce.MessageText));
|
||||||
} else if(mce.IsPrivate) {
|
} else if(mce.IsPrivate) {
|
||||||
// The channel name returned by GetDMChannelName should not be exposed to the user, instead @<Target User> should be displayed
|
// 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
|
// e.g. nook sees @Arysil and Arysil sees @nook
|
||||||
|
@ -203,7 +203,7 @@ namespace SharpChat {
|
||||||
HandleDisconnect(user, reason);
|
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))
|
foreach(StoredEventInfo msg in Events.GetChannelEventLog(channelName))
|
||||||
handler(msg.Type switch {
|
handler(msg.Type switch {
|
||||||
"msg:add" => new MessageAddLogS2CPacket(
|
"msg:add" => new MessageAddLogS2CPacket(
|
||||||
|
@ -247,7 +247,10 @@ namespace SharpChat {
|
||||||
|
|
||||||
public void HandleJoin(UserInfo user, ChannelInfo chan, SockChatConnectionInfo conn, int maxMsgLength) {
|
public void HandleJoin(UserInfo user, ChannelInfo chan, SockChatConnectionInfo conn, int maxMsgLength) {
|
||||||
if(!ChannelsUsers.Has(chan, user)) {
|
if(!ChannelsUsers.Has(chan, user)) {
|
||||||
|
long eventId = SharpId.Next();
|
||||||
SendTo(chan, new UserConnectS2CPacket(
|
SendTo(chan, new UserConnectS2CPacket(
|
||||||
|
eventId,
|
||||||
|
DateTimeOffset.UtcNow,
|
||||||
user.UserId,
|
user.UserId,
|
||||||
SockChatUtility.GetUserNameWithStatus(user),
|
SockChatUtility.GetUserNameWithStatus(user),
|
||||||
user.Colour,
|
user.Colour,
|
||||||
|
@ -255,7 +258,7 @@ namespace SharpChat {
|
||||||
user.Permissions
|
user.Permissions
|
||||||
));
|
));
|
||||||
Events.AddEvent(
|
Events.AddEvent(
|
||||||
SharpId.Next(),
|
eventId,
|
||||||
"user:connect",
|
"user:connect",
|
||||||
chan.Name,
|
chan.Name,
|
||||||
user.UserId,
|
user.UserId,
|
||||||
|
@ -309,13 +312,16 @@ namespace SharpChat {
|
||||||
ChannelsUsers.DeleteUser(user);
|
ChannelsUsers.DeleteUser(user);
|
||||||
|
|
||||||
foreach(ChannelInfo chan in channels) {
|
foreach(ChannelInfo chan in channels) {
|
||||||
|
long eventId = SharpId.Next();
|
||||||
SendTo(chan, new UserDisconnectS2CPacket(
|
SendTo(chan, new UserDisconnectS2CPacket(
|
||||||
|
eventId,
|
||||||
|
DateTimeOffset.UtcNow,
|
||||||
user.UserId,
|
user.UserId,
|
||||||
SockChatUtility.GetUserNameWithStatus(user),
|
SockChatUtility.GetUserNameWithStatus(user),
|
||||||
reason
|
reason
|
||||||
));
|
));
|
||||||
Events.AddEvent(
|
Events.AddEvent(
|
||||||
SharpId.Next(),
|
eventId,
|
||||||
"user:disconnect",
|
"user:disconnect",
|
||||||
chan.Name,
|
chan.Name,
|
||||||
user.UserId,
|
user.UserId,
|
||||||
|
@ -422,7 +428,7 @@ namespace SharpChat {
|
||||||
RemoveChannel(oldChan);
|
RemoveChannel(oldChan);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Send(SockChatS2CPacket packet) {
|
public void Send(ISockChatS2CPacket packet) {
|
||||||
string data = packet.Pack();
|
string data = packet.Pack();
|
||||||
Connections.WithAuthed(conn => {
|
Connections.WithAuthed(conn => {
|
||||||
if(conn is SockChatConnectionInfo scConn)
|
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();
|
string data = packet.Pack();
|
||||||
Connections.WithUser(user, conn => {
|
Connections.WithUser(user, conn => {
|
||||||
if(conn is SockChatConnectionInfo scConn)
|
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());
|
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);
|
ChannelInfo[] chans = GetUserChannels(user);
|
||||||
string data = packet.Pack();
|
string data = packet.Pack();
|
||||||
foreach(ChannelInfo chan in chans)
|
foreach(ChannelInfo chan in chans)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue