コード例 #1
0
        /// <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);
            });
        }
コード例 #2
0
        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);
        }