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>
|
/// <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)
|
||||||
};
|
};
|
||||||
|
@ -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) {
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user