Non-sites can now process & handle (site) things

This commit is contained in:
Pascal Serrarens 2025-06-06 12:37:04 +02:00
parent 53416c5ede
commit ecf6fd5e11
3 changed files with 59 additions and 25 deletions

View File

@ -244,6 +244,7 @@ namespace RoboidControl {
/// <returns>The added participant</returns>
public static Participant AddParticipant(string ipAddress, int port, Participant localParticipant = null) {
Console.WriteLine($"New Participant {ipAddress}:{port}");
// This code is only valid for site, because those can distribute networkIds.....
Participant participant = new(ipAddress, port, localParticipant) {
networkId = (byte)(Participant.participants.Count + 1)
};

View File

@ -97,7 +97,7 @@ namespace RoboidControl {
/// </summary>
/// Isolated participants do not communicate with other participants
public bool isIsolated = false;
/// <summary>
/// The remote site when this participant is connected to a site
/// </summary>
@ -379,6 +379,16 @@ namespace RoboidControl {
this.networkId = msg.networkId;
foreach (Thing thing in this.things) //Thing.GetAllThings())
sender.SendThingInfo(thing);
// HACK to get the networkId for sites corrected to 0.
// This is needed because AddParticipant assigns a networkId for non-sites
sender.networkId = 0;
UpdateEvent e = new() {
messageId = NetworkIdMsg.Id,
participant = sender
};
this.updateQueue.Enqueue(e);
}
}
@ -392,6 +402,29 @@ namespace RoboidControl {
#if DEBUG
Console.WriteLine($"{this.name}: Process ThingMsg [{msg.networkId}/{msg.thingId}] {msg.thingType} {msg.parentId}");
#endif
Thing thing = sender.Get(msg.thingId);
thing ??= ProcessNewThing(sender, msg);
if (msg.parentId != 0) {
thing.parent = sender.Get(msg.parentId);
if (thing.parent == null)
Console.WriteLine($"Could not find parent [{msg.networkId}/{msg.parentId}]");
}
else {
// Console.Write($"Dropped {thing.id}");
thing.parent = null;
}
}
protected virtual Thing ProcessNewThing(Participant sender, ThingMsg msg) {
Thing newThing = msg.thingType switch {
Thing.Type.TouchSensor => new TouchSensor(sender.root),
Thing.Type.DifferentialDrive => new DifferentialDrive(sender.root),
_ => new Thing(sender.root)
};
newThing.id = msg.thingId;
newThing.type = msg.thingType;
return newThing;
}
protected virtual void Process(Participant sender, NameMsg msg) {

View File

@ -113,33 +113,33 @@ namespace RoboidControl {
protected override void Process(Participant sender, NetworkIdMsg msg) { }
protected override void Process(Participant sender, ThingMsg msg) {
Console.WriteLine($"{this.name}: Process thing [{msg.networkId}/{msg.thingId}] {msg.thingType} {msg.parentId} ");
// protected override void Process(Participant sender, ThingMsg msg) {
// Console.WriteLine($"{this.name}: Process thing [{msg.networkId}/{msg.thingId}] {msg.thingType} {msg.parentId} ");
Thing thing = sender.Get(msg.thingId);
thing ??= ProcessNewThing(sender, msg);
// Thing thing = sender.Get(msg.thingId);
// thing ??= ProcessNewThing(sender, msg);
if (msg.parentId != 0) {
thing.parent = sender.Get(msg.parentId);
if (thing.parent == null)
Console.WriteLine($"Could not find parent [{msg.networkId}/{msg.parentId}]");
}
else {
// Console.Write($"Dropped {thing.id}");
thing.parent = null;
}
}
// if (msg.parentId != 0) {
// thing.parent = sender.Get(msg.parentId);
// if (thing.parent == null)
// Console.WriteLine($"Could not find parent [{msg.networkId}/{msg.parentId}]");
// }
// else {
// // Console.Write($"Dropped {thing.id}");
// thing.parent = null;
// }
// }
protected virtual Thing ProcessNewThing(Participant sender, ThingMsg msg) {
Thing newThing = msg.thingType switch {
Thing.Type.TouchSensor => new TouchSensor(sender.root),
Thing.Type.DifferentialDrive => new DifferentialDrive(sender.root),
_ => new Thing(sender.root)
};
newThing.id = msg.thingId;
newThing.type = msg.thingType;
return newThing;
}
// protected virtual Thing ProcessNewThing(Participant sender, ThingMsg msg) {
// Thing newThing = msg.thingType switch {
// Thing.Type.TouchSensor => new TouchSensor(sender.root),
// Thing.Type.DifferentialDrive => new DifferentialDrive(sender.root),
// _ => new Thing(sender.root)
// };
// newThing.id = msg.thingId;
// newThing.type = msg.thingType;
// return newThing;
// }
#endregion Receive