@@ -136,7 +136,7 @@ private void SendPacket<T>(IWebSocketConnection socket, T packet) where T : IMcA
136136 _writer . Reset ( ) ;
137137 _writer . Put ( ( byte ) packet . PacketType ) ;
138138 packet . Serialize ( _writer ) ;
139- SendPacket ( socket , Z85 . GetStringWithPadding ( _writer . CopyData ( ) ) ) ;
139+ SendPacketCommand ( socket , Z85 . GetStringWithPadding ( _writer . CopyData ( ) ) ) ;
140140 }
141141 }
142142 finally
@@ -145,9 +145,16 @@ private void SendPacket<T>(IWebSocketConnection socket, T packet) where T : IMcA
145145 }
146146 }
147147
148- private void SendPacket ( IWebSocketConnection socket , string packetData )
148+ private void SendPacketCommand ( IWebSocketConnection socket , string packetData )
149149 {
150- var packet = new McWssCommandRequest ( $ "{ Config . TunnelCommand } \" { packetData } \" ") ;
150+ var packet = new McWssCommandRequest ( $ "{ Config . SendTunnelCommand } \" { packetData } \" ")
151+ { header = { requestId = Guid . Empty . ToString ( ) } } ;
152+ socket . Send ( JsonSerializer . Serialize ( packet ) ) ;
153+ }
154+
155+ private void SendReceiveCommand ( IWebSocketConnection socket )
156+ {
157+ var packet = new McWssCommandRequest ( $ "{ Config . ReceiveTunnelCommand } ") ;
151158 socket . Send ( JsonSerializer . Serialize ( packet ) ) ;
152159 }
153160
@@ -174,11 +181,17 @@ private void UpdatePeer(KeyValuePair<IWebSocketConnection, McApiNetPeer> peer)
174181 while ( peer . Value . RetrieveOutboundPacket ( out var outboundPacket ) )
175182 {
176183 sent = true ;
177- SendPacket ( peer . Key , Z85 . GetStringWithPadding ( outboundPacket ) ) ;
184+ SendPacketCommand ( peer . Key , Z85 . GetStringWithPadding ( outboundPacket ) ) ;
178185 }
179186
180187 if ( ! sent )
181- SendPacket ( peer . Key , string . Empty ) ;
188+ SendPacketCommand ( peer . Key , string . Empty ) ;
189+
190+ while ( peer . Value . OutgoingQueueCount > 0 )
191+ {
192+ peer . Value . OutgoingQueueCount -- ;
193+ SendReceiveCommand ( peer . Key ) ;
194+ }
182195
183196 switch ( peer . Value . Connected )
184197 {
@@ -212,32 +225,41 @@ private void OnMessageReceived(IWebSocketConnection socket, string message)
212225 try
213226 {
214227 var genericPacket = JsonSerializer . Deserialize < McWssGenericPacket > ( message ) ;
215- if ( genericPacket == null ) return ;
228+ if ( genericPacket == null || genericPacket . header . messagePurpose != "commandResponse" ) return ;
229+ var commandResponsePacket = JsonSerializer . Deserialize < McWssCommandResponse > ( message ) ;
230+ if ( commandResponsePacket is not { StatusCode : 0 } ) return ;
216231
217- switch ( genericPacket . header . messagePurpose )
218- {
219- case "commandResponse" :
220- var commandResponsePacket = JsonSerializer . Deserialize < McWssCommandResponse > ( message ) ;
221- if ( commandResponsePacket != null && _mcApiPeers . TryGetValue ( socket , out var peer ) &&
222- ! string . IsNullOrWhiteSpace ( commandResponsePacket . StatusMessage ) &&
223- commandResponsePacket . StatusCode == 0 )
224- {
225- var packets = commandResponsePacket . StatusMessage . Split ( "|" ) ;
226- foreach ( var packet in packets )
227- {
228- try
229- {
230- peer . ReceiveInboundPacket ( Z85 . GetBytesWithPadding ( packet ) ) ;
231- }
232- catch
233- {
234- //Ignored
235- }
236- }
237- }
232+ if ( commandResponsePacket . header . requestId == Guid . Empty . ToString ( ) )
233+ HandleSendCommandResponse ( socket , commandResponsePacket . body . statusMessage ) ;
234+ else
235+ HandleReceiveCommandResponse ( socket , commandResponsePacket . body . statusMessage ) ;
236+ }
237+ catch
238+ {
239+ //Ignored
240+ }
241+ }
238242
239- break ;
240- }
243+ private void HandleSendCommandResponse ( IWebSocketConnection socket , string data )
244+ {
245+ try
246+ {
247+ if ( ! _mcApiPeers . TryGetValue ( socket , out var peer ) || ! int . TryParse ( data , out var count ) ||
248+ string . IsNullOrWhiteSpace ( data ) ) return ;
249+ peer . OutgoingQueueCount = count ;
250+ }
251+ catch
252+ {
253+ //Ignored
254+ }
255+ }
256+
257+ private void HandleReceiveCommandResponse ( IWebSocketConnection socket , string data )
258+ {
259+ try
260+ {
261+ if ( ! _mcApiPeers . TryGetValue ( socket , out var peer ) || string . IsNullOrWhiteSpace ( data ) ) return ;
262+ peer . ReceiveInboundPacket ( Z85 . GetBytesWithPadding ( data ) ) ;
241263 }
242264 catch
243265 {
@@ -654,7 +676,7 @@ private void HandleSetEntityMuffleFactorRequestPacket(McApiSetEntityMuffleFactor
654676 }
655677 }
656678
657- //Resharper disable All
679+ //Resharper disable All
658680 private class Rawtext
659681 {
660682 public RawtextMessage [ ] rawtext { get ; set ; } = [ ] ;
@@ -664,5 +686,6 @@ private class RawtextMessage
664686 {
665687 public string text { get ; set ; } = string . Empty ;
666688 }
667- //Resharper enable All
689+
690+ //Resharper enable All
668691}
0 commit comments