Added base class for packets with timestamp.
This commit is contained in:
parent
042b6ddbd6
commit
1d781bd72c
56 changed files with 265 additions and 334 deletions
|
@ -200,7 +200,7 @@ namespace SharpChat {
|
||||||
HandleDisconnect(user, reason);
|
HandleDisconnect(user, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleChannelEventLog(string channelName, Action<ServerPacket> handler) {
|
public void HandleChannelEventLog(string channelName, Action<SockChatS2CPacket> 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 MessageAddLogPacket(
|
"msg:add" => new MessageAddLogPacket(
|
||||||
|
@ -218,19 +218,23 @@ namespace SharpChat {
|
||||||
false
|
false
|
||||||
),
|
),
|
||||||
"user:connect" => new UserConnectLogPacket(
|
"user:connect" => new UserConnectLogPacket(
|
||||||
|
msg.Id,
|
||||||
msg.Created,
|
msg.Created,
|
||||||
msg.Sender == null ? string.Empty : SockChatUtility.GetUserName(msg.Sender)
|
msg.Sender == null ? string.Empty : SockChatUtility.GetUserName(msg.Sender)
|
||||||
),
|
),
|
||||||
"user:disconnect" => new UserDisconnectLogPacket(
|
"user:disconnect" => new UserDisconnectLogPacket(
|
||||||
|
msg.Id,
|
||||||
msg.Created,
|
msg.Created,
|
||||||
msg.Sender == null ? string.Empty : SockChatUtility.GetUserNameWithStatus(msg.Sender),
|
msg.Sender == null ? string.Empty : SockChatUtility.GetUserNameWithStatus(msg.Sender),
|
||||||
(UserDisconnectReason)msg.Data.RootElement.GetProperty("reason").GetByte()
|
(UserDisconnectReason)msg.Data.RootElement.GetProperty("reason").GetByte()
|
||||||
),
|
),
|
||||||
"chan:join" => new UserChannelJoinLogPacket(
|
"chan:join" => new UserChannelJoinLogPacket(
|
||||||
|
msg.Id,
|
||||||
msg.Created,
|
msg.Created,
|
||||||
msg.Sender == null ? string.Empty : SockChatUtility.GetUserName(msg.Sender)
|
msg.Sender == null ? string.Empty : SockChatUtility.GetUserName(msg.Sender)
|
||||||
),
|
),
|
||||||
"chan:leave" => new UserChannelLeaveLogPacket(
|
"chan:leave" => new UserChannelLeaveLogPacket(
|
||||||
|
msg.Id,
|
||||||
msg.Created,
|
msg.Created,
|
||||||
msg.Sender == null ? string.Empty : SockChatUtility.GetUserName(msg.Sender)
|
msg.Sender == null ? string.Empty : SockChatUtility.GetUserName(msg.Sender)
|
||||||
),
|
),
|
||||||
|
@ -241,7 +245,6 @@ namespace SharpChat {
|
||||||
public void HandleJoin(UserInfo user, ChannelInfo chan, ConnectionInfo conn, int maxMsgLength) {
|
public void HandleJoin(UserInfo user, ChannelInfo chan, ConnectionInfo conn, int maxMsgLength) {
|
||||||
if(!ChannelsUsers.Has(chan, user)) {
|
if(!ChannelsUsers.Has(chan, user)) {
|
||||||
SendTo(chan, new UserConnectPacket(
|
SendTo(chan, new UserConnectPacket(
|
||||||
DateTimeOffset.Now,
|
|
||||||
user.UserId,
|
user.UserId,
|
||||||
SockChatUtility.GetUserNameWithStatus(user),
|
SockChatUtility.GetUserNameWithStatus(user),
|
||||||
user.Colour,
|
user.Colour,
|
||||||
|
@ -292,7 +295,6 @@ namespace SharpChat {
|
||||||
|
|
||||||
foreach(ChannelInfo chan in channels) {
|
foreach(ChannelInfo chan in channels) {
|
||||||
SendTo(chan, new UserDisconnectPacket(
|
SendTo(chan, new UserDisconnectPacket(
|
||||||
DateTimeOffset.Now,
|
|
||||||
user.UserId,
|
user.UserId,
|
||||||
SockChatUtility.GetUserNameWithStatus(user),
|
SockChatUtility.GetUserNameWithStatus(user),
|
||||||
reason
|
reason
|
||||||
|
@ -369,26 +371,26 @@ namespace SharpChat {
|
||||||
RemoveChannel(oldChan);
|
RemoveChannel(oldChan);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Send(ServerPacket packet) {
|
public void Send(SockChatS2CPacket packet) {
|
||||||
foreach(ConnectionInfo conn in Connections)
|
foreach(ConnectionInfo conn in Connections)
|
||||||
if(conn.IsAuthed)
|
if(conn.IsAuthed)
|
||||||
conn.Send(packet);
|
conn.Send(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendTo(UserInfo user, ServerPacket packet) {
|
public void SendTo(UserInfo user, SockChatS2CPacket packet) {
|
||||||
foreach(ConnectionInfo conn in Connections)
|
foreach(ConnectionInfo conn in Connections)
|
||||||
if(conn.IsAuthed && conn.User!.UserId == user.UserId)
|
if(conn.IsAuthed && conn.User!.UserId == user.UserId)
|
||||||
conn.Send(packet);
|
conn.Send(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendTo(ChannelInfo channel, ServerPacket packet) {
|
public void SendTo(ChannelInfo channel, SockChatS2CPacket packet) {
|
||||||
long[] userIds = ChannelsUsers.GetChannelUserIds(channel);
|
long[] userIds = ChannelsUsers.GetChannelUserIds(channel);
|
||||||
foreach(ConnectionInfo conn in Connections)
|
foreach(ConnectionInfo conn in Connections)
|
||||||
if(conn.IsAuthed && userIds.Contains(conn.User!.UserId))
|
if(conn.IsAuthed && userIds.Contains(conn.User!.UserId))
|
||||||
conn.Send(packet);
|
conn.Send(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendToUserChannels(UserInfo user, ServerPacket packet) {
|
public void SendToUserChannels(UserInfo user, SockChatS2CPacket packet) {
|
||||||
ChannelInfo[] chans = GetUserChannels(user);
|
ChannelInfo[] chans = GetUserChannels(user);
|
||||||
foreach(ChannelInfo chan in chans)
|
foreach(ChannelInfo chan in chans)
|
||||||
SendTo(chan, packet);
|
SendTo(chan, packet);
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace SharpChat {
|
||||||
RemotePort = (ushort)sock.ConnectionInfo.ClientPort;
|
RemotePort = (ushort)sock.ConnectionInfo.ClientPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Send(ServerPacket packet) {
|
public void Send(SockChatS2CPacket packet) {
|
||||||
if(!Socket.IsAvailable)
|
if(!Socket.IsAvailable)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
namespace SharpChat {
|
|
||||||
public abstract class ServerPacket {
|
|
||||||
public long SequenceId { get; }
|
|
||||||
|
|
||||||
public ServerPacket(long sequenceId = 0) {
|
|
||||||
// Allow sequence id to be manually set for potential message repeats
|
|
||||||
SequenceId = sequenceId > 0 ? sequenceId : SharpId.Next();
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract string Pack();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class AuthFailPacket : ServerPacket {
|
public class AuthFailPacket : SockChatS2CPacket {
|
||||||
public enum FailReason {
|
public enum FailReason {
|
||||||
AuthInvalid,
|
AuthInvalid,
|
||||||
MaxSessions,
|
MaxSessions,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class AuthSuccessPacket : ServerPacket {
|
public class AuthSuccessPacket : SockChatS2CPacket {
|
||||||
private readonly long UserId;
|
private readonly long UserId;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly Colour UserColour;
|
private readonly Colour UserColour;
|
||||||
|
|
|
@ -1,20 +1,17 @@
|
||||||
using System;
|
using System.Text;
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class BanListResponsePacket : ServerPacket {
|
public class BanListResponsePacket : SockChatTimedS2CPacket {
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string[] Bans;
|
private readonly string[] Bans;
|
||||||
|
|
||||||
public BanListResponsePacket(string[] bans) {
|
public BanListResponsePacket(string[] bans) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
Bans = bans;
|
Bans = bans;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
|
|
||||||
sb.AppendFormat("2\t{0}\t-1\t0\fbanlist\f", Timestamp);
|
sb.AppendFormat("2\t{0}\t-1\t0\fbanlist\f", TimeStamp.ToUnixTimeSeconds());
|
||||||
|
|
||||||
foreach(string ban in Bans)
|
foreach(string ban in Bans)
|
||||||
sb.AppendFormat(@"<a href=""javascript:void(0);"" onclick=""Chat.SendMessageWrapper('/unban '+ this.innerHTML);"">{0}</a>, ", ban);
|
sb.AppendFormat(@"<a href=""javascript:void(0);"" onclick=""Chat.SendMessageWrapper('/unban '+ this.innerHTML);"">{0}</a>, ", ban);
|
||||||
|
@ -22,7 +19,7 @@ namespace SharpChat.Packet {
|
||||||
if(Bans.Length > 0)
|
if(Bans.Length > 0)
|
||||||
sb.Length -= 2;
|
sb.Length -= 2;
|
||||||
|
|
||||||
sb.AppendFormat("\t{0}\t10010", SequenceId);
|
sb.AppendFormat("\t{0}\t10010", MessageId);
|
||||||
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class ChannelCreatePacket : ServerPacket {
|
public class ChannelCreatePacket : SockChatS2CPacket {
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
private readonly bool ChannelHasPassword;
|
private readonly bool ChannelHasPassword;
|
||||||
private readonly bool ChannelIsTemporary;
|
private readonly bool ChannelIsTemporary;
|
||||||
|
|
|
@ -1,21 +1,17 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class ChannelCreateResponsePacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class ChannelCreateResponsePacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelCreateResponsePacket(string channelName) {
|
public ChannelCreateResponsePacket(string channelName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
SockChatUtility.SanitiseChannelName(ChannelName),
|
SockChatUtility.SanitiseChannelName(ChannelName),
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,17 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class ChannelDeleteNotAllowedErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class ChannelDeleteNotAllowedErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelDeleteNotAllowedErrorPacket(string channelName) {
|
public ChannelDeleteNotAllowedErrorPacket(string channelName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
SockChatUtility.SanitiseChannelName(ChannelName),
|
SockChatUtility.SanitiseChannelName(ChannelName),
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class ChannelDeletePacket : ServerPacket {
|
public class ChannelDeletePacket : SockChatS2CPacket {
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelDeletePacket(string channelName) {
|
public ChannelDeletePacket(string channelName) {
|
||||||
|
|
|
@ -1,21 +1,17 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class ChannelDeleteResponsePacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class ChannelDeleteResponsePacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelDeleteResponsePacket(string channelName) {
|
public ChannelDeleteResponsePacket(string channelName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
SockChatUtility.SanitiseChannelName(ChannelName),
|
SockChatUtility.SanitiseChannelName(ChannelName),
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,11 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class ChannelNameFormatErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class ChannelNameFormatErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
|
|
||||||
public ChannelNameFormatErrorPacket() {
|
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("2\t{0}\t-1\t1\finchan\t{1}\t10010", Timestamp, SequenceId);
|
return string.Format(
|
||||||
|
"2\t{0}\t-1\t1\finchan\t{1}\t10010",
|
||||||
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,17 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class ChannelNameInUseErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class ChannelNameInUseErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelNameInUseErrorPacket(string channelName) {
|
public ChannelNameInUseErrorPacket(string channelName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
SockChatUtility.SanitiseChannelName(ChannelName),
|
SockChatUtility.SanitiseChannelName(ChannelName),
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,17 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class ChannelNotFoundErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class ChannelNotFoundErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelNotFoundErrorPacket(string channelName) {
|
public ChannelNotFoundErrorPacket(string channelName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
SockChatUtility.SanitiseChannelName(ChannelName),
|
SockChatUtility.SanitiseChannelName(ChannelName),
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,11 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class ChannelPasswordChangedResponsePacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class ChannelPasswordChangedResponsePacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
|
|
||||||
public ChannelPasswordChangedResponsePacket() {
|
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("2\t{0}\t-1\t0\fcpwdchan\t{1}\t10010", Timestamp, SequenceId);
|
return string.Format(
|
||||||
|
"2\t{0}\t-1\t0\fcpwdchan\t{1}\t10010",
|
||||||
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,17 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class ChannelPasswordWrongErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class ChannelPasswordWrongErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelPasswordWrongErrorPacket(string channelName) {
|
public ChannelPasswordWrongErrorPacket(string channelName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
SockChatUtility.SanitiseChannelName(ChannelName),
|
SockChatUtility.SanitiseChannelName(ChannelName),
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,11 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class ChannelRankChangedResponsePacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class ChannelRankChangedResponsePacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
|
|
||||||
public ChannelRankChangedResponsePacket() {
|
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("2\t{0}\t-1\t0\fcprivchan\t{1}\t10010", Timestamp, SequenceId);
|
return string.Format(
|
||||||
|
"2\t{0}\t-1\t0\fcprivchan\t{1}\t10010",
|
||||||
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,11 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class ChannelRankTooHighErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class ChannelRankTooHighErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
|
|
||||||
public ChannelRankTooHighErrorPacket() {
|
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("2\t{0}\t-1\t1\frankerr\t{1}\t10010", Timestamp, SequenceId);
|
return string.Format(
|
||||||
|
"2\t{0}\t-1\t1\frankerr\t{1}\t10010",
|
||||||
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,17 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class ChannelRankTooLowErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class ChannelRankTooLowErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public ChannelRankTooLowErrorPacket(string channelName) {
|
public ChannelRankTooLowErrorPacket(string channelName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
SockChatUtility.SanitiseChannelName(ChannelName),
|
SockChatUtility.SanitiseChannelName(ChannelName),
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class ChannelUpdatePacket : ServerPacket {
|
public class ChannelUpdatePacket : SockChatS2CPacket {
|
||||||
private readonly string ChannelNamePrevious;
|
private readonly string ChannelNamePrevious;
|
||||||
private readonly string ChannelNameNew;
|
private readonly string ChannelNameNew;
|
||||||
private readonly bool ChannelHasPassword;
|
private readonly bool ChannelHasPassword;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class ChannelsPopulatePacket : ServerPacket {
|
public class ChannelsPopulatePacket : SockChatS2CPacket {
|
||||||
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;
|
||||||
|
|
|
@ -1,15 +1,11 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class CommandFormatErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class CommandFormatErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
|
|
||||||
public CommandFormatErrorPacket() {
|
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("2\t{0}\t-1\t1\fcmdna\t{1}\t10010", Timestamp, SequenceId);
|
return string.Format(
|
||||||
|
"2\t{0}\t-1\t1\fcmdna\t{1}\t10010",
|
||||||
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,17 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class CommandNotAllowedErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class CommandNotAllowedErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string CommandName;
|
private readonly string CommandName;
|
||||||
|
|
||||||
public CommandNotAllowedErrorPacket(string commandName) {
|
public CommandNotAllowedErrorPacket(string commandName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
CommandName = commandName;
|
CommandName = commandName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
CommandName,
|
CommandName,
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class ContextClearPacket : ServerPacket {
|
public class ContextClearPacket : SockChatS2CPacket {
|
||||||
public enum ClearMode {
|
public enum ClearMode {
|
||||||
Messages = 0,
|
Messages = 0,
|
||||||
Users = 1,
|
Users = 1,
|
||||||
|
|
|
@ -1,15 +1,11 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class FloodWarningPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class FloodWarningPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
|
|
||||||
public FloodWarningPacket() {
|
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("2\t{0}\t-1\t0\fflwarn\t{1}\t10010", Timestamp, SequenceId);
|
return string.Format(
|
||||||
|
"2\t{0}\t-1\t0\fflwarn\t{1}\t10010",
|
||||||
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class ForceDisconnectPacket : ServerPacket {
|
public class ForceDisconnectPacket : SockChatS2CPacket {
|
||||||
private readonly long Expires;
|
private readonly long Expires;
|
||||||
|
|
||||||
public ForceDisconnectPacket() {}
|
public ForceDisconnectPacket() {}
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class KickBanNoRecordErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class KickBanNoRecordErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string TargetName;
|
private readonly string TargetName;
|
||||||
|
|
||||||
public KickBanNoRecordErrorPacket(string targetName) {
|
public KickBanNoRecordErrorPacket(string targetName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
TargetName = targetName;
|
TargetName = targetName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("2\t{0}\t-1\t1\fnotban\f{1}\t{2}\t10010", Timestamp, TargetName, SequenceId);
|
return string.Format(
|
||||||
|
"2\t{0}\t-1\t1\fnotban\f{1}\t{2}\t10010",
|
||||||
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
TargetName,
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class KickBanNotAllowedErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class KickBanNotAllowedErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
|
|
||||||
public KickBanNotAllowedErrorPacket(string userName) {
|
public KickBanNotAllowedErrorPacket(string userName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("2\t{0}\t-1\t1\fkickna\f{1}\t{2}\t10010", Timestamp, UserName, SequenceId);
|
return string.Format(
|
||||||
|
"2\t{0}\t-1\t1\fkickna\f{1}\t{2}\t10010",
|
||||||
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
UserName,
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,16 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class MOTDPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class MOTDPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string Body;
|
private readonly string Body;
|
||||||
|
|
||||||
public MOTDPacket(string body) {
|
public MOTDPacket(string body) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
Body = body;
|
Body = body;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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, SockChatUtility.SanitiseMessageBody(Body)
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
SockChatUtility.SanitiseMessageBody(Body)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class MessageAddLogPacket : ServerPacket {
|
public class MessageAddLogPacket : SockChatTimedS2CPacket {
|
||||||
private readonly long Created;
|
|
||||||
private readonly long UserId;
|
private readonly long UserId;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly Colour UserColour;
|
private readonly Colour UserColour;
|
||||||
|
@ -15,8 +14,8 @@ namespace SharpChat.Packet {
|
||||||
private readonly bool Notify;
|
private readonly bool Notify;
|
||||||
|
|
||||||
public MessageAddLogPacket(
|
public MessageAddLogPacket(
|
||||||
long msgId,
|
long messageId,
|
||||||
DateTimeOffset created,
|
DateTimeOffset timeStamp,
|
||||||
long userId,
|
long userId,
|
||||||
string userName,
|
string userName,
|
||||||
Colour userColour,
|
Colour userColour,
|
||||||
|
@ -27,8 +26,7 @@ namespace SharpChat.Packet {
|
||||||
bool isPrivate,
|
bool isPrivate,
|
||||||
bool isBroadcast,
|
bool isBroadcast,
|
||||||
bool notify
|
bool notify
|
||||||
) : base(msgId) {
|
) : base(messageId, timeStamp) {
|
||||||
Created = created.ToUnixTimeSeconds();
|
|
||||||
UserId = userId < 0 ? -1 : userId;
|
UserId = userId < 0 ? -1 : userId;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
UserColour = userColour;
|
UserColour = userColour;
|
||||||
|
@ -62,13 +60,13 @@ namespace SharpChat.Packet {
|
||||||
|
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"7\t1\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}{9}{10}{11}{12}",
|
"7\t1\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}{9}{10}{11}{12}",
|
||||||
Created,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
UserId,
|
UserId,
|
||||||
UserName,
|
UserName,
|
||||||
UserColour,
|
UserColour,
|
||||||
userPerms,
|
userPerms,
|
||||||
body,
|
body,
|
||||||
SequenceId,
|
MessageId,
|
||||||
Notify ? 1 : 0,
|
Notify ? 1 : 0,
|
||||||
1,
|
1,
|
||||||
IsAction ? 1 : 0,
|
IsAction ? 1 : 0,
|
||||||
|
|
|
@ -1,22 +1,20 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class MessageAddPacket : ServerPacket {
|
public class MessageAddPacket : SockChatTimedS2CPacket {
|
||||||
private readonly long Created;
|
|
||||||
private readonly long UserId;
|
private readonly long UserId;
|
||||||
private readonly string Body;
|
private readonly string Body;
|
||||||
private readonly bool IsAction;
|
private readonly bool IsAction;
|
||||||
private readonly bool IsPrivate;
|
private readonly bool IsPrivate;
|
||||||
|
|
||||||
public MessageAddPacket(
|
public MessageAddPacket(
|
||||||
long msgId,
|
long messageId,
|
||||||
DateTimeOffset created,
|
DateTimeOffset timeStamp,
|
||||||
long userId,
|
long userId,
|
||||||
string body,
|
string body,
|
||||||
bool isAction,
|
bool isAction,
|
||||||
bool isPrivate
|
bool isPrivate
|
||||||
) : base(msgId) {
|
) : base(messageId, timeStamp) {
|
||||||
Created = created.ToUnixTimeSeconds();
|
|
||||||
UserId = userId < 0 ? -1 : userId;
|
UserId = userId < 0 ? -1 : userId;
|
||||||
Body = body;
|
Body = body;
|
||||||
IsAction = isAction;
|
IsAction = isAction;
|
||||||
|
@ -30,10 +28,10 @@ namespace SharpChat.Packet {
|
||||||
|
|
||||||
return string.Format(
|
return string.Format(
|
||||||
"2\t{0}\t{1}\t{2}\t{3}\t{4}{5}{6}{7}{8}",
|
"2\t{0}\t{1}\t{2}\t{3}\t{4}{5}{6}{7}{8}",
|
||||||
Created,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
UserId,
|
UserId,
|
||||||
body,
|
body,
|
||||||
SequenceId,
|
MessageId,
|
||||||
1,
|
1,
|
||||||
IsAction ? 1 : 0,
|
IsAction ? 1 : 0,
|
||||||
0,
|
0,
|
||||||
|
|
|
@ -1,21 +1,17 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class MessageBroadcastPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class MessageBroadcastPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string Body;
|
private readonly string Body;
|
||||||
|
|
||||||
public MessageBroadcastPacket(string body) {
|
public MessageBroadcastPacket(string body) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
Body = body;
|
Body = body;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
SockChatUtility.SanitiseMessageBody(Body),
|
SockChatUtility.SanitiseMessageBody(Body),
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,11 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class MessageDeleteNotAllowedErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class MessageDeleteNotAllowedErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
|
|
||||||
public MessageDeleteNotAllowedErrorPacket() {
|
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("2\t{0}\t-1\t1\fdelerr\t{1}\t10010", Timestamp, SequenceId);
|
return string.Format(
|
||||||
|
"2\t{0}\t-1\t1\fdelerr\t{1}\t10010",
|
||||||
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class MessageDeletePacket : ServerPacket {
|
public class MessageDeletePacket : SockChatS2CPacket {
|
||||||
private readonly long MessageId;
|
private readonly long DeletedMessageId;
|
||||||
|
|
||||||
public MessageDeletePacket(long msgId) {
|
public MessageDeletePacket(long deletedMessageId) {
|
||||||
MessageId = msgId;
|
DeletedMessageId = deletedMessageId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("6\t{0}", MessageId);
|
return string.Format("6\t{0}", DeletedMessageId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class PardonResponsePacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class PardonResponsePacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string Subject;
|
private readonly string Subject;
|
||||||
|
|
||||||
public PardonResponsePacket(string subject) {
|
public PardonResponsePacket(string subject) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
Subject = subject;
|
Subject = subject;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("2\t{0}\t-1\t0\funban\f{1}\t{2}\t10010", Timestamp, Subject, SequenceId);
|
return string.Format(
|
||||||
|
"2\t{0}\t-1\t0\funban\f{1}\t{2}\t10010",
|
||||||
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
Subject,
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class PongPacket : ServerPacket {
|
public class PongPacket : SockChatS2CPacket {
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return "0\tpong";
|
return "0\tpong";
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class UserChannelForceJoinPacket : ServerPacket {
|
public class UserChannelForceJoinPacket : SockChatS2CPacket {
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public UserChannelForceJoinPacket(string channelName) {
|
public UserChannelForceJoinPacket(string channelName) {
|
||||||
|
|
|
@ -1,24 +1,23 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class UserChannelJoinLogPacket : ServerPacket {
|
public class UserChannelJoinLogPacket : SockChatTimedS2CPacket {
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
|
|
||||||
public UserChannelJoinLogPacket(
|
public UserChannelJoinLogPacket(
|
||||||
DateTimeOffset timestamp,
|
long messageId,
|
||||||
|
DateTimeOffset timeStamp,
|
||||||
string userName
|
string userName
|
||||||
) {
|
) : base(messageId, timeStamp) {
|
||||||
Timestamp = timestamp.ToUnixTimeSeconds();
|
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
UserName,
|
UserName,
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class UserChannelJoinPacket : ServerPacket {
|
public class UserChannelJoinPacket : SockChatS2CPacket {
|
||||||
private readonly long UserId;
|
private readonly long UserId;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly Colour UserColour;
|
private readonly Colour UserColour;
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
UserPerms.HasFlag(UserPermissions.CreateChannel) ? (
|
UserPerms.HasFlag(UserPermissions.CreateChannel) ? (
|
||||||
UserPerms.HasFlag(UserPermissions.SetChannelPermanent) ? 2 : 1
|
UserPerms.HasFlag(UserPermissions.SetChannelPermanent) ? 2 : 1
|
||||||
) : 0,
|
) : 0,
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +1,23 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class UserChannelLeaveLogPacket : ServerPacket {
|
public class UserChannelLeaveLogPacket : SockChatTimedS2CPacket {
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
|
|
||||||
public UserChannelLeaveLogPacket(
|
public UserChannelLeaveLogPacket(
|
||||||
DateTimeOffset timestamp,
|
long messageId,
|
||||||
|
DateTimeOffset timeStamp,
|
||||||
string userName
|
string userName
|
||||||
) {
|
) : base(messageId, timeStamp) {
|
||||||
Timestamp = timestamp.ToUnixTimeSeconds();
|
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
UserName,
|
UserName,
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class UserChannelLeavePacket : ServerPacket {
|
public class UserChannelLeavePacket : SockChatS2CPacket {
|
||||||
private readonly long UserId;
|
private readonly long UserId;
|
||||||
|
|
||||||
public UserChannelLeavePacket(long userId) {
|
public UserChannelLeavePacket(long userId) {
|
||||||
|
@ -7,7 +7,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("5\t1\t{0}\t{1}", UserId, SequenceId);
|
return string.Format(
|
||||||
|
"5\t1\t{0}\t{1}",
|
||||||
|
UserId,
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +1,23 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class UserConnectLogPacket : ServerPacket {
|
public class UserConnectLogPacket : SockChatTimedS2CPacket {
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
|
|
||||||
public UserConnectLogPacket(
|
public UserConnectLogPacket(
|
||||||
DateTimeOffset timestamp,
|
long messageId,
|
||||||
|
DateTimeOffset timeStamp,
|
||||||
string userName
|
string userName
|
||||||
) {
|
) : base(messageId, timeStamp) {
|
||||||
Timestamp = timestamp.ToUnixTimeSeconds();
|
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
UserName,
|
UserName,
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class UserConnectPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class UserConnectPacket : ServerPacket {
|
|
||||||
private readonly DateTimeOffset Joined;
|
|
||||||
private readonly long UserId;
|
private readonly long UserId;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly Colour UserColour;
|
private readonly Colour UserColour;
|
||||||
|
@ -10,14 +7,12 @@ namespace SharpChat.Packet {
|
||||||
private readonly UserPermissions UserPerms;
|
private readonly UserPermissions UserPerms;
|
||||||
|
|
||||||
public UserConnectPacket(
|
public UserConnectPacket(
|
||||||
DateTimeOffset joined,
|
|
||||||
long userId,
|
long userId,
|
||||||
string userName,
|
string userName,
|
||||||
Colour userColour,
|
Colour userColour,
|
||||||
int userRank,
|
int userRank,
|
||||||
UserPermissions userPerms
|
UserPermissions userPerms
|
||||||
) {
|
) {
|
||||||
Joined = joined;
|
|
||||||
UserId = userId;
|
UserId = userId;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
UserColour = userColour;
|
UserColour = userColour;
|
||||||
|
@ -28,7 +23,7 @@ namespace SharpChat.Packet {
|
||||||
public override string Pack() {
|
public override 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}",
|
||||||
Joined.ToUnixTimeSeconds(),
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
UserId,
|
UserId,
|
||||||
UserName,
|
UserName,
|
||||||
UserColour,
|
UserColour,
|
||||||
|
@ -39,7 +34,7 @@ namespace SharpChat.Packet {
|
||||||
UserPerms.HasFlag(UserPermissions.CreateChannel) ? (
|
UserPerms.HasFlag(UserPermissions.CreateChannel) ? (
|
||||||
UserPerms.HasFlag(UserPermissions.SetChannelPermanent) ? 2 : 1
|
UserPerms.HasFlag(UserPermissions.SetChannelPermanent) ? 2 : 1
|
||||||
) : 0,
|
) : 0,
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,16 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class UserDisconnectLogPacket : ServerPacket {
|
public class UserDisconnectLogPacket : SockChatTimedS2CPacket {
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly UserDisconnectReason Reason;
|
private readonly UserDisconnectReason Reason;
|
||||||
|
|
||||||
public UserDisconnectLogPacket(
|
public UserDisconnectLogPacket(
|
||||||
DateTimeOffset timestamp,
|
long messageId,
|
||||||
|
DateTimeOffset timeStamp,
|
||||||
string userName,
|
string userName,
|
||||||
UserDisconnectReason reason
|
UserDisconnectReason reason
|
||||||
) {
|
) : base(messageId, timeStamp) {
|
||||||
Timestamp = timestamp.ToUnixTimeSeconds();
|
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
Reason = reason;
|
Reason = reason;
|
||||||
}
|
}
|
||||||
|
@ -19,7 +18,7 @@ namespace SharpChat.Packet {
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
Reason switch {
|
Reason switch {
|
||||||
UserDisconnectReason.Leave => "leave",
|
UserDisconnectReason.Leave => "leave",
|
||||||
UserDisconnectReason.TimeOut => "timeout",
|
UserDisconnectReason.TimeOut => "timeout",
|
||||||
|
@ -28,7 +27,7 @@ namespace SharpChat.Packet {
|
||||||
_ => "leave",
|
_ => "leave",
|
||||||
},
|
},
|
||||||
UserName,
|
UserName,
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,14 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class UserDisconnectPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class UserDisconnectPacket : ServerPacket {
|
|
||||||
private readonly long 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 UserDisconnectPacket(
|
public UserDisconnectPacket(
|
||||||
DateTimeOffset timestamp,
|
|
||||||
long userId,
|
long userId,
|
||||||
string userName,
|
string userName,
|
||||||
UserDisconnectReason reason
|
UserDisconnectReason reason
|
||||||
) {
|
) {
|
||||||
Timestamp = timestamp.ToUnixTimeSeconds();
|
|
||||||
UserId = userId;
|
UserId = userId;
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
Reason = reason;
|
Reason = reason;
|
||||||
|
@ -31,8 +26,8 @@ namespace SharpChat.Packet {
|
||||||
UserDisconnectReason.Flood => "flood",
|
UserDisconnectReason.Flood => "flood",
|
||||||
_ => "leave",
|
_ => "leave",
|
||||||
},
|
},
|
||||||
Timestamp,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class UserNameInUseErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class UserNameInUseErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
|
|
||||||
public UserNameInUseErrorPacket(string userName) {
|
public UserNameInUseErrorPacket(string userName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("2\t{0}\t-1\t1\fnameinuse\f{1}\t{2}\t10010", Timestamp, UserName, SequenceId);
|
return string.Format(
|
||||||
|
"2\t{0}\t-1\t1\fnameinuse\f{1}\t{2}\t10010",
|
||||||
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
UserName,
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class UserNotFoundErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class UserNotFoundErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
|
|
||||||
public UserNotFoundErrorPacket(string userName) {
|
public UserNotFoundErrorPacket(string userName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("2\t{0}\t-1\t1\fusernf\f{1}\t{2}\t10010", Timestamp, UserName, SequenceId);
|
return string.Format(
|
||||||
|
"2\t{0}\t-1\t1\fusernf\f{1}\t{2}\t10010",
|
||||||
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
UserName,
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +1,20 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class UserUpdateNotificationPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class UserUpdateNotificationPacket : ServerPacket {
|
|
||||||
private readonly string PreviousName;
|
private readonly string PreviousName;
|
||||||
private readonly string NewName;
|
private readonly string NewName;
|
||||||
private readonly long Timestamp;
|
|
||||||
|
|
||||||
public UserUpdateNotificationPacket(string previousName, string newName) {
|
public UserUpdateNotificationPacket(string previousName, string newName) {
|
||||||
PreviousName = previousName;
|
PreviousName = previousName;
|
||||||
NewName = newName;
|
NewName = newName;
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
PreviousName,
|
PreviousName,
|
||||||
NewName,
|
NewName,
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class UserUpdatePacket : ServerPacket {
|
public class UserUpdatePacket : SockChatS2CPacket {
|
||||||
private readonly long UserId;
|
private readonly long UserId;
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly Colour UserColour;
|
private readonly Colour UserColour;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class UsersPopulatePacket : ServerPacket {
|
public class UsersPopulatePacket : SockChatS2CPacket {
|
||||||
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;
|
||||||
|
|
|
@ -1,21 +1,17 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class WhoChannelNotFoundErrorPacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class WhoChannelNotFoundErrorPacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string ChannelName;
|
private readonly string ChannelName;
|
||||||
|
|
||||||
public WhoChannelNotFoundErrorPacket(string channelName) {
|
public WhoChannelNotFoundErrorPacket(string channelName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override 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,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
SockChatUtility.SanitiseChannelName(ChannelName),
|
SockChatUtility.SanitiseChannelName(ChannelName),
|
||||||
SequenceId
|
MessageId
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,14 +2,12 @@
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class WhoChannelResponsePacket : ServerPacket {
|
public class WhoChannelResponsePacket : SockChatTimedS2CPacket {
|
||||||
private readonly long 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 WhoChannelResponsePacket(string channelName, string[] users, string selfName) {
|
public WhoChannelResponsePacket(string channelName, string[] users, string selfName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
ChannelName = channelName;
|
ChannelName = channelName;
|
||||||
Users = users;
|
Users = users;
|
||||||
SelfName = selfName;
|
SelfName = selfName;
|
||||||
|
@ -20,7 +18,7 @@ namespace SharpChat.Packet {
|
||||||
|
|
||||||
sb.AppendFormat(
|
sb.AppendFormat(
|
||||||
"2\t{0}\t-1\t0\fwhochan\f{1}\f",
|
"2\t{0}\t-1\t0\fwhochan\f{1}\f",
|
||||||
Timestamp,
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
SockChatUtility.SanitiseChannelName(ChannelName)
|
SockChatUtility.SanitiseChannelName(ChannelName)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -36,7 +34,7 @@ namespace SharpChat.Packet {
|
||||||
if(Users.Length > 0)
|
if(Users.Length > 0)
|
||||||
sb.Length -= 2;
|
sb.Length -= 2;
|
||||||
|
|
||||||
sb.AppendFormat("\t{0}\t10010", SequenceId);
|
sb.AppendFormat("\t{0}\t10010", MessageId);
|
||||||
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,13 +2,11 @@
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace SharpChat.Packet {
|
namespace SharpChat.Packet {
|
||||||
public class WhoServerResponsePacket : ServerPacket {
|
public class WhoServerResponsePacket : SockChatTimedS2CPacket {
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string[] Users;
|
private readonly string[] Users;
|
||||||
private readonly string SelfName;
|
private readonly string SelfName;
|
||||||
|
|
||||||
public WhoServerResponsePacket(string[] users, string selfName) {
|
public WhoServerResponsePacket(string[] users, string selfName) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
Users = users;
|
Users = users;
|
||||||
SelfName = selfName;
|
SelfName = selfName;
|
||||||
}
|
}
|
||||||
|
@ -16,7 +14,7 @@ namespace SharpChat.Packet {
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
|
|
||||||
sb.AppendFormat("2\t{0}\t-1\t0\fwho\f", Timestamp);
|
sb.AppendFormat("2\t{0}\t-1\t0\fwho\f", TimeStamp.ToUnixTimeSeconds());
|
||||||
|
|
||||||
foreach(string userName in Users) {
|
foreach(string userName in Users) {
|
||||||
sb.Append(@"<a href=""javascript:void(0);"" onclick=""UI.InsertChatText(this.innerHTML);""");
|
sb.Append(@"<a href=""javascript:void(0);"" onclick=""UI.InsertChatText(this.innerHTML);""");
|
||||||
|
@ -30,7 +28,7 @@ namespace SharpChat.Packet {
|
||||||
if(Users.Length > 0)
|
if(Users.Length > 0)
|
||||||
sb.Length -= 2;
|
sb.Length -= 2;
|
||||||
|
|
||||||
sb.AppendFormat("\t{0}\t10010", SequenceId);
|
sb.AppendFormat("\t{0}\t10010", MessageId);
|
||||||
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,21 @@
|
||||||
using System;
|
namespace SharpChat.Packet {
|
||||||
|
public class WhoisResponsePacket : SockChatTimedS2CPacket {
|
||||||
namespace SharpChat.Packet {
|
|
||||||
public class WhoisResponsePacket : ServerPacket {
|
|
||||||
private readonly long Timestamp;
|
|
||||||
private readonly string UserName;
|
private readonly string UserName;
|
||||||
private readonly string RemoteAddress;
|
private readonly string RemoteAddress;
|
||||||
|
|
||||||
public WhoisResponsePacket(string userName, string remoteAddress) {
|
public WhoisResponsePacket(string userName, string remoteAddress) {
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
|
|
||||||
UserName = userName;
|
UserName = userName;
|
||||||
RemoteAddress = remoteAddress;
|
RemoteAddress = remoteAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Pack() {
|
public override string Pack() {
|
||||||
return string.Format("2\t{0}\t-1\t0\fipaddr\f{1}\f{2}\t{3}\t10010", Timestamp, UserName, RemoteAddress, SequenceId);
|
return string.Format(
|
||||||
|
"2\t{0}\t-1\t0\fipaddr\f{1}\f{2}\t{3}\t10010",
|
||||||
|
TimeStamp.ToUnixTimeSeconds(),
|
||||||
|
UserName,
|
||||||
|
RemoteAddress,
|
||||||
|
MessageId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
15
SharpChat/SockChatS2CPacket.cs
Normal file
15
SharpChat/SockChatS2CPacket.cs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
namespace SharpChat {
|
||||||
|
public abstract class SockChatS2CPacket {
|
||||||
|
protected readonly long MessageId;
|
||||||
|
|
||||||
|
public SockChatS2CPacket() {
|
||||||
|
MessageId = SharpId.Next();
|
||||||
|
}
|
||||||
|
|
||||||
|
public SockChatS2CPacket(long messageId) {
|
||||||
|
MessageId = messageId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract string Pack();
|
||||||
|
}
|
||||||
|
}
|
15
SharpChat/SockChatTimedS2CPacket.cs
Normal file
15
SharpChat/SockChatTimedS2CPacket.cs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace SharpChat {
|
||||||
|
public abstract class SockChatTimedS2CPacket : SockChatS2CPacket {
|
||||||
|
protected readonly DateTimeOffset TimeStamp;
|
||||||
|
|
||||||
|
public SockChatTimedS2CPacket() : base() {
|
||||||
|
TimeStamp = DateTimeOffset.UtcNow;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SockChatTimedS2CPacket(long messageId, DateTimeOffset timeStamp) : base(messageId) {
|
||||||
|
TimeStamp = timeStamp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue