From a0e6fbbeeaedf9a2620307b80f806950c99a0252 Mon Sep 17 00:00:00 2001 From: flashwave Date: Mon, 20 May 2024 16:24:14 +0000 Subject: [PATCH] Packet packing micro optimisation. --- SharpChat/ChatContext.cs | 13 ++++++++++--- SharpChat/ConnectionInfo.cs | 10 ++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/SharpChat/ChatContext.cs b/SharpChat/ChatContext.cs index 51a7b12..9afb90c 100644 --- a/SharpChat/ChatContext.cs +++ b/SharpChat/ChatContext.cs @@ -372,14 +372,20 @@ namespace SharpChat { } public void Send(SockChatS2CPacket packet) { - Connections.WithAuthed(conn => conn.Send(packet)); + string data = packet.Pack(); + Connections.WithAuthed(conn => conn.Send(data)); } public void SendTo(UserInfo user, SockChatS2CPacket packet) { - Connections.WithUser(user, conn => conn.Send(packet)); + string data = packet.Pack(); + Connections.WithUser(user, conn => conn.Send(data)); } public void SendTo(ChannelInfo channel, SockChatS2CPacket packet) { + SendTo(channel, packet.Pack()); + } + + public void SendTo(ChannelInfo channel, string packet) { long[] userIds = ChannelsUsers.GetChannelUserIds(channel); foreach(long userId in userIds) Connections.WithUser(userId, conn => conn.Send(packet)); @@ -387,8 +393,9 @@ namespace SharpChat { public void SendToUserChannels(UserInfo user, SockChatS2CPacket packet) { ChannelInfo[] chans = GetUserChannels(user); + string data = packet.Pack(); foreach(ChannelInfo chan in chans) - SendTo(chan, packet); + SendTo(chan, data); } public void ForceChannel(UserInfo user, ChannelInfo? chan = null) { diff --git a/SharpChat/ConnectionInfo.cs b/SharpChat/ConnectionInfo.cs index 5c37fbf..aba6311 100644 --- a/SharpChat/ConnectionInfo.cs +++ b/SharpChat/ConnectionInfo.cs @@ -42,12 +42,14 @@ namespace SharpChat { } public void Send(SockChatS2CPacket packet) { - if(!Socket.IsAvailable) - return; - string data = packet.Pack(); if(!string.IsNullOrWhiteSpace(data)) - Socket.Send(data).Wait(); + Send(data); + } + + public void Send(string packet) { + if(Socket.IsAvailable) + Socket.Send(packet).Wait(); } public void BumpPing() {