From b6374074eee3e40f13c76d23434cc9601e6d2aaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=99=BD=E7=8C=BF?= <1083092844@qq.com> Date: Sat, 1 Apr 2023 00:05:57 +0800 Subject: [PATCH] =?UTF-8?q?ws=20=E5=B8=A7=E5=90=88=E5=B9=B6=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BarrageGrab/Proxy/TitaniumProxy.cs | 46 +++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/BarrageGrab/Proxy/TitaniumProxy.cs b/BarrageGrab/Proxy/TitaniumProxy.cs index fb3f4a8..eaab275 100644 --- a/BarrageGrab/Proxy/TitaniumProxy.cs +++ b/BarrageGrab/Proxy/TitaniumProxy.cs @@ -103,18 +103,44 @@ namespace BarrageGrab.Proxy var processid = args.HttpClient.ProcessId.Value; - var frames = args.WebSocketDecoderReceive.Decode(e.Buffer, e.Offset, e.Count).ToList(); - - foreach (var frame in frames) - { - base.FireWsEvent(new WsMessageEventArgs() + List messageData = new List(); + + foreach (var frame in args.WebSocketDecoderReceive.Decode(e.Buffer, e.Offset, e.Count)) + { + if (frame.OpCode == WebsocketOpCode.Continuation) { - ProcessID = processid, - HostName = hostname, - Payload = frame.Data.ToArray(), - ProcessName = base.GetProcessName(processid) - }); + messageData.AddRange(frame.Data.ToArray()); + continue; + } + else + { + byte[] payload; + if (messageData.Count > 0) + { + messageData.AddRange(frame.Data.ToArray()); + payload = messageData.ToArray(); + messageData.Clear(); + } + else + { + payload = frame.Data.ToArray(); + } + + base.FireWsEvent(new WsMessageEventArgs() + { + ProcessID = processid, + HostName = hostname, + Payload = payload, + ProcessName = base.GetProcessName(processid) + }); + } } + + if (messageData.Count > 0) + { + // 没有收到 WebSocket 帧的结束帧,抛出异常或者进行处理 + } + } ///