public void BroadcastEvent(IEventData evt, SendParameters param)
 {
     foreach (StarCollectorPeer peer in listPeer)
     {
         peer.SendEvent(evt, param);
     }
 }
Example #2
0
 //This is the constructor for a WorkItem - the only required parameter is the threadstart itself, but you can optionally add additional parameters if you need.
 //If you don't provide an eventType or eventData, the workItem assumes it does not trigger an event.
 //If you don't tell the work item it is persistent when you create it, it will assume it only needs to be run once.
 public WorkItem(ThreadStart action, bool isPersistent = false, FlightEventType type = FlightEventType.None, IEventData eventData = null)
 {
     Action = action;
     EventType = type;
     EventData = eventData;
     IsPersistent = isPersistent;
 }
Example #3
0
 public static void EndGame(IEventData raw)
 {
     var data = (WallHit)raw;
       SetupAudio(data.State.Audio);
       if (data.Target == WallHitTarget.WALL_TOP) {
     ++data.State.Score.Player;
     data.State.NewGame();
     data.State.Flare.Show();
     raw.State.Score.Update(Config.PointsPerWin, "Won a round!");
     data.State.Audio.Play(WIN_LOSE_CHANNEL, WIN_SOUND, 1.0f);
     if (raw.State.Score.Player == Config.WinScore)
       Pongstar.Get<GameController>().Win();
       } else if (data.Target == WallHitTarget.WALL_BOTTOM) {
     ++data.State.Score.Ai;
     data.State.NewGame();
     data.State.Flare.Show();
     raw.State.Score.Update(Config.PointsPerLoss, "Lost a round");
     data.State.Audio.Play(WIN_LOSE_CHANNEL, LOSE_SOUND, 1.0f);
     if (raw.State.Score.Ai == Config.WinScore)
       Pongstar.Get<GameController>().Lose();
       }
       else {
     raw.State.Score.Update(Config.PointsPerBounce, "Bounce!");
     if (_wallAudio == null) SetupAudio(data.State.Audio);
     if (NoBounce())
       _wallAudio.Play();
       }
 }
Example #4
0
 public static void AddSparklesToWall(IEventData raw)
 {
     var data = (WallHit)raw;
       if ((data.Target == WallHitTarget.WALL_LEFT) || (data.Target == WallHitTarget.WALL_RIGHT)) {
     var s = data.State;
     s.Sparkle.CreateSparkles(data.Position, s.Ball.Velocity, SparkleType.SPARKLE_WALL);
       }
 }
        protected override void OnEvent(IEventData eventData, SendParameters sendParameters)
        {
            IPhotonEventHandler handler;

            if (EventHandlers.TryGetValue(eventData.Code, out handler))
            {
                handler.HandleEvent(eventData as EventData);
            }
        }
 public static Event Make(IEventData eventData, Guid aggregateId, int eventSequence)
 {
     return new Event {
         AggregateId = aggregateId,
         AggregateEventSequence = eventSequence,
         DateTime = System.DateTime.UtcNow,
         EventType = eventData.GetType().FullName,
         Data = JsonConvert.SerializeObject(eventData)
     };
 }
Example #7
0
        public WorkItem(ThreadStart action, ref byte[] arrayData, EventType type = EventType.None, IEventData eventData = null, bool persistent = false, bool pauseable = false)
        {
            Action = action;
            EventType = type;
            EventData = eventData;
            ArrayData = arrayData;
            _repeatable = persistent;
            Persistent = persistent;
            Pauseable = pauseable;

            if (Pauseable) MemoryMonitor.Instance.RegisterPauseableAction(this);
        }
        //this is the code that runs when all events trigger!!!
        private void TestGyro(FlightEventType eventType, IEventData eventData) {

            //since this runs when ALL events trigger, we want to stop running it if the 
            //event was NOT a gyro event.
            if (eventType != FlightEventType.Gyro) return;

            //if we got here, the event was a Gyro event, and we can trust that the eventData
            // will be GyroData rather than some other kind.
            var data = eventData as GyroData;

            //if for some reason we didn't get any data, something went wrong - just get out of 
            //here so we don't crash. 
            if (data == null) return;

            //the data was gyro data, and it isn't null! Print it to the debug window.
            Debug.Print("Gyro X: " + data.X + "  Y: " + data.Y + " Z:" + data.Z);
        }
