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

View File

@ -97,7 +97,7 @@ namespace RoboidControl {
/// </summary> /// </summary>
/// Isolated participants do not communicate with other participants /// Isolated participants do not communicate with other participants
public bool isIsolated = false; public bool isIsolated = false;
/// <summary> /// <summary>
/// The remote site when this participant is connected to a site /// The remote site when this participant is connected to a site
/// </summary> /// </summary>
@ -379,6 +379,16 @@ namespace RoboidControl {
this.networkId = msg.networkId; this.networkId = msg.networkId;
foreach (Thing thing in this.things) //Thing.GetAllThings()) foreach (Thing thing in this.things) //Thing.GetAllThings())
sender.SendThingInfo(thing); 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 #if DEBUG
Console.WriteLine($"{this.name}: Process ThingMsg [{msg.networkId}/{msg.thingId}] {msg.thingType} {msg.parentId}"); Console.WriteLine($"{this.name}: Process ThingMsg [{msg.networkId}/{msg.thingId}] {msg.thingType} {msg.parentId}");
#endif #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) { 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, NetworkIdMsg msg) { }
protected override void Process(Participant sender, ThingMsg msg) { // protected override void Process(Participant sender, ThingMsg msg) {
Console.WriteLine($"{this.name}: Process thing [{msg.networkId}/{msg.thingId}] {msg.thingType} {msg.parentId} "); // Console.WriteLine($"{this.name}: Process thing [{msg.networkId}/{msg.thingId}] {msg.thingType} {msg.parentId} ");
Thing thing = sender.Get(msg.thingId); // Thing thing = sender.Get(msg.thingId);
thing ??= ProcessNewThing(sender, msg); // thing ??= ProcessNewThing(sender, msg);
if (msg.parentId != 0) { // if (msg.parentId != 0) {
thing.parent = sender.Get(msg.parentId); // thing.parent = sender.Get(msg.parentId);
if (thing.parent == null) // if (thing.parent == null)
Console.WriteLine($"Could not find parent [{msg.networkId}/{msg.parentId}]"); // Console.WriteLine($"Could not find parent [{msg.networkId}/{msg.parentId}]");
} // }
else { // else {
// Console.Write($"Dropped {thing.id}"); // // Console.Write($"Dropped {thing.id}");
thing.parent = null; // thing.parent = null;
} // }
} // }
protected virtual Thing ProcessNewThing(Participant sender, ThingMsg msg) { // protected virtual Thing ProcessNewThing(Participant sender, ThingMsg msg) {
Thing newThing = msg.thingType switch { // Thing newThing = msg.thingType switch {
Thing.Type.TouchSensor => new TouchSensor(sender.root), // Thing.Type.TouchSensor => new TouchSensor(sender.root),
Thing.Type.DifferentialDrive => new DifferentialDrive(sender.root), // Thing.Type.DifferentialDrive => new DifferentialDrive(sender.root),
_ => new Thing(sender.root) // _ => new Thing(sender.root)
}; // };
newThing.id = msg.thingId; // newThing.id = msg.thingId;
newThing.type = msg.thingType; // newThing.type = msg.thingType;
return newThing; // return newThing;
} // }
#endregion Receive #endregion Receive