public override void Execute()
        {
            //step1. Concret receiver registry information
            this.ReceiverTable.Receivers = getReceiverRegistryInfo();

            //step2. Concret receiver
            bool keyExist = this.DataConnection.KeyExist(KeyName.ReceiverReply);

            if (keyExist)
            {
                this.ReceiverTable.Receivers = getFullReceiverInfo(this.ReceiverTable.Receivers);
            }

            //step3. Subscribe Channel
            this._ctx.MsgConnection.SubscribeMessage <ReceiverRecord>(ChannelName.ReceiverRegistry, rcd =>
            {
                ReceiverRecord target =
                    this.ReceiverTable.Receivers.FirstOrDefault(o => o.ReceiverNodeId == rcd.ReceiverNodeId);

                if (target == null)
                {
                    this.ReceiverTable.Receivers.Add(
                        new ReceiverRecord
                    {
                        ReceiverId     = rcd.ReceiverId,
                        ReceiverNodeId = rcd.ReceiverNodeId,
                        UnReplyCounter = 0
                    });
                }
                else
                {
                    target.ReceiverId = rcd.ReceiverId;
                }
            });
        }
        public void registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
        {
            Hashtable var3 = this.mReceivers;

            lock (this.mReceivers)
            {
                ReceiverRecord entry   = new ReceiverRecord(filter, receiver);
                var            filters = this.mReceivers[receiver];
                if (filters == null)
                {
                    filters = new List <IntentFilter>();
                    this.mReceivers[receiver] = filters;
                }

                filters.Add(filter);

                for (int i = 0; i < filter.CountActions(); ++i)
                {
                    string action  = filter.GetAction(i);
                    var    entries = this.mActions[action];
                    if (entries == null)
                    {
                        entries = new List <ReceiverRecord>();
                        this.mActions[action] = entries;
                    }

                    entries.Add(entry);
                }
            }
        }
Beispiel #3
0
        public void Should_HasOneReceiverRecord_When_OneReceiverHasRegistered()
        {
            //Arrange
            string         receiverId = Guid.NewGuid().ToString();
            ReceiverRecord expect     = new ReceiverRecord {
                ReceiverId = receiverId, ReceiverNodeId = 0, UnReplyCounter = 0
            },
                           actual = null;

            _ctx.DataConnection.KeyExist(KeyName.ReceiverRegistry).Returns <bool>(true);
            _ctx.DataConnection.GetHashTable <int>(KeyName.ReceiverRegistry)
            .Returns <IDictionary <string, int> >(new Dictionary <string, int> {
                { receiverId, 0 }
            });

            _ctx.DataConnection.KeyExist(KeyName.ReceiverReply).Returns <bool>(true);
            _ctx.DataConnection.GetHashTable <int>(KeyName.ReceiverReply)
            .Returns <IDictionary <string, int> >(new Dictionary <string, int> {
                { "0", 0 }
            });

            //Act
            this._ctx.Initial();
            actual = this._ctx.ReceiverTable.Receivers.ElementAt(0);

            //Assert
            actual.Should().NotBeNull().And.Be(expect);
        }
        public override void Execute()
        {
            ReceiverRecord target = this.ReceiverTable.Receivers.FirstOrDefault(
                o => o.ReceiverNodeId.Equals(this.ReceiverTable.CandidateInfo[this.LogType]));
            string receiverId = target == null ? string.Empty : target.ReceiverId;

            //step1. Save data
            this.DataConnection.Save <T>(this.DataKey, this.DataValue);
            this.DataConnection.SetHashTable_Plus(KeyName.ReceiverReply, target.ReceiverNodeId.ToString());
        }
        public bool sendBroadcast(Intent intent)
        {
            Hashtable var2 = this.mReceivers;

            lock (this.mReceivers)
            {
                string        action     = intent.Action;
                string        type       = intent.ResolveTypeIfNeeded(this.mAppContext.ContentResolver);
                Uri           data       = intent.Data;
                string        scheme     = intent.Scheme;
                ISet <object> categories = intent.Categories;
                bool          debug      = (intent.Flags & 8) != 0;
                if (debug)
                {
                    Logger.v("LocalBroadcastManager", "Resolving type " + type + " scheme " + scheme + " of intent " + intent);
                }

                var entries = this.mActions[intent.Action];
                if (entries != null)
                {
                    if (debug)
                    {
                        Logger.v("LocalBroadcastManager", "Action list: " + entries);
                    }

                    List <object> receivers = null;

                    int i;
                    for (i = 0; i < entries.Count; ++i)
                    {
                        ReceiverRecord receiver = (ReceiverRecord)entries[i];
                        if (debug)
                        {
                            Logger.v("LocalBroadcastManager", "Matching against filter " + receiver.filter);
                        }

                        if (receiver.broadcasting)
                        {
                            if (debug)
                            {
                                Logger.v("LocalBroadcastManager", "  Filter\'s target already added");
                            }
                        }
                        else
                        {
                            int match = receiver.filter.Match(action, type, scheme, data,
                                                              categories, "LocalBroadcastManager");
                            if (match >= 0)
                            {
                                if (debug)
                                {
                                    Logger.v("LocalBroadcastManager", "  Filter matched!  match=0x" + match.ToString("x"));
                                }

                                if (receivers == null)
                                {
                                    receivers = new List <object>();
                                }

                                receivers.Add(receiver);
                                receiver.broadcasting = true;
                            }
                            else if (debug)
                            {
                                string reason;
                                switch (match)
                                {
                                case -4:
                                    reason = "category";
                                    break;

                                case -3:
                                    reason = "action";
                                    break;

                                case -2:
                                    reason = "data";
                                    break;

                                case -1:
                                    reason = "type";
                                    break;

                                default:
                                    reason = "unknown reason";
                                    break;
                                }

                                Logger.v("LocalBroadcastManager", "  Filter did not match: " + reason);
                            }
                        }
                    }

                    if (receivers != null)
                    {
                        for (i = 0; i < receivers.Count; ++i)
                        {
                            ((ReceiverRecord)receivers[i]).broadcasting = false;
                        }

                        this.mPendingBroadcasts.Add(new BroadcastRecord(intent, receivers));
                        if (!this.mHandler.HasMessages(1))
                        {
                            this.mHandler.SendEmptyMessage(1);
                        }

                        return(true);
                    }
                }

                return(false);
            }
        }