Example #9
0
 /// <inheritdoc/>
 public Task TriggerAsync(Type eventType, IEventData eventData)
 {
     return(TriggerAsync(eventType, null, eventData));
 }
 public GroupMemberAddedSession(IRpcProtocol protocol, IEventData eventData)
     : base(protocol, eventData.Parameters)
 {
 }
Example #11
0
 public void MarkEventAsProcessed(int key, IEventData eventData)
 {
     _cache[key] = eventData.ReceivedOn.Ticks;
 }
        protected virtual void HandleUpdateGameState(IEventData eventData)
        {
            if (log.IsDebugEnabled)
            {
                log.DebugFormat("HandleUpdateGameState");
            }

            var updateEvent = new UpdateGameEvent(this.Protocol, eventData);
            if (updateEvent.IsValid == false)
            {
                string msg = updateEvent.GetErrorMessage();
                log.ErrorFormat("UpdateGame contract error: {0}", msg);
                return;
            }

            this.application.Lobby.UpdateGameState(updateEvent, this);
        }
Example #13
0
 public static void PlayerMove(IEventData raw)
 {
     var data = (PlayerInput)raw;
       if (data.Request == PlayerInputType.LEFT) {
     var delta = data.Distance < data.Target.Speed ? data.Distance : data.Target.Speed;
     data.Target.MoveLeft(delta);
       }
       else if (data.Request == PlayerInputType.RIGHT) {
     var delta = data.Distance < data.Target.Speed ? data.Distance : data.Target.Speed;
     data.Target.MoveRight(delta);
       }
 }
Example #14
0
 protected override void OnEvent(IEventData eventData, SendParameters sendParameters)
 {
     throw new NotSupportedException();
 }
Example #15
0
 public void OnEvent(IEventData eventData, SendParameters sendParameters)
 {
     HandleMessage(new Event(eventData.Code,
                             eventData.Parameters.ContainsKey(Server.SubCodeParameterCode) ? (int?)Convert.ToInt32(eventData.Parameters[Server.SubCodeParameterCode])
                         : null, eventData.Parameters));
 }
Example #16
0
 /** Test delegates */
 public void test_delegate_event2(IEventData raw)
 {
     var data = (EventHandlerTestsEvent2) raw;
       Value += data.Data;
 }
Example #17
0
 protected void Event(IEventData data)
 {
     if (RejectNextEvent == data.EventType)
     {
         data.Cancel = true;
     }
     Events.Add(data);
 }
Example #18
0
 private void OnDataFound(EventType eventName, IEventData trigger, ref byte[] arrayData) {
     if (!trigger.loggable) return;
     var thisarray = arrayData;
     var count = arrayData.Length;
     arrayData = new byte[count];
     //Debug.Print("Adding to queue... new count: " + _pendingData.Count);
     _pendingData.Enqueue(new QueuePacket(eventName, trigger, thisarray));
 }
Example #19
0
 public UnitEvent(IClaptrapIdentity claptrapIdentity, string eventTypeCode, IEventData data)
 {
     ClaptrapIdentity = claptrapIdentity;
     EventTypeCode    = eventTypeCode;
     Data             = data;
 }
Example #20
0
 public QueuePacket(EventType eventName, IEventData eventData, byte[] arrayData) {
     Name = eventName;
     EventData = eventData;
     ArrayData = arrayData;
 }
Example #21
0
 protected override void OnEvent(IEventData eventData, SendParameters sendParameters)
 {
 }
Example #22
0
 public EventPacket(IEventData value)
 {
     Value = value;
 }
Example #23
0
 /** Trigger an event */
 public void Trigger(IEventData data)
 {
     _events.Trigger(data);
 }
 /// <summary>
 /// 同步发布指定事件
 /// </summary>
 /// <param name="eventType">事件数据类型</param>
 /// <param name="eventData">事件数据</param>
 /// <param name="wait">是否等待结果返回</param>
 public virtual void Publish(Type eventType, IEventData eventData, bool wait = true)
 {
     Publish(eventType, null, eventData, wait);
 }
