Exemplo n.º 1
0
        public Task <CommandResult> Send(ICommand message, Peer peer)
        {
            lock (_commands)
            {
                _commands.Add(message);
                if (peer != null)
                {
                    _messagesByPeerId.GetValueOrAdd(peer.Id, p => new List <IMessage>()).Add(message);
                }

                _peerByCommand[message] = peer;
            }

            var handler = (peer != null) ? _handlers.GetValueOrDefault(new HandlerKey(message.GetType(), peer.Id)) : null;

            if (handler == null)
            {
                handler = _handlers.GetValueOrDefault(new HandlerKey(message.GetType(), default(PeerId)));
            }

            return(HandlerExecutor.Execute(message, handler));
        }
Exemplo n.º 2
0
        public Task <CommandResult> Send(ICommand message, Peer peer)
        {
            if (Serializer.TryClone(message, out var clone))
            {
                message = clone;
            }

            lock (_commands)
            {
                _commands.Add(message);
                if (peer != null)
                {
                    _messagesByPeerId.GetValueOrAdd(peer.Id, p => new List <IMessage>()).Add(message);
                }

                _peerByCommand[message] = peer;
            }

            Func <IMessage, object> handler;

            if (peer != null)
            {
                _handlers.TryGetValue(new HandlerKey(message.GetType(), peer.Id), out handler);
            }
            else
            {
                handler = null;
            }

            // TODO why do we fall back in all cases?
            if (handler == null)
            {
                _handlers.TryGetValue(new HandlerKey(message.GetType(), default), out handler);
            }

            return(HandlerExecutor.Execute(message, handler));
        }
Exemplo n.º 3
0
    /// <summary>
    /// Prepare the invoke parameters. Adds default values if a parameter is missing.
    /// </summary>
    /// <param name="originalParameters">Original parameters.</param>
    /// <param name="executor">Handler executor.</param>
    /// <returns>Handler parameters.</returns>
    private object[] PrepareParameters(object[] originalParameters, HandlerExecutor executor)
    {
        if (!executor.MethodParameters.Any())
        {
            return(null);
        }

        var parameters = new object[executor.MethodParameters.Length];

        for (var i = 0; i < parameters.Length; i++)
        {
            ParameterInfo methodParameterInfo = executor.MethodParameters.ElementAt(i);

            if (i < originalParameters.Length)
            {
                Type originalObjectType = originalParameters[i]?.GetType();

                if (!methodParameterInfo.ParameterType.IsAssignableFrom(originalObjectType))
                {
                    object transformedParameter = _parameterTransformer?.Transform(originalParameters[i], methodParameterInfo.ParameterType.GetTypeInfo());

                    parameters[i] = transformedParameter ?? executor.GetDefaultValueForParameter(i);
                }
                else
                {
                    parameters[i] = originalParameters[i];
                }
            }
            else
            {
                parameters[i] = executor.GetDefaultValueForParameter(i);
            }
        }

        return(parameters);
    }
 /// <summary>
 /// Creates a new <see cref="HandlerActionInvokerCacheEntry"/> instance.
 /// </summary>
 /// <param name="handlerType">Target handler type.</param>
 /// <param name="handlerFactory">Handler factory creator function.</param>
 /// <param name="handlerReleaser">Handler releaser action.</param>
 /// <param name="handlerExecutor">Handler action executor.</param>
 internal HandlerActionInvokerCacheEntry(Type handlerType, Func <Type, object> handlerFactory, Action <object> handlerReleaser, HandlerExecutor handlerExecutor)
 {
     HandlerType     = handlerType;
     HandlerFactory  = handlerFactory;
     HandlerReleaser = handlerReleaser;
     HandlerExecutor = handlerExecutor;
 }
Exemplo n.º 5
0
 private void OnGenerateLiquibaseCommand(object obj)
 {
     HandlerExecutor.Execute <GenerateLiquibaseHandler>(ExecutionEvent.Create(obj as List <TreeNavigationItem>));
 }
Exemplo n.º 6
0
 private void OnCloseProjectCommand(object obj)
 {
     HandlerExecutor.Execute <CloseProjectHandler>(null);
 }
Exemplo n.º 7
0
 private void OnOpenProjectCommand(object obj)
 {
     HandlerExecutor.Execute <OpenProjectHandler>(null);
 }
Exemplo n.º 8
0
 public void AddExecutor(HandlerExecutor executor)
 {
     throw new NotImplementedException();
 }
 private void OnCopyCommand(object obj)
 {
     HandlerExecutor.Execute <CopyHandler>(ExecutionEvent.Create(obj as List <TreeNavigationItem>));
 }
 private void OnUpdateCommand(object obj)
 {
     HandlerExecutor.ExecuteEx(typeof(UpdateEntityHandler <>), obj);
 }
 private void OnNewCompmositeTypeElementCommand(object obj)
 {
     HandlerExecutor.Execute <NewCompositeTypeElementHandler>(ExecutionEvent.Create(obj as List <TreeNavigationItem>));
 }
 private void OnNewFolderCommand(object obj)
 {
     HandlerExecutor.Execute <NewFolderHandler>(ExecutionEvent.Create(obj as List <TreeNavigationItem>));
 }
 private void OnPasteCommand(object obj)
 {
     HandlerExecutor.ExecuteEx(typeof(PasteHandler <>), obj);
 }
 private void OnSetAsDefaultCommand(object obj)
 {
     HandlerExecutor.Execute <DefaultHandler>(ExecutionEvent.Create((List <TreeNavigationItem>)obj, GetMasterNavigationItem()));
 }