コード例 #1
0
        public void Dispatch(BaseEvent domainEvent)
        {
            var handlerType     = typeof(IHandler <>).MakeGenericType(domainEvent.GetType());
            var wrapperType     = typeof(DomainEventHandler <>).MakeGenericType(domainEvent.GetType());
            var handlers        = _container.GetServices(handlerType);
            var wrappedHandlers = handlers
                                  .Cast <object>()
                                  .Select(handler => (DomainEventHandler)Activator.CreateInstance(wrapperType, handler));

            foreach (var handler in wrappedHandlers)
            {
                handler.Handle(domainEvent);
            }
        }
コード例 #2
0
ファイル: EventDataCreator.cs プロジェクト: adamfur/CqrsLab
        public static EventData ToEventData(BaseEvent evnt, IDictionary<string, object> headers)
        {
            var data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(evnt, SerializerSettings));

            var eventHeaders = new Dictionary<string, object>(headers)
            {
                {
                    "EventClrTypeName", evnt.GetType().AssemblyQualifiedName
                }
            };
            var metadata = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(eventHeaders, SerializerSettings));

            var typeName = TypeToCamelcase(evnt.GetType());
            return new EventData(evnt.EventId, typeName, true, data, metadata);
        }
コード例 #3
0
        public void PublishEvent(BaseEvent e)
        {
            var factory = new ConnectionFactory()
            {
                HostName = "192.168.1.5", //192.168.1.5
                UserName = "******",
                Password = "******"
            };

            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    JsonSerializerSettings settings = new JsonSerializerSettings();
                    settings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
                    settings.NullValueHandling  = NullValueHandling.Include;
                    string           message    = JsonConvert.SerializeObject(e, settings);
                    var              body       = Encoding.UTF8.GetBytes(message);
                    IBasicProperties properties = channel.CreateBasicProperties();
                    properties.Headers = new Dictionary <string, object>();
                    properties.Headers.Add("EventType", e.GetType().Name);
                    channel.BasicPublish("PostorderCompany", e.routingKey, properties, body);
                }
            }
        }
コード例 #4
0
ファイル: WCFEvents.cs プロジェクト: pbrach/WCF-Eventing
        public static EventName GetEventName(BaseEvent inevent)
        {
            EventName result;

            var success = Enum.TryParse(inevent.GetType().Name, true, out result);

            return(success ? result : EventName.Undefined);
        }
コード例 #5
0
ファイル: EventBus.cs プロジェクト: Ziden/Lisergy
        public void RunCallbacks(BaseEvent ev)
        {
            if (!_registeredListeners.ContainsKey(ev.GetType()))
            {
                if (!_registeredListeners.ContainsKey(ev.GetType().BaseType))
                {
                    return;
                }
            }

            var registeredEvents = _registeredListeners[ev.GetType()];

            foreach (var registeredEvent in registeredEvents)
            {
                registeredEvent.Call(ev);
            }
        }
コード例 #6
0
ファイル: Program.cs プロジェクト: EDrinks/WebApi
        static EventData GetEventData(BaseEvent evt)
        {
            var metaDataStr = JsonConvert.SerializeObject(evt.MetaData);
            var contentStr  = JsonConvert.SerializeObject(evt);

            return(new EventData(Guid.NewGuid(), evt.GetType().Name, true,
                                 Encoding.UTF8.GetBytes(contentStr), Encoding.UTF8.GetBytes(metaDataStr)));
        }
コード例 #7
0
        // Raise the event to all the listeners
        public static void Raise(BaseEvent e)
        {
            EventDelegate del;

            if (Instance.delegates.TryGetValue(e.GetType(), out del))
            {
                del.Invoke(e);
            }
        }
コード例 #8
0
        /// <summary>
        /// Call a event
        /// </summary>
        /// <param name="e">Event Type</param>
        public static void Raise(BaseEvent e)
        {
            Init();

            EventDelegate del;

            _delegates.TryGetValue(e.GetType(), out del);
            del?.Invoke(e);
        }
コード例 #9
0
ファイル: EventSystem.cs プロジェクト: Wmspier/HandOfFate
    public void Dispatch(BaseEvent e)
    {
        EventDelegate del;

        if (delegates.TryGetValue(e.GetType(), out del))
        {
            del.Invoke(e);
        }
    }
コード例 #10
0
        /// <summary>
        /// Raises an event and notifies all subscribers.
        /// </summary>
        /// <param name="evt">The event parameter</param>
        public static void Event(BaseEvent evt)
        {
            EventDelegate del;

            if (dispatchDelegates.TryGetValue(evt.GetType(), out del))
            {
                del.Invoke(evt);
            }
        }
コード例 #11
0
 /// <summary>
 /// Perform actual send
 /// </summary>
 private void Send(IDebugProcess2 process, IDebugProgram2 program, IDebugThread2 thread, BaseEvent @event)
 {
     var guid = @event.IID;
     DLog.Debug(DContext.VSDebuggerEvent, "DebugEngine Event {0} {1}", @event.GetType().Name, guid);
     var rc = callback.Event(engine, process, program, thread, @event, ref guid, (uint)@event.Attributes);
     if (!ErrorHandler.Succeeded(rc))
     {
         DLog.Error(DContext.VSDebuggerEvent, "DebugEngine Event failed {0}", rc);
     }
 }
