Пример #1
0
        private static IPort Create_qualified_port(string flowname, string portFullname)
        {
            var port = new Port(portFullname);

            if (Is_root_flowname(flowname))
            {
                return(port);
            }
            return(port.IsRooted ? Port.Uproot(port)
                                    : Port.Build(flowname, port.OperationName, port.InstanceNumber, port.Name));
        }
Пример #2
0
        private void Put_output_in_same_context_as_input(Task task, IMessage output)
        {
            if (output is ContextualizedMessage)
            {
                Result(output);
            }
            else
            {
                if (!(task.Operation is IFlow) && task.Message.Port.Path != output.Port.Path)
                {
                    output =
                        new Message(
                            Port.Build(task.Message.Port.Path, output.Port.OperationName, output.Port.InstanceNumber,
                                       output.Port.Name),
                            output.Data,
                            task.Message.CorrelationId);
                }

                if (task.Message.Port.InstanceNumber != "" && output.Port.InstanceNumber == "")
                {
                    output =
                        new Message(
                            Port.Build(output.Port.Path, output.Port.OperationName, task.Message.Port.InstanceNumber,
                                       output.Port.Name),
                            output.Data,
                            task.Message.CorrelationId);
                }

                if (task.Message.CorrelationId != Guid.Empty)
                {
                    output = new Message(output.Port, output.Data, task.Message.CorrelationId);
                }

                if (!(task.Operation is IFlow))
                {
                    output.FlowStack = task.Message.FlowStack;
                }
                output.Causalities = task.Message.Causalities;

                Result(output);
            }
        }
Пример #3
0
        public void Process(IMessage message)
        {
            if (IsFlowInputMessage(message))
            {
                // parent/flow.port => flow/.port
                var output = new Message(Port.Build(message.Port.OperationName, "", message.Port.Name), message.Data, message.CorrelationId)
                {
                    Causalities = message.Causalities,
                    FlowStack   = message.FlowStack
                };

                if (message.Port.Path != "")
                {
                    output.FlowStack.Push(message.Port.Path);
                }

                Result(output);
            }
            else
            {
                // flow/.port => parent/flow.port
                var parentFlowname = "";
                if (!message.FlowStack.IsEmpty)
                {
                    parentFlowname = message.FlowStack.Pop();
                }

                var output = new Message(Port.Build(parentFlowname, Create_operation_name(message), message.Port.Name), message.Data, message.CorrelationId)
                {
                    Causalities = message.Causalities,
                    FlowStack   = message.FlowStack
                };

                Result(output);
            }
        }