[Tweak] Socket separator (#145)

This commit is contained in:
HitPanda
2023-06-02 18:10:13 +03:00
committed by Aviu00
parent 9ec90524b1
commit 6f549f0be9
2 changed files with 19 additions and 9 deletions

View File

@@ -44,7 +44,9 @@ public sealed class UtkaTCPServer : TcpServer
{
if(!session.Authenticated) continue;
session.SendAsync(JsonSerializer.Serialize(message, message.GetType()));
var json = JsonSerializer.Serialize(message, message.GetType());
session.SendAsync(json + "&%^sep^%&");
}
}

View File

@@ -72,24 +72,32 @@ public sealed class UtkaTCPSession : TcpSession
protected override void OnDisconnected()
{
base.OnDisconnecting();
OnDisconnecting();
Dispose();
BufferCahce = string.Empty;
}
private void HandleCache()
{
var regex = new Regex("{.+?}");
var matches = regex.Matches(BufferCahce);
var handles = BufferCahce.Split("&%^sep^%&");
foreach (Match match in matches)
for (var i = 0; i < handles.Length; i++)
{
var pos = BufferCahce.IndexOf(match.Value);
BufferCahce = BufferCahce.Substring(0, pos) + BufferCahce.Substring(pos + match.Value.Length);
var handle = handles[i];
if (!ValidateMessage(match.Value, out var message))
if (i + 1 == handles.Length && !BufferCahce.EndsWith("&%^sep^%&"))
continue;
if (handle.Length == 0 || !handle.StartsWith("{\"") || !handle.EndsWith("\"}"))
continue;
var pos = BufferCahce.IndexOf(handle);
BufferCahce = BufferCahce.Substring(0, pos) + BufferCahce.Substring(pos + handle.Length + "&%^sep^%&".Length);
if (!ValidateMessage(handle, out var message))
{
this.SendAsync("Validation fail");
SendAsync("Validation fail");
return;
}