public bool Handle(INetworkEventContext context, IEventEngine <INetworkEventContext> eventEngine, Event @event) { foreach (var child in _node.Children.Select(x => x.UntypedValue).OfType <IEventListener <INetworkEventContext> >()) { if (child.Handle(context, eventEngine, @event)) { return(true); } } return(false); }
/// <summary> /// Handles network events from an event engine. This implementation propagates events through the /// component hierarchy to components that implement <see cref="INetworkedComponent"/>. /// </summary> /// <param name="context">The current game context.</param> /// <param name="eventEngine">The event engine from which the event was fired.</param> /// <param name="event">The network event that is to be handled.</param> /// <returns>Whether or not the event was consumed.</returns> public virtual bool Handle(INetworkEventContext context, IEventEngine <INetworkEventContext> eventEngine, Event @event) { var networkEvent = @event as NetworkMessageReceivedEvent; if (networkEvent == null) { return(false); } var state = new EventState { Consumed = false }; if (networkEvent.GameContext != null) { _handleMessageRecievedClient.Invoke( networkEvent.GameContext, networkEvent.UpdateContext, networkEvent.Dispatcher, networkEvent.Client, networkEvent.Payload, networkEvent.ProtocolID, state); } if (networkEvent.ServerContext != null && !state.Consumed) { _handleMessageRecievedServer.Invoke( networkEvent.ServerContext, networkEvent.UpdateContext, networkEvent.Dispatcher, networkEvent.Client, networkEvent.Payload, networkEvent.ProtocolID, state); } return(state.Consumed); }