Example #25
0
 public abstract Task Publish(IEventData @event);
 /// <summary>
 /// 异步发布指定事件
 /// </summary>
 /// <param name="eventType">事件数据类型</param>
 /// <param name="eventData">事件数据</param>
 /// <param name="wait">是否等待结果返回</param>
 public virtual Task PublishAsync(Type eventType, IEventData eventData, bool wait = true)
 {
     return(PublishAsync(eventType, null, eventData, wait));
 }
 protected override void OnEvent(IEventData eventData, SendParameters sendParameters)
 {
     // do nothing
 }
        /// <summary>
        /// 重写以实现异步触发事件的执行
        /// </summary>
        /// <param name="factory">事件处理器工厂</param>
        /// <param name="eventType">事件类型</param>
        /// <param name="eventData">事件数据</param>
        /// <param name="wait">是否等待结果返回</param>
        /// <returns></returns>
        protected virtual Task InvokeHandlerAsync(IEventHandlerFactory factory, Type eventType, IEventData eventData, bool wait = true)
        {
            EventHandlerDisposeWrapper handlerWrapper = factory.GetHandler();
            IEventHandler handler = handlerWrapper.EventHandler;

            try
            {
                if (handler == null)
                {
                    Logger.LogWarning($"事件源“{eventData.GetType()}”的事件处理器无法找到");
                    return(Task.FromResult(0));
                }
                if (!handler.CanHandle(eventData))
                {
                    return(Task.FromResult(0));
                }
                if (wait)
                {
                    return(RunAsync(factory, handler, eventType, eventData));
                }
                Task.Run(async() =>
                {
                    await RunAsync(factory, handler, eventType, eventData);
                });
                return(Task.FromResult(0));
            }
            finally
            {
                handlerWrapper.Dispose();
            }
        }
        protected virtual void HandleRemoveGameState(IEventData eventData)
        {
            var removeEvent = new RemoveGameEvent(this.Protocol, eventData);
            if (removeEvent.IsValid == false)
            {
                string msg = removeEvent.GetErrorMessage();
                log.ErrorFormat("RemoveGame contract error: {0}", msg);
                return;
            }

            this.application.Lobby.RemoveGame(removeEvent.GameId);
        }
 private void Run(IEventHandlerFactory factory, IEventHandler handler, Type eventType, IEventData eventData)
 {
     try
     {
         handler.Handle(eventData);
     }
     catch (Exception ex)
     {
         string msg = $"执行事件“{eventType.Name}”的处理器“{handler.GetType()}”时引发异常:{ex.Message}";
         Logger.LogError(ex, msg);
     }
 }
Example #31
0
 private void IQEvent(IEventData dc)
 {
     CapturedEvent = dc.EventType;
     CapturedDC = dc;
 }
 private Task RunAsync(IEventHandlerFactory factory, IEventHandler handler, Type eventType, IEventData eventData)
 {
     try
     {
         ICancellationTokenProvider cancellationTokenProvider = _serviceProvider.GetService <ICancellationTokenProvider>();
         return(handler.HandleAsync(eventData, cancellationTokenProvider.Token));
     }
     catch (Exception ex)
     {
         string msg = $"执行事件“{eventType.Name}”的处理器“{handler.GetType()}”时引发异常:{ex.Message}";
         Logger.LogError(ex, msg);
     }
     return(Task.FromResult(0));
 }
Example #33
0
        public static void UpdateScore(IEventData raw)
        {
            var data = (CollectableHit) raw;
              raw.State.Score.Update(data.Points, "Collected a star!");

              /* Play a random star noise~ */
              SetupAudio(data.State.Audio);
              var id = nRand.Int(1, 3, 0);
              data.State.Audio.Play(COLLECT_STAR_CHANNEL, id, 0.6f);
        }
Example #34
0
 /// <summary>
 /// 同步发布指定事件
 /// </summary>
 /// <param name="eventType">事件数据类型</param>
 /// <param name="eventData">事件数据</param>
 public virtual void PublishSync(Type eventType, IEventData eventData)
 {
     PublishSync(eventType, null, eventData);
 }
Example #35
0
 public abstract Task <TResponse> Handle(IEventData <TResponse> request, CancellationToken cancellationToken);
Example #36
0
 /// <summary>
 /// 异步发布指定事件
 /// </summary>
 /// <param name="eventType">事件数据类型</param>
 /// <param name="eventData">事件数据</param>
 public virtual Task PublishAsync(Type eventType, IEventData eventData)
 {
     return(PublishAsync(eventType, null, eventData));
 }
Example #37
0
 /// <inheritdoc/>
 public void Trigger(Type eventType, IEventData eventData)
 {
     Trigger(eventType, null, eventData);
 }
