Participant things
This commit is contained in:
parent
425cd8d6f9
commit
b1c324f36c
@ -90,11 +90,32 @@ namespace Passer.Control.Core {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void Register<ThingClass>(byte thingType) where ThingClass : Thing {
|
public void Register<ThingClass>(byte thingType) where ThingClass : Thing {
|
||||||
thingMsgProcessors[thingType] = (byte networkId, byte thingId) =>
|
thingMsgProcessors[thingType] = (byte networkId, byte thingId) =>
|
||||||
Activator.CreateInstance(typeof(ThingClass), networkId, thingId) as ThingClass;
|
Activator.CreateInstance(typeof(ThingClass), networkId, thingId) as ThingClass;
|
||||||
Console.WriteLine($"Registering {typeof(ThingClass)} for thing type {thingType}");
|
Console.WriteLine($"Registering {typeof(ThingClass)} for thing type {thingType}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<Thing> things;
|
||||||
|
public static event Thing.ThingHandler OnNewThing;
|
||||||
|
|
||||||
|
public Thing Get(byte networkId, byte thingId) {
|
||||||
|
Thing thing = things.Find(aThing => Thing.IsThing(aThing, networkId, thingId));
|
||||||
|
return thing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Add(Thing thing, bool invokeEvent = true) {
|
||||||
|
Console.WriteLine("added thing");
|
||||||
|
Thing foundThing = Get(thing.networkId, thing.id);
|
||||||
|
|
||||||
|
if (foundThing == null) {
|
||||||
|
if (thing.id == 0)
|
||||||
|
thing.id = (byte)(things.Count + 1);
|
||||||
|
things.Add(thing);
|
||||||
|
if (invokeEvent)
|
||||||
|
OnNewThing?.Invoke(thing);
|
||||||
|
Console.Write($"Add thing [{thing.networkId}/{thing.id}] {thing.name}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Init
|
#endregion Init
|
||||||
|
|
||||||
@ -272,7 +293,7 @@ namespace Passer.Control.Core {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void Process(NameMsg msg) {
|
protected virtual void Process(NameMsg msg) {
|
||||||
//Console.WriteLine($"received name {msg.name}");
|
Console.WriteLine($"received name {msg.name}");
|
||||||
Thing thing = Thing.Get(msg.networkId, msg.thingId);
|
Thing thing = Thing.Get(msg.networkId, msg.thingId);
|
||||||
if (thing != null)
|
if (thing != null)
|
||||||
thing.name = msg.name;
|
thing.name = msg.name;
|
||||||
@ -285,6 +306,7 @@ namespace Passer.Control.Core {
|
|||||||
protected virtual void Process(PoseMsg msg) { }
|
protected virtual void Process(PoseMsg msg) { }
|
||||||
|
|
||||||
protected virtual void Process(CustomMsg msg) {
|
protected virtual void Process(CustomMsg msg) {
|
||||||
|
Console.WriteLine($"receive custom msg");
|
||||||
Thing thing = Thing.Get(msg.networkId, msg.thingId);
|
Thing thing = Thing.Get(msg.networkId, msg.thingId);
|
||||||
thing?.ProcessBinary(msg.bytes);
|
thing?.ProcessBinary(msg.bytes);
|
||||||
}
|
}
|
||||||
|
@ -35,17 +35,12 @@ namespace Passer.Control.Core {
|
|||||||
protected override void Process(RemoteParticipant sender, NetworkIdMsg msg) { }
|
protected override void Process(RemoteParticipant sender, NetworkIdMsg msg) { }
|
||||||
|
|
||||||
protected override void Process(ThingMsg msg) {
|
protected override void Process(ThingMsg msg) {
|
||||||
Console.Write("SiteServer: Processing thing msg");
|
|
||||||
Thing thing = Thing.Get(msg.networkId, msg.thingId);
|
Thing thing = Thing.Get(msg.networkId, msg.thingId);
|
||||||
if (thing == null) {
|
if (thing == null) {
|
||||||
if (thingMsgProcessors.ContainsKey(msg.thingType))
|
if (thingMsgProcessors.ContainsKey(msg.thingType))
|
||||||
thingMsgProcessors[msg.thingType](msg.networkId, msg.thingId);
|
thingMsgProcessors[msg.thingType](msg.networkId, msg.thingId);
|
||||||
// if (thingMsgProcessors.TryGetValue(msg.thingType, out ThingConstructor thingConstructor)) {
|
else
|
||||||
// thingConstructor(msg.networkId, msg.thingId);
|
new Thing(this, msg.networkId, msg.thingId, msg.thingType);
|
||||||
// }
|
|
||||||
else {
|
|
||||||
new Thing(this, msg.networkId, msg.thingId, msg.thingType);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
Thing.cs
2
Thing.cs
@ -213,7 +213,7 @@ namespace Passer.Control.Core {
|
|||||||
return thing;
|
return thing;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool IsThing(Thing thing, byte networkId, byte thingId) {
|
public static bool IsThing(Thing thing, byte networkId, byte thingId) {
|
||||||
if (thing == null)
|
if (thing == null)
|
||||||
return false;
|
return false;
|
||||||
return (thing.networkId == networkId) && (thing.id == thingId);
|
return (thing.networkId == networkId) && (thing.id == thingId);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user