コード例 #12
0
ファイル: Events.cs プロジェクト: nharper285/onefuzz
        public void LogEvent(BaseEvent anEvent)
        {
            var options = EntityConverter.GetJsonSerializerOptions();

            options.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
            options.Converters.Add(new RemoveUserInfo());
            var serializedEvent = JsonSerializer.Serialize(anEvent, anEvent.GetType(), options);

            _log.WithTag("Event Type", anEvent.GetEventType().ToString()).Info($"sending event: {anEvent.GetEventType()} - {serializedEvent}");
        }
コード例 #13
0
        /// <summary>
        /// General EventHandler (more like an EventHub)
        /// </summary>
        public void HandleEvent(BaseEvent inEvent)
        {
            var eventType = inEvent.GetType();

            var handlerList = _handlerActions[eventType];

            foreach (var action in handlerList)
            {
                action.Invoke(inEvent);
            }
        }
コード例 #14
0
ファイル: ServiceTest.cs プロジェクト: EDrinks/WebApi
        protected async Task WriteToStream(BaseEvent evt)
        {
            await _fixture.Context.DomainEvents.AddAsync(new DomainEvent()
            {
                CreatedOn = DateTime.UtcNow,
                CreatedBy = "system",
                EventType = evt.GetType().Name,
                Content   = JsonConvert.SerializeObject(evt)
            });

            await _fixture.Context.SaveChangesAsync();
        }
コード例 #15
0
    public void TriggerEvent(string eventName, BaseEvent e)
    {
        if (e == null)
        {
            Debug.Log("Invalid event argument: " + e.GetType().ToString());
            return;
        }

        if (delegates.ContainsKey(eventName))
        {
            delegates[eventName].DynamicInvoke(e);
        }
    }
コード例 #16
0
 private void processEvent(BaseEvent receivedEvent)
 {
     if (receivedEvent is MouseEvent)
     {
         processMouseEvent((MouseEvent)receivedEvent);
     }
     else if (receivedEvent is KeyEvent)
     {
         processKeyEvent((KeyEvent)receivedEvent);
     }
     else
     {
         throw new NotImplementedException($"Handle for event class '{receivedEvent.GetType()}' not implemented");
     }
 }
コード例 #17
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            BaseEvent e = value as BaseEvent;

            if (e == null)
            {
                return(Visibility.Collapsed);
            }

            if (e.GetType() != typeof(KillEvent) && Settings.Default.LogOnlyKillOnOverview)
            {
                return(Visibility.Collapsed);
            }

            return(Visibility.Visible);
        }
コード例 #18
0
        private static void OnLuaEvent(BaseEvent Event)
        {
            if (!EventList_.ContainsKey(Event.EventName))
            {
                return;
            }

            var Properties = Event.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
            var Table      = LuaEnv_.NewTable();

            foreach (var Property in Properties)
            {
                Table.SetInPath(Property.Name, Property.GetValue(Event));
            }

            foreach (var Evt in EventList_[Event.EventName])
            {
                Evt.Value.Invoke(Evt.Key, Table);
            }
        }
コード例 #19
0
 private static void FireWmiEventCore(BaseEvent baseEvent)
 {
     try
     {
         baseEvent.Fire();
     }
     catch (Exception exp)
     {
         string       msg          = SR.WmiEventFailure(baseEvent.GetType().Name, GetErrorMessage(exp));
         COMException comException = exp as COMException;
         if (null != comException)
         {
             if ((uint)comException.ErrorCode == WbemAccessDenied)
             {
                 msg = string.Concat(SR.ExceptionAccessDeniedFailure, msg);
             }
         }
         ReportWmiFailure(msg);
     }
 }
コード例 #20
0
        public IEnumerable <BaseEventHandler> GetEventHandlersOrDefault(BaseEvent eventPayload)
        {
            var type     = eventPayload.GetType();
            var handlers = new List <BaseEventHandler>();

            foreach (var eventHandler in eventHandlers)
            {
                if (eventHandler.CanHandleEvent(type))
                {
                    handlers.Add(eventHandler);
                }
            }

            if (handlers.Count == 0)
            {
                handlers.Add(new DefaultHandler());
            }

            return(handlers);
        }
コード例 #21
0
 public override async Task <string> HandleEvent(
     APIGatewayProxyRequest request,
     ILambdaContext context,
     string deliveryId,
     BaseEvent eventPayload)
 {
     if (eventPayload is T tPayload)
     {
         return(await HandleEvent(request, context, deliveryId, tPayload));
     }
     else
     {
         throw new ArgumentException(
                   $"EventHandler expects payload of type '{typeof(T)}', received type '{eventPayload.GetType()}'",
                   nameof(eventPayload));
     }
 }