Example #38
0
        /// <summary>
        /// 重写以实现异步触发事件的执行,默认异步执行将只触发事件启动
        /// </summary>
        /// <param name="factory">事件处理器工厂</param>
        /// <param name="eventType">事件类型</param>
        /// <param name="eventData">事件数据</param>
        /// <returns></returns>
        protected virtual Task InvokeHandlerAsync(IEventHandlerFactory factory, Type eventType, IEventData eventData)
        {
            IEventHandler handler = factory.GetHandler();

            if (!handler.CanHandle(eventData))
            {
                return(Task.FromResult(0));
            }
            Task.Run(async() =>
            {
                try
                {
                    await handler.HandleAsync(eventData);
                }
                catch (Exception ex)
                {
                    string msg = $"执行事件“{eventType.Name}”的处理器“{handler.GetType()}”时引发异常:{ex.Message}";
                    _Logger.LogError(ex, msg);
                }
                finally
                {
                    factory.ReleaseHandler(handler);
                }
            });
            return(Task.FromResult(0));
        }
Example #39
0
 /**
  * Queue an event callback.
  * <p>
  * Note, events are not dispatched until Dispatch() is called.
  * Also, if there is no binding for an id, it is not saved.
  */
 public void Trigger(IEventData data)
 {
     data.Handlers = (from h in _bindings where h.Matches(data) select h).ToList();
       if (data.Handlers.Any())
     _events.Add(data);
 }
Example #40
0
        private static void SerializeEventData(ReusableMemoryStream stream, IEventData eventData)
        {
            BigEndianBinaryWriter binaryWriter = new BigEndianBinaryWriter(stream);

            GpBinaryByteWriter.WriteEventData(binaryWriter, eventData);
        }
 public UpdateServerEvent(IRpcProtocol protocol, IEventData eventData)
     : base(protocol, eventData.Parameters)
 {
 }
Example #42
0
 private void IQEvent(IEventData dc)
 {
     CapturedEvent = dc.EventType;
     CapturedDC    = dc;
 }
		protected override void OnEvent(IEventData eventData, SendParameters sendParameters)
		{
			//Try to get the only parameter
			//Should be the RequestMessage
			KeyValuePair<byte, object> objectPair = eventData.Parameters.FirstOrDefault();

			//TODO: Easyception should offer Now() ctors
			Throw<InvalidOperationException>.If.IsTrue(objectPair.Value == null)?.Now();

			EventMessage message = deserializer.Deserialize<EventMessage>(objectPair.Value as byte[]);

			//TODO: Easyception should offer Now() ctors
			Throw<InvalidOperationException>.If.IsTrue(message == null)?.Now();

			//TODO: Handle decryption
			message.Payload.Deserialize(deserializer);

			networkReciever.OnNetworkMessageReceive(message, new PhotonMessageParametersAdapter(sendParameters));
		}
Example #44
0
 /// <summary>
 /// 是否可处理指定事件
 /// </summary>
 /// <param name="eventData">事件源数据</param>
 /// <returns>是否可处理</returns>
 public virtual bool CanHandle(IEventData eventData)
 {
     return(eventData.GetType() == typeof(TEventData));
 }
 //Manages responses to events - when an event is triggered, if anyone has subscribed to it, it will let them know so they can execute code
 //Keep in mind - I personify other classes and objects in code(anyone, them, they, he, she, etc) as it makes it a litte easier to talk about.
 public void TriggerEvent(FlightEventType eventType, IEventData eventData)
 {
     OnEventTriggered?.Invoke(eventType, eventData);
 }
 public void Publish(Type eventType, IEventData eventData, bool wait = true)
 {
     throw new NotImplementedException();
 }
Example #47
0
 public static void AddSparkles(IEventData raw)
 {
     var data = (PaddleHit) raw;
       var s = data.State;
       s.Sparkle.CreateSparkles(data.Position, s.Ball.Velocity, data.Type);
 }
 public Task PublishAsync(Type eventType, object eventSource, IEventData eventData, bool wait = true)
 {
     throw new NotImplementedException();
 }
 public AuthenticateUpdateEvent(IRpcProtocol protocol, IEventData eventData)
     : base(protocol, eventData.Parameters)
 {
 }
