fix: go back to simple message handling
This commit is contained in:
parent
4dc5017843
commit
ca21e5bd7a
|
@ -1,5 +1,4 @@
|
||||||
using System.Buffers;
|
using System.Net.WebSockets;
|
||||||
using System.Net.WebSockets;
|
|
||||||
using ExtraChat.Protocol;
|
using ExtraChat.Protocol;
|
||||||
using MessagePack;
|
using MessagePack;
|
||||||
|
|
||||||
|
@ -17,30 +16,19 @@ public static class Ext {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<ResponseContainer> ReceiveMessage(this ClientWebSocket client) {
|
public static async Task<ResponseContainer> ReceiveMessage(this ClientWebSocket client) {
|
||||||
const int maxSize = 1_048_576;
|
var bytes = new ArraySegment<byte>(new byte[2048]);
|
||||||
// rent a 1 MiB byte array from the shared runtime pool
|
|
||||||
var bytes = ArrayPool<byte>.Shared.Rent(maxSize);
|
|
||||||
|
|
||||||
try {
|
WebSocketReceiveResult result;
|
||||||
WebSocketReceiveResult result;
|
var i = 0;
|
||||||
var i = 0;
|
do {
|
||||||
do {
|
result = await client.ReceiveAsync(bytes[i..], CancellationToken.None);
|
||||||
result = await client.ReceiveAsync(bytes[i..maxSize], CancellationToken.None);
|
i += result.Count;
|
||||||
i += result.Count;
|
|
||||||
|
|
||||||
// break if we've filled up the buffer, even if message isn't complete
|
if (i >= bytes.Count) {
|
||||||
if (i == maxSize) {
|
throw new Exception();
|
||||||
break;
|
}
|
||||||
}
|
} while (!result.EndOfMessage);
|
||||||
|
|
||||||
if (i > maxSize) {
|
return MessagePackSerializer.Deserialize<ResponseContainer>(bytes[..i]);
|
||||||
throw new Exception("read too many bytes for one message");
|
|
||||||
}
|
|
||||||
} while (!result.EndOfMessage);
|
|
||||||
|
|
||||||
return MessagePackSerializer.Deserialize<ResponseContainer>(bytes);
|
|
||||||
} finally {
|
|
||||||
ArrayPool<byte>.Shared.Return(bytes);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ASodium" Version="0.5.3"/>
|
<PackageReference Include="ASodium" Version="0.5.3"/>
|
||||||
<PackageReference Include="Dalamud.ContextMenu" Version="1.1.1"/>
|
<PackageReference Include="Dalamud.ContextMenu" Version="1.2.1"/>
|
||||||
<PackageReference Include="DalamudPackager" Version="2.1.8"/>
|
<PackageReference Include="DalamudPackager" Version="2.1.8"/>
|
||||||
<PackageReference Include="MessagePack" Version="2.4.35"/>
|
<PackageReference Include="MessagePack" Version="2.4.35"/>
|
||||||
<PackageReference Include="System.Net.WebSockets.Client" Version="4.3.2"/>
|
<PackageReference Include="System.Net.WebSockets.Client" Version="4.3.2"/>
|
||||||
|
|
|
@ -13,9 +13,9 @@
|
||||||
},
|
},
|
||||||
"Dalamud.ContextMenu": {
|
"Dalamud.ContextMenu": {
|
||||||
"type": "Direct",
|
"type": "Direct",
|
||||||
"requested": "[1.1.1, )",
|
"requested": "[1.2.1, )",
|
||||||
"resolved": "1.1.1",
|
"resolved": "1.2.1",
|
||||||
"contentHash": "YwqdkjEQKHW7VGGmWxhBwMpuN9twsLaO6Lm05uQ1LosN2iEKNLrAMB8LlUy8qqCojlrRnhiwece/Z6Ppvfgi6g=="
|
"contentHash": "RiBkn1OYRTnVbfUGYolLBE8MOeXjok+JiZaryb27oGa7YARCTu0XgUzkRiCglujknsHOn5kAaXsT3TUJmqMigg=="
|
||||||
},
|
},
|
||||||
"DalamudPackager": {
|
"DalamudPackager": {
|
||||||
"type": "Direct",
|
"type": "Direct",
|
||||||
|
|
Loading…
Reference in New Issue