diff --git a/src/Participant.cs b/src/Participant.cs
index b1071b3..079c70c 100644
--- a/src/Participant.cs
+++ b/src/Participant.cs
@@ -244,6 +244,7 @@ namespace RoboidControl {
/// The added participant
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)
};
diff --git a/src/Participants/ParticipantUDP.cs b/src/Participants/ParticipantUDP.cs
index 40b81b5..5640756 100644
--- a/src/Participants/ParticipantUDP.cs
+++ b/src/Participants/ParticipantUDP.cs
@@ -97,7 +97,7 @@ namespace RoboidControl {
///
/// Isolated participants do not communicate with other participants
public bool isIsolated = false;
-
+
///
/// The remote site when this participant is connected to a site
///
@@ -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) {
diff --git a/src/Participants/SiteServer.cs b/src/Participants/SiteServer.cs
index 2fc6e2a..11053b3 100644
--- a/src/Participants/SiteServer.cs
+++ b/src/Participants/SiteServer.cs
@@ -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