Monitor for multipackets

This commit is contained in:
Pascal Serrarens 2025-06-06 09:14:17 +02:00
parent 5759412f70
commit 690426eb69

View File

@ -305,37 +305,58 @@ namespace RoboidControl {
} }
public void ReceiveData(byte[] data, Participant sender) { public void ReceiveData(byte[] data, Participant sender) {
byte msgId = data[0]; int dataIx = 0;
byte msgId = data[dataIx];
if (msgId == 0xFF) { if (msgId == 0xFF) {
// Timeout // Timeout
return; return;
} }
switch (msgId) { switch (msgId) {
case ParticipantMsg.Id: // 0xA0 / 160 case ParticipantMsg.Id: { // 0xA0 / 160
this.Process(sender, new ParticipantMsg(data)); ParticipantMsg msg = new(data);
this.Process(sender, msg);
dataIx += ParticipantMsg.length;
}
break; break;
case NetworkIdMsg.Id: // 0xA1 / 161 case NetworkIdMsg.Id: {// 0xA1 / 161
this.Process(sender, new NetworkIdMsg(data)); NetworkIdMsg msg = new(data);
this.Process(sender, msg);
dataIx += NetworkIdMsg.length;
}
break; break;
case InvestigateMsg.Id: // 0x81 case InvestigateMsg.Id: // 0x81
// result = await InvestigateMsg.Receive(dataStream, client, packetSize); // result = await InvestigateMsg.Receive(dataStream, client, packetSize);
break; break;
case ThingMsg.id: // 0x80 / 128 case ThingMsg.id: { // 0x80 / 128
this.Process(sender, new ThingMsg(data)); ThingMsg msg = new(data);
this.Process(sender, msg);
dataIx += ThingMsg.length;
}
break; break;
case NameMsg.Id: // 0x91 / 145 case NameMsg.Id: { // 0x91 / 145
this.Process(sender, new NameMsg(data)); NameMsg msg = new(data);
this.Process(sender, msg);
dataIx += NameMsg.length + msg.nameLength;
}
break; break;
case ModelUrlMsg.Id: // 0x90 / 144 case ModelUrlMsg.Id: { // 0x90 / 144
this.Process(sender, new ModelUrlMsg(data)); ModelUrlMsg msg = new(data);
this.Process(sender, msg);
dataIx += ModelUrlMsg.length + msg.urlLength;
}
break; break;
case PoseMsg.Id: // 0x10 / 16 case PoseMsg.Id: { // 0x10 / 16
this.Process(sender, new PoseMsg(data)); PoseMsg msg = new(data);
// result = await PoseMsg.Receive(dataStream, client, packetSize); this.Process(sender, msg);
dataIx += msg.length;
}
break; break;
case BinaryMsg.Id: // 0xB1 / 177 case BinaryMsg.Id: { // 0xB1 / 177
this.Process(sender, new BinaryMsg(data)); BinaryMsg msg = new(data);
this.Process(sender, msg);
dataIx += BinaryMsg.length + msg.dataLength;
}
break; break;
case TextMsg.Id: // 0xB0 / 176 case TextMsg.Id: // 0xB0 / 176
// result = await TextMsg.Receive(dataStream, client, packetSize); // result = await TextMsg.Receive(dataStream, client, packetSize);
@ -347,6 +368,8 @@ namespace RoboidControl {
default: default:
break; break;
} }
if (dataIx < data.Length)
Console.WriteLine($"####### Buffer not fully read, remaining {data.Length - dataIx}");
} }
protected virtual void Process(Participant sender, ParticipantMsg msg) { protected virtual void Process(Participant sender, ParticipantMsg msg) {
@ -401,7 +424,7 @@ namespace RoboidControl {
protected virtual void Process(Participant sender, PoseMsg msg) { protected virtual void Process(Participant sender, PoseMsg msg) {
#if DEBUG #if DEBUG
// Console.WriteLine($"{this.name}: Process PoseMsg [{msg.networkId}/{msg.thingId}] {msg.poseType}"); Console.WriteLine($"{this.name}: Process PoseMsg [{msg.networkId}/{msg.thingId}] {msg.poseType}");
#endif #endif
Participant owner = Participant.GetParticipant(msg.networkId); Participant owner = Participant.GetParticipant(msg.networkId);
if (owner == null) if (owner == null)