示例#1
0
        public RobotRaconteurNodeSetup(RobotRaconteurNode node, ServiceFactory[] service_types, bool scan_assembly_types, string nodename, ushort tcp_port, RobotRaconteurNodeSetupFlags flags)
        {
            Node = node;

            if (flags.HasFlag(RobotRaconteurNodeSetupFlags.EnableLocalTransport))
            {
                LocalTransport = new LocalTransport(node);
                if (flags.HasFlag(RobotRaconteurNodeSetupFlags.LocalTransportStartServer))
                {
                    LocalTransport.StartServerAsNodeName(nodename);
                }
                else if (flags.HasFlag(RobotRaconteurNodeSetupFlags.LocalTransportStartClient) && !string.IsNullOrEmpty(nodename))
                {
                    LocalTransport.StartClientAsNodeName(nodename);
                }

                if (flags.HasFlag(RobotRaconteurNodeSetupFlags.EnableNodeDiscoveryListening))
                {
                    LocalTransport.EnableNodeDiscoveryListening();
                }

                node.RegisterTransport(LocalTransport);
            }

            if (flags.HasFlag(RobotRaconteurNodeSetupFlags.EnableTcpTransport))
            {
                TcpTransport = new TcpTransport(node);
                if (flags.HasFlag(RobotRaconteurNodeSetupFlags.TcpTransportStartServer))
                {
                    TcpTransport.StartServer(tcp_port);
                }

                if (flags.HasFlag(RobotRaconteurNodeSetupFlags.EnableNodeDiscoveryListening))
                {
                    TcpTransport.EnableNodeDiscoveryListening();
                }

                if (flags.HasFlag(RobotRaconteurNodeSetupFlags.EnableNodeAnnounce))
                {
                    TcpTransport.EnableNodeAnnounce();
                }

                node.RegisterTransport(TcpTransport);
            }

            if (service_types != null)
            {
                foreach (var t in service_types)
                {
                    node.RegisterServiceType(t);
                }
            }

            if (scan_assembly_types)
            {
                try
                {
                    var scanned_types = ScanAssembliesForServiceTypes();
                    foreach (var t in scanned_types)
                    {
                        node.RegisterServiceType(t);
                    }
                }
                catch (Exception e)
                {
                    Console.Error.WriteLine("warning: assembly scanning failed: " + e.Message);
                }
            }
        }