コード例 #22
0
ファイル: Events.cs プロジェクト: ranweiler/onefuzz
        public void LogEvent(BaseEvent anEvent)
        {
            var serializedEvent = JsonSerializer.Serialize(anEvent, anEvent.GetType(), _options);

            _log.WithTag("Event Type", anEvent.GetEventType().ToString()).Info($"sending event: {anEvent.GetEventType()} - {serializedEvent}");
        }
コード例 #23
0
ファイル: GlobalUtils.cs プロジェクト: narakai/chessgame
        public static void TraceBaseEvent(BaseEvent eEvent)
        {
            Debug.Log("----------------------trace BaseEvent-----------------------------:" + eEvent.GetType());
            IDictionaryEnumerator a = eEvent.Params.GetEnumerator();

            while (a.MoveNext())
            {
                Debug.Log("key:" + a.Key);
                SFSObject o = a.Value as SFSObject;
                Debug.Log(o != null ? o.GetDump() : a.Value);
            }
            Debug.Log("=====================trace BaseEvent end===========================");
        }
コード例 #24
0
        public async Task <AggregateApplicationResult> ApplyEventAsync(BaseEvent evt)
        {
            // Lets have a constraint for item Name uniqueness
            ItemAggregate aggregate;
            BaseItemEvent itemEvent;

            switch (evt)
            {
            case ItemCreatedEvent created:
                var itemsWithSameName = await aggregatesRepository.GetByNameAsync(created.Name);

                if (itemsWithSameName.Any(x => x.LastEvent != null && !(x.LastEvent is ItemDeletedEvent)))
                {
                    return(new ItemAlreadyExistsApplicationResult("Item with the same name already exists"));
                }

                aggregate = new ItemAggregate(created.ItemId);
                itemEvent = created;
                break;

            case ItemDeletedEvent deleted:
                aggregate = await aggregatesRepository.GetByIdAsync(deleted.ItemId);

                if (aggregate == null || aggregate.LastEvent == null)
                {
                    return(new ItemNotFoundApplicationResult());
                }

                if (aggregate.LastEvent is ItemDeletedEvent)
                {
                    // It is already deleted
                    return(new SuccessAggregateApplicationResult());
                }

                itemEvent = deleted;
                break;

            case ItemUpdatedEvent updated:
                aggregate = await aggregatesRepository.GetByIdAsync(updated.ItemId);

                if (aggregate == null || aggregate.LastEvent == null || aggregate.LastEvent is ItemDeletedEvent)
                {
                    return(new ItemNotFoundApplicationResult());
                }

                if (aggregate.LastEvent is ItemUpdatedEvent lastUpdated && lastUpdated.Name.Equals(updated.Name))
                {
                    // This aggregate has already got this name
                    return(new SuccessAggregateApplicationResult());
                }

                // Looking for another aggregate with this name
                var itemsWithSameNameForUpdate = await aggregatesRepository.GetByNameAsync(updated.Name);

                if (itemsWithSameNameForUpdate.Any(x => x.LastEvent != null && !(x.LastEvent is ItemDeletedEvent)))
                {
                    return(new ItemAlreadyExistsApplicationResult("Item with the same name already exists"));
                }

                itemEvent = updated;
                break;

            default:
                return(new FailedAggregateApplicationResult($"Specified event type {evt.GetType().Name} is not supported"));
            }

            var applicationResult = aggregate.ApplyEvent(itemEvent);

            switch (applicationResult)
            {
            case SuccessAggregateApplicationResult success:
                // This method might be a root specific, because of several aggregate repositories might be impacted by one event
                this.stagedAggregates.Add(aggregate);
                break;
            }

            return(applicationResult);
        }
コード例 #25
0
        private async Task SendEvent(BaseEvent @event)
        {
            _messageSession = (IMessageSession)_serviceProvider.GetService(typeof(IMessageSession));
            await _messageSession.Publish(@event);

            _logger.LogInformation("----- Published {IntegrationEventName}: {IntegrationEventId} from {AppName} - ({@IntegrationEvent})", @event.GetType().Name, @event.Id, Program.AppName, @event);
        }
コード例 #26
0
ファイル: DebugPort.cs プロジェクト: Xtremrules/dot42
 /// <summary>
 /// Send the given event to all event sinks
 /// </summary>
 private void SendEvent(IDebugCoreServer2 server, IDebugPort2 port, IDebugProcess2 process, IDebugProgram2 program, BaseEvent @event)
 {
     var iid = @event.IID;
     DLog.Debug(DContext.VSDebuggerEvent, "DebugPort Event {0} {1}", @event.GetType().Name, iid);
     foreach (var eventSink in eventSinks)
     {
         var events = eventSink as IDebugPortEvents2;
         if (events != null)
         {
             var rc = events.Event(server, port, process, program, @event, ref iid);
             if (!ErrorHandler.Succeeded(rc))
             {
                 DLog.Error(DContext.VSDebuggerEvent, "DebugPort Event failed {0}", rc);
             }
         }
     }
 }