diff --git a/Unity/Thing.cs b/Unity/Thing.cs
index ebacc63..c1597ab 100644
--- a/Unity/Thing.cs
+++ b/Unity/Thing.cs
@@ -128,7 +128,7 @@ namespace RoboidControl.Unity {
this.gameObject.name = core.name;
break;
case ModelUrlMsg.Id:
- Debug.Log("{this.id} Handle Model URL");
+ Debug.Log($"{this.core.id} Handle Model URL");
string extension = core.modelUrl[core.modelUrl.LastIndexOf(".")..];
if (extension == ".jpg" || extension == ".png")
StartCoroutine(LoadJPG());
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..71922cf 100644
--- a/src/Participants/SiteServer.cs
+++ b/src/Participants/SiteServer.cs
@@ -76,16 +76,11 @@ namespace RoboidControl {
if (this.isIsolated == false) {
// Send to all other participants
- //foreach (Participant participant in Participant.participants) {
for (int participantIx = 0; participantIx < Participant.participants.Count; participantIx++) {
Participant participant = Participant.participants[participantIx];
if (participant == null || participant == this)
continue;
- // PoseMsg poseMsg = new(thing.owner.networkId, thing);
- // this.Send(participant, poseMsg);
- // BinaryMsg binaryMsg = new(thing.owner.networkId, thing);
- // this.Send(participant, binaryMsg);
participant.Send(new PoseMsg(thing.owner.networkId, thing));
participant.Send(new BinaryMsg(thing.owner.networkId, thing));
}
@@ -101,7 +96,6 @@ namespace RoboidControl {
base.Process(sender, msg);
if (msg.networkId != sender.networkId) {
//Console.WriteLine($"{this.name} received New Participant -> {sender.networkId}");
- // this.Send(sender, new NetworkIdMsg(sender.networkId));
sender.Send(new NetworkIdMsg(sender.networkId));
UpdateEvent e = new() {
messageId = ParticipantMsg.Id,
@@ -113,34 +107,6 @@ 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} ");
-
- 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;
- }
-
#endregion Receive
}