Example #1
0
        public void Run()
        {
            Compose();
            MessageSenders.FirstOrDefault(x => x.Name == "Email").Send("It will work, you will give me money");

            //foreach (var messageSenders in MessageSenders.FirstOrDefault(x => x.Name == "Email"))
            //{
            //    messageSenders.Send("Hello MEF");
            //}
        }
            public async Task <Sender> Get(string entitypath, string viaEntityPath, string namespaceName)
            {
                var buffer = await MessageSenders.GetOrAdd(entitypath + viaEntityPath + namespaceName, async s =>
                {
                    var b = new CircularBuffer <EntityClientEntry>(numberOfSendersPerEntity);
                    for (var i = 0; i < numberOfSendersPerEntity; i++)
                    {
                        var e = new EntityClientEntry
                        {
                            ClientEntity = await senderFactory(entitypath, viaEntityPath, namespaceName)
                                           .ConfigureAwait(false)
                        };
                        b.Put(e);
                    }

                    return(b);
                }).ConfigureAwait(false);

                var entry = buffer.Get();

                if (!entry.ClientEntity.IsClosed)
                {
                    return(entry.ClientEntity);
                }

                try
                {
                    await entry.Mutex.WaitAsync()
                    .ConfigureAwait(false);

                    if (entry.ClientEntity.IsClosed)
                    {
                        entry.ClientEntity = await senderFactory(entitypath, viaEntityPath, namespaceName)
                                             .ConfigureAwait(false);
                    }

                    return(entry.ClientEntity);
                }
                finally
                {
                    entry.Mutex.Release();
                }
            }
 public void Handle(int @event, PeerIdentity sender)
 {
     ReceivedMessages.Add(@event);
     MessageSenders.Add(sender);
 }