/// <summary> /// Call this method to add Bus to networking service. /// After this signal marked as [NetworkedSignal] will be shared via network. /// </summary> public static void Init <TBus>(INetworkBusService service) { if (!services.Contains(service)) { service.OnSignalCallback += Service_OnSignalCallback; services.Add(service); } var rrSignalBaseType = typeof(SignalBase); var networkedSignalAttributeType = typeof(NetworkedSignalAttribute); var iSerializedSignalType = typeof(ISerializedSignal); //get all fields of type Signal typeof(TBus) .GetFields() .Where(fi => rrSignalBaseType.IsAssignableFrom(fi.FieldType) && iSerializedSignalType.IsAssignableFrom(fi.FieldType) && fi.GetCustomAttributes(networkedSignalAttributeType, true).Any()) .ToList() .ForEach(fi => { var e = (ISerializedSignal)fi.GetValue(null); Subscribe(e, service); }); }
private static void Subscribe(ISerializedSignal eBase, INetworkBusService service) { var signalId = signalIdToSignalInfo.Count(); var info = new SignalInfo(eBase); eBase.SubscribeSerialized((bytes) => { if (!info.IsFired) { service.RaiseSignal(signalId, bytes); } }); signalIdToSignalInfo.Add(info); }