Skip to content

Commit 8e3cda3

Browse files
committed
Change data transfer method.
1 parent 387204d commit 8e3cda3

File tree

3 files changed

+57
-32
lines changed

3 files changed

+57
-32
lines changed

VoiceCraft.Core/Network/McApiNetPeer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class McApiNetPeer
1313
public DateTime LastPing { get; set; } = DateTime.UtcNow;
1414
public bool Connected { get; private set; }
1515
public string Token { get; private set; } = string.Empty;
16+
public int OutgoingQueueCount { get; set; }
1617

1718
public event Action<McApiNetPeer>? OnConnected;
1819
public event Action<McApiNetPeer>? OnDisconnected;

VoiceCraft.Server/Config/McWssConfig.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ public class McWssConfig
77
public string Hostname { get; set; } = "ws://127.0.0.1:9051/";
88
public uint MaxClients { get; set; } = 1;
99
public uint MaxTimeoutMs { get; set; } = 10000;
10-
public string TunnelCommand { get; set; } = "voicecraft:data_tunnel";
10+
public string SendTunnelCommand { get; set; } = "voicecraft:send_data_tunnel";
11+
public string ReceiveTunnelCommand { get; set; } = "voicecraft:receive_data_tunnel";
1112
}

VoiceCraft.Server/Servers/McWssServer.cs

Lines changed: 54 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)