コード例 #1
0
        private void AddSignalPacket(SignalPacket packet)
        {
            List <SignalPacket> list;

            if (!m_SignalsLastFrame.TryGetValue(packet.Signal, out list))
            {
                m_SignalsLastFrame[packet.Signal] = list = new List <SignalPacket>();
            }
            list.Add(packet);
        }
コード例 #2
0
        public bool Send([NotNull] Component sender, int signal, object data = null)
        {
            if (sender == null)
            {
                throw new ArgumentNullException("sender");
            }

            SignalPacket signalPacket = new SignalPacket {
                Data = data, Sender = sender, Signal = signal
            };

            AddSignalPacket(signalPacket);

            if (!ReceiverLookup.ContainsKey(signal))
            {
                signalPacket.NoReceivers = true;
                return(false);
            }

            List <ISignalReceiver> receivers = ReceiverLookup[signal].ToList();

            if (receivers.Any(r => r == null))
            {
                receivers = ReceiverLookup[signal] = receivers.Where(r => r != null).ToList();
            }

#if XDEBUG
            XDebug.Log(sender, "{0} --[ {1} ]--> {2}", sender.name + ":" + sender.GetType().Name, Signal.LookupName(signal),
                       receivers.AggregateString(", ") + (data != null ? " (" + data + ")" : ""));
#endif

            receivers.ForEach(r => {
                if (r != null)
                {
                    r.Receive(sender, data);
                }
            });

            return(true);
        }