Example #50
0
 /// <summary>
 ///   Initializes a new instance of the <see cref = "ItemEventMessage" /> class.
 /// </summary>
 /// <param name = "source">
 ///   The source.
 /// </param>
 /// <param name = "eventData">
 ///   The event Data.
 /// </param>
 /// <param name = "sendParameters">
 ///   The send Options.
 /// </param>
 public ItemEventMessage(Item source, IEventData eventData, SendParameters sendParameters)
 {
     this.source         = source;
     this.eventData      = eventData;
     this.sendParameters = sendParameters;
 }
        protected virtual void HandleUpdateGameServerEvent(IEventData eventData)
        {
            var updateGameServer = new UpdateServerEvent(this.Protocol, eventData);
            if (updateGameServer.IsValid == false)
            {
                string msg = updateGameServer.GetErrorMessage();
                log.ErrorFormat("UpdateServer contract error: {0}", msg);
                return;
            }

            var previuosLoadLevel = this.LoadLevel;

            this.LoadLevel = (FeedbackLevel)updateGameServer.LoadIndex;
            this.PeerCount = updateGameServer.PeerCount;

            if ((ServerState)updateGameServer.State != this.State)
            {
                if (log.IsDebugEnabled)
                {
                    log.DebugFormat("GameServer state changed for {0}: old={1}, new={2} ", this.TcpAddress, this.State, (ServerState)updateGameServer.State);
                }

                this.State = (ServerState)updateGameServer.State;
                if (this.State == ServerState.Normal)
                {
                    if (this.application.LoadBalancer.TryAddServer(this, (int)this.LoadLevel) == false)
                    {
                        log.WarnFormat("Failed to add game server to load balancer: serverId={0}", this.ServerId);
                    }
                }
                else if (this.State == ServerState.Offline)
                {
                    ///this.RemoveGameServerPeerOnMaster();
                }
                else
                {
                    this.application.LoadBalancer.TryRemoveServer(this);
                }
            }
            else if (previuosLoadLevel != this.LoadLevel)
            {
                if (log.IsDebugEnabled)
                {
                    log.DebugFormat("UpdateGameServer - from LoadLevel {0} to {1}, PeerCount {2}", previuosLoadLevel, this.LoadLevel, this.PeerCount);
                }

                if (!this.application.LoadBalancer.TryUpdateServer(this, (int)this.LoadLevel))
                {
                    log.WarnFormat("Failed to update game server state for {0}", this.TcpAddress);
                }
            }
        }
        //
        // EventListener implementation
        //

        /// <summary><inheritDoc/></summary>
        public void EventOccurred(IEventData data, EventType type)
        {
            switch (type)
            {
            case EventType.RENDER_IMAGE:
            {
                ImageRenderInfo renderInfo = (ImageRenderInfo)data;
                Matrix          ctm        = renderInfo.GetImageCtm();
                float[]         yCoords    = new float[4];
                for (int x = 0; x < 2; x++)
                {
                    for (int y = 0; y < 2; y++)
                    {
                        Vector corner = new Vector(x, y, 1).Cross(ctm);
                        yCoords[2 * x + y] = corner.Get(Vector.I2);
                    }
                }

                Array.Sort(yCoords);
                AddVerticalUseSection(yCoords[0], yCoords[3]);
                break;
            }

            case EventType.RENDER_PATH:
            {
                PathRenderInfo renderInfo = (PathRenderInfo)data;
                if (renderInfo.GetOperation() != PathRenderInfo.NO_OP)
                {
                    Matrix ctm  = renderInfo.GetCtm();
                    Path   path = renderInfo.GetPath();
                    foreach (Subpath subpath in path.GetSubpaths())
                    {
                        List <float> yCoordsList = new List <float>();
                        foreach (Point point2d in subpath.GetPiecewiseLinearApproximation())
                        {
                            Vector vector = new Vector((float)point2d.GetX(), (float)point2d.GetY(), 1);
                            vector = vector.Cross(ctm);
                            yCoordsList.Add(vector.Get(Vector.I2));
                        }

                        if (yCoordsList.Count != 0)
                        {
                            float[] yCoords = yCoordsList.ToArray();
                            Array.Sort(yCoords);
                            AddVerticalUseSection(yCoords[0], yCoords[yCoords.Length - 1]);
                        }
                    }
                }

                break;
            }

            case EventType.RENDER_TEXT:
            {
                TextRenderInfo renderInfo  = (TextRenderInfo)data;
                LineSegment    ascentLine  = renderInfo.GetAscentLine();
                LineSegment    descentLine = renderInfo.GetDescentLine();
                float[]        yCoords     = new float[]
                {
                    ascentLine.GetStartPoint().Get(Vector.I2),
                    ascentLine.GetEndPoint().Get(Vector.I2),
                    descentLine.GetStartPoint().Get(Vector.I2),
                    descentLine.GetEndPoint().Get(Vector.I2)
                };


                Array.Sort(yCoords);
                AddVerticalUseSection(yCoords[0], yCoords[3]);
                break;
            }

            default:
            {
                break;
            }
            }
        }
        protected override void OnEvent(IEventData eventData, SendParameters sendParameters)
        {
            try
            {
                if (!this.ServerId.HasValue)
                {
                    log.Warn("received game server event but server is not registered");
                    return;
                }

                switch ((ServerEventCode)eventData.Code)
                {
                    default:
                        if (log.IsDebugEnabled)
                        {
                            log.DebugFormat("Received unknown event code {0}", eventData.Code);
                        }

                        break;

                    case ServerEventCode.UpdateServer:
                        this.HandleUpdateGameServerEvent(eventData);
                        break;

                    case ServerEventCode.UpdateGameState:
                        this.HandleUpdateGameState(eventData);
                        break;

                    case ServerEventCode.RemoveGameState:
                        this.HandleRemoveGameState(eventData);
                        break;
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
        }
Example #54
0
 public RemoveSession(IRpcProtocol protocol, IEventData eventData)
     : base(protocol, eventData.Parameters)
 {
 }
 public RemoveGameEvent(IRpcProtocol protocol, IEventData eventData)
     : base(protocol, eventData.Parameters)
 {
 }
Example #56
0
 public AttrConstraint(IDataContext context, IEventData e) : base(context, e)
 {
 }
Example #57
0
 public static void PlayerTouch(IEventData raw)
 {
     var data = (PaddleHit)raw;
       if (data.Target == data.State.PlayerPaddle) {
     raw.State.Score.Update(Config.PointsPerPaddleBounce, "Deflected!");
     if (_playerAudio == null) SetupAudio(data.State.Audio);
     if (NoBounce())
       _playerAudio.Play();
       }
       else {
     if (_aiAudio == null) SetupAudio(data.State.Audio);
     if (NoBounce())
       _aiAudio.Play();
       }
 }
Example #58
0
        private void TriggerHandlingException(Type eventType, object eventSource, IEventData eventData, List <Exception> exceptions)
        {
            //TODO: This method can be optimized by adding all possibilities to a dictionary.

            eventData.EventSource = eventSource;

            foreach (var handlerFactories in GetHandlerFactories(eventType))
            {
                foreach (var handlerFactory in handlerFactories.EventHandlerFactories)
                {
                    var eventHandler = handlerFactory.GetHandler();

                    try
                    {
                        if (eventHandler == null)
                        {
                            throw new Exception($"Registered event handler for event type {handlerFactories.EventType.Name} does not implement IEventHandler<{handlerFactories.EventType.Name}> interface!");
                        }

                        var handlerType = typeof(IEventHandler <>).MakeGenericType(handlerFactories.EventType);

                        var method = handlerType.GetMethod(
                            "HandleEvent",
                            BindingFlags.Public | BindingFlags.Instance,
                            null,
                            new[] { handlerFactories.EventType },
                            null
                            );

                        method.Invoke(eventHandler, new object[] { eventData });
                    }
                    catch (TargetInvocationException ex)
                    {
                        exceptions.Add(ex.InnerException);
                    }
                    catch (Exception ex)
                    {
                        exceptions.Add(ex);
                    }
                    finally
                    {
                        handlerFactory.ReleaseHandler(eventHandler);
                    }
                }
            }

            //Implements generic argument inheritance. See IEventDataWithInheritableGenericArgument
            if (eventType.IsGenericType &&
                eventType.GetGenericArguments().Length == 1 &&
                typeof(IEventDataWithInheritableGenericArgument).IsAssignableFrom(eventType))
            {
                var genericArg = eventType.GetGenericArguments()[0];
                var baseArg    = genericArg.BaseType;
                if (baseArg != null)
                {
                    var baseEventType   = eventType.GetGenericTypeDefinition().MakeGenericType(baseArg);
                    var constructorArgs = ((IEventDataWithInheritableGenericArgument)eventData).GetConstructorArgs();
                    var baseEventData   = (IEventData)Activator.CreateInstance(baseEventType, constructorArgs);
                    baseEventData.EventTime = eventData.EventTime;
                    Trigger(baseEventType, eventData.EventSource, baseEventData);
                }
            }
        }
Example #59
0
 public DomainEventEntry(object sourceEntity, IEventData eventData)
 {
     SourceEntity = sourceEntity;
     EventData    = eventData;
 }
 protected override void OnEvent(IEventData eventData, SendParameters sendParameters)
 {
     _serverPeer.OnEvent(eventData, sendParameters);
 }