Non-sites can now process & handle (site) things
This commit is contained in:
parent
53416c5ede
commit
ecf6fd5e11
@ -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)
|
||||
};
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user