예제 #1
0
        /// <summary>
        /// Rebuild the factory
        /// </summary>
        protected override void RebuildFactory()
        {
            NetGraphBuilder       builder = new NetGraphBuilder();
            ClientEndpointFactory client  = builder.AddClient("Client", Guid.NewGuid());

            client.Hidden = true;
            ServerEndpointFactory server = builder.AddServer("Server", Guid.NewGuid());

            server.Hidden = true;

            SwitchNodeFactory outputSwitch = CreateBaseGraph(builder, server, client, false);
            SwitchNodeFactory inputSwitch  = CreateBaseGraph(builder, client, server, true);

            AddStates(builder, outputSwitch, inputSwitch, client, server);

            NetGraphFactory factory = builder.Factory;

            factory.Properties.Add(_metaName, _defaultState);

            if (_factory == null)
            {
                _factory = factory;
            }
            else
            {
                _factory.UpdateGraph(factory);
            }

            Dirty = true;
        }
예제 #2
0
        private void AddStates(NetGraphBuilder builder, SwitchNodeFactory outputSwitch, SwitchNodeFactory inputSwitch,
                               BaseNodeFactory outputNode, BaseNodeFactory inputNode)
        {
            foreach (StateGraphEntry entry in _entries)
            {
                BaseNodeFactory currentInput  = inputSwitch;
                BaseNodeFactory currentOutput = outputSwitch;
                NetGraphFactory graph         = entry.Graph == null?NetGraphBuilder.CreateDefaultProxyGraph(entry.StateName) : entry.Graph.Factory;

                LayerSectionMasterNodeFactory masterNode = new LayerSectionMasterNodeFactory(String.Format("{0} {1}", entry.StateName,
                                                                                                           GetDirection(false)), Guid.NewGuid(), Guid.NewGuid());

                masterNode.DefaultMode = LayerSectionNodeDefaultMode.PassFrame;
                masterNode.Direction   = LayerSectionGraphDirection.ServerToClient;

                builder.AddNode(masterNode);
                builder.AddNode(masterNode.SlaveFactory);

                LayerSectionFilterFactory[] filters = new LayerSectionFilterFactory[1];

                LayerSectionFilterFactory filter = new LayerSectionFilterFactory();

                filter.GraphFactory   = graph;
                filter.LayerFactories = entry.GetLayerFactories();
                filter.SelectionPath  = "";
                filter.FilterFactory  = DataFrameFilterFactory.CreateDummyFactory();
                filter.IsolatedGraph  = false;

                masterNode.LayerFactories = new LayerSectionFilterFactory[1] {
                    filter
                };

                masterNode.SlaveFactory.Hidden = true;

                builder.AddLine(outputSwitch, masterNode, entry.StateName);
                builder.AddLine(inputSwitch, masterNode.SlaveFactory, entry.StateName);

                if (entry.LogPackets)
                {
                    currentOutput = AddLog(builder, entry, masterNode, false);
                    currentInput  = AddLog(builder, entry, masterNode.SlaveFactory, true);
                }
                else
                {
                    currentOutput = masterNode;
                    currentInput  = masterNode.SlaveFactory;
                }

                builder.AddLine(currentOutput, outputNode, null);
                builder.AddLine(currentInput, inputNode, null);
            }
        }
예제 #3
0
        private SwitchNodeFactory CreateBaseGraph(NetGraphBuilder builder, BaseNodeFactory inputNode, BaseNodeFactory outputNode, bool clientToServer)
        {
            SwitchNodeFactory switchNode = builder.AddNode(new SwitchNodeFactory(String.Format("{0} Switch {1}",
                                                                                               _metaName, GetDirection(clientToServer)), Guid.NewGuid(),
                                                                                 false, CANAPE.Nodes.SwitchNodeSelectionMode.ExactMatch));

            switchNode.Hidden        = true;
            switchNode.SelectionPath = "#" + (String.IsNullOrWhiteSpace(_metaName) ? "Invalid" : _metaName.Trim());

            builder.AddLine(inputNode, switchNode, null);

            LogPacketNodeFactory log = builder.AddLog(String.Format("Invalid Traffic {0}", GetDirection(clientToServer)),
                                                      Guid.NewGuid(), new ColorValue(255, 0, 0), null, false);

            log.Hidden = true;
            builder.AddLine(switchNode, log, null);
            builder.AddLine(log, outputNode, null);

            return(switchNode);
        }