public async Task UpdateAmount(string id, int amount)
        {
            var @event = await CreateEvent(id, EventTypes.AmountUpdated, amount);

            var amountUpdated = AmountUpdated.Create(@event, id, amount);

            messageQueue.Publish(amountUpdated);
        }
 void OnAmountUpdated(AmountUpdated amountUpdated)
 {
     lock (lock_)
     {
         if (CheckMessageSanity(amountUpdated))
         {
             if (data.ContainsKey(amountUpdated.ProductId))
             {
                 var entry = data[amountUpdated.ProductId];
                 entry.Amount = amountUpdated.Amount;
             }
         }
     }
 }
Example #3
0
        private IEnumerator Calculate()
        {
            foreach (var Group in TulpGroups)
            {
                foreach (var tulp in Group.Tulps)
                {
                    HandleObject(tulp);
                }
                yield return(new WaitForSecondsRealtime(RefreshPerGroupRate));
            }
            yield return(new WaitForEndOfFrame());

            AmountUpdated?.Invoke(GlobalPaintAmounts[1].Amount);
            StartCoroutine(Calculate());
        }
        IMessage <object> ConstructMessage <T>(Event @event)
        {
            var data = @event.Data;

            if (data == null)
            {
                throw new ArgumentNullException(nameof(@event.Data));
            }

            switch (data.Type)
            {
            case EventTypes.AmountUpdated:
                var amount = data.Payload as int?;
                if (amount != null)
                {
                    return((IMessage <object>)AmountUpdated.Create(@event, data.Id, amount.Value));
                }
                break;

            case EventTypes.ProductCreated:
                if (data.Payload is Product product)
                {
                    return((IMessage <object>)ProductCreated.Create(@event, product));
                }
                break;

            case EventTypes.ProductDeleted:
                return((IMessage <object>)ProductDeleted.Create(@event, data.Id));

            case EventTypes.TitleUpdated:
                var title = data.Payload as string;
                return((IMessage <object>)TitleUpdated.Create(@event, data.Id, title));

            default:
                break;
            }

            throw new ArgumentException($"InvalidEvent data: {data.Id}, " +
                                        $"{data.Type}, {data.Payload}");
        }