Пример #1
0
        static int Main(string[] args)
        {
            var now = RobotRaconteurNode.s.NowUTC;

            bool   shouldShowHelp          = false;
            string robot_info_file         = null;
            bool   left_arm                = false;
            bool   right_arm               = false;
            bool   left_electric_gripper   = false;
            bool   right_electric_gripper  = false;
            string left_gripper_info_file  = null;
            string right_gripper_info_file = null;

            var options = new OptionSet {
                { "robot-info-file=", n => robot_info_file = n },
                { "left-arm", n => left_arm = n != null },
                { "right-arm", n => right_arm = n != null },
                { "left-electric-gripper", n => left_electric_gripper = n != null },
                { "right-electric-gripper", n => right_electric_gripper = n != null },
                { "left-gripper-info-file=", n => left_gripper_info_file = n },
                { "right-gripper-info-file=", n => right_gripper_info_file = n },
                { "h|help", "show this message and exit", h => shouldShowHelp = h != null }
            };

            List <string> extra;

            try
            {
                // parse the command line
                extra = options.Parse(args);
            }
            catch (OptionException e)
            {
                // output some error message
                Console.Write("BaxterRobotRaconteurDriver: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `BaxterRobotRaconteurDriver --help' for more information.");
                return(1);
            }

            if (shouldShowHelp)
            {
                Console.WriteLine("Usage: BaxterRobotRaconteurDriver [Options+]");
                Console.WriteLine();
                Console.WriteLine("Options:");
                options.WriteOptionDescriptions(Console.Out);
                return(0);
            }

            if (robot_info_file == null)
            {
                Console.WriteLine("error: robot-info-file must be specified");
                return(1);
            }

            string nodename = "baxter_robot";

            BaxterRobotArmSelection arm_selection;

            if ((!left_arm && !right_arm) || right_arm && left_arm)
            {
                arm_selection = BaxterRobotArmSelection.both;
            }
            else if (left_arm)
            {
                arm_selection = BaxterRobotArmSelection.left;
                nodename      = "baxter_robot_left_arm";
            }
            else if (right_arm)
            {
                arm_selection = BaxterRobotArmSelection.right;
                nodename      = "baxter_robot_right_arm";
            }
            else
            {
                throw new ArgumentException("Invalid arm selection");
            }

            ushort port = 58660;

            if (arm_selection == BaxterRobotArmSelection.right)
            {
                port = 58661;
            }

            Tuple <RobotInfo, LocalIdentifierLocks> robot_info      = null;
            Tuple <ToolInfo, LocalIdentifierLocks>  left_tool_info  = null;
            Tuple <ToolInfo, LocalIdentifierLocks>  right_tool_info = null;

            BaxterRobot           robot         = null;
            BaxterElectricGripper left_gripper  = null;
            BaxterElectricGripper right_gripper = null;

            try
            {
                robot_info = RobotInfoParser.LoadRobotInfoYamlWithIdentifierLocks(robot_info_file);
                if (left_electric_gripper)
                {
                    left_tool_info = ToolInfoParser.LoadToolInfoYamlWithIdentifierLocks(left_gripper_info_file);
                    left_tool_info.Item1.device_info.parent_device      = robot_info.Item1.device_info.device;
                    left_tool_info.Item1.device_info.device_origin_pose = new NamedPose
                    {
                        parent_frame = new Identifier {
                            name = "left_hand"
                        },
                        pose = new Pose {
                            orientation = new Quaternion {
                                w = 1
                            }
                        }
                    };
                }
                if (right_electric_gripper)
                {
                    right_tool_info = ToolInfoParser.LoadToolInfoYamlWithIdentifierLocks(right_gripper_info_file);
                    right_tool_info.Item1.device_info.parent_device      = robot_info.Item1.device_info.device;
                    right_tool_info.Item1.device_info.device_origin_pose = new NamedPose
                    {
                        parent_frame = new Identifier {
                            name = "right_hand"
                        },
                        pose = new Pose {
                            orientation = new Quaternion {
                                w = 1
                            }
                        }
                    };
                }

                ros_csharp_interop.ros_csharp_interop.init_ros(args, "baxter_robotraconteur_driver", true);

                robot = new BaxterRobot(robot_info.Item1, arm_selection, "");
                robot._start_robot();

                if (left_tool_info != null)
                {
                    left_gripper = new BaxterElectricGripper(left_tool_info.Item1, "left_gripper", "");
                    left_gripper._start_tool();
                }

                if (right_tool_info != null)
                {
                    right_gripper = new BaxterElectricGripper(right_tool_info.Item1, "right_gripper", "");
                    right_gripper._start_tool();
                }

                using (var node_setup = new ServerNodeSetup(nodename, port, args))
                {
                    RobotRaconteurNode.s.RegisterService("robot", "com.robotraconteur.robotics.robot", robot);
                    if (left_gripper != null)
                    {
                        RobotRaconteurNode.s.RegisterService("left_gripper", "com.robotraconteur.robotics.tool", left_gripper);
                    }
                    if (right_gripper != null)
                    {
                        RobotRaconteurNode.s.RegisterService("right_gripper", "com.robotraconteur.robotics.tool", right_gripper);
                    }

                    Console.WriteLine("Press enter to exit");
                    Console.ReadKey();
                }
            }
            finally
            {
                robot_info?.Item2?.Dispose();
                left_tool_info?.Item2?.Dispose();
                right_tool_info?.Item2?.Dispose();
                robot?.Dispose();
                left_gripper?.Dispose();
                right_gripper?.Dispose();
            }

            return(0);
        }
        static int Main(string[] args)
        {
            bool   shouldShowHelp    = false;
            string robot_info_file   = null;
            string robot_name        = null;
            bool   wait_signal       = false;
            bool   electric_gripper  = false;
            bool   vacuum_gripper    = false;
            string gripper_info_file = null;
            string gripper_name      = null;

            var options = new OptionSet {
                { "robot-info-file=", "the robot info YAML file", n => robot_info_file = n },
                { "robot-name=", "override the robot device name", n => robot_name = n },
                { "h|help", "show this message and exit", h => shouldShowHelp = h != null },
                { "electric-gripper", "rethink electric gripper is attached", n => electric_gripper = n != null },
                { "vacuum-gripper", "rethink vacuum gripper is attached", n => vacuum_gripper = n != null },
                { "gripper-info-file=", "gripper info file", n => gripper_info_file = n },
                { "gripper-name=", "override the gripper device name", n => gripper_name = n },
                { "wait-signal", "wait for POSIX sigint or sigkill to exit", n => wait_signal = n != null }
            };

            List <string> extra;

            try
            {
                // parse the command line
                extra = options.Parse(args);
            }
            catch (OptionException e)
            {
                // output some error message
                Console.Write("SawyerRobotRaconteurDriver: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `SawyerRobotRaconteurDriver --help' for more information.");
                return(1);
            }

            if (shouldShowHelp)
            {
                Console.WriteLine("Usage: SawyerRobotRaconteurDriver [Options+]");
                Console.WriteLine();
                Console.WriteLine("Options:");
                options.WriteOptionDescriptions(Console.Out);
                return(0);
            }

            if (robot_info_file == null)
            {
                Console.WriteLine("error: robot-info-file must be specified");
                return(1);
            }

            if (vacuum_gripper && electric_gripper)
            {
                throw new ArgumentException("--vacuum-gripper and --electric-gripper are mutually exclusive");
            }

            Tuple <RobotInfo, LocalIdentifierLocks> robot_info = null;
            Tuple <ToolInfo, LocalIdentifierLocks>  tool_info  = null;
            SawyerRobot    robot   = null;
            ISawyerGripper gripper = null;


            try
            {
                robot_info = RobotInfoParser.LoadRobotInfoYamlWithIdentifierLocks(robot_info_file, robot_name);

                ros_csharp_interop.ros_csharp_interop.init_ros(args, "sawyer_robotraconteur_driver", false);

                if (electric_gripper || vacuum_gripper)
                {
                    tool_info = ToolInfoParser.LoadToolInfoYamlWithIdentifierLocks(gripper_info_file, gripper_name);
                    tool_info.Item1.device_info.parent_device      = robot_info.Item1.device_info.device;
                    tool_info.Item1.device_info.device_origin_pose = new NamedPose
                    {
                        parent_frame = new Identifier {
                            name = "right_hand", uuid = new com.robotraconteur.uuid.UUID
                            {
                                uuid_bytes = new byte[16]
                            }
                        },
                        pose = new Pose {
                            orientation = new Quaternion {
                                w = 1
                            }
                        }
                    };
                }

                robot = new SawyerRobot(robot_info.Item1, "");
                if (electric_gripper)
                {
                    gripper = new SawyerElectricGripper(tool_info.Item1, "right_gripper", "");
                    gripper._start_tool();
                }
                else if (vacuum_gripper)
                {
                    gripper = new SawyerVacuumGripper(tool_info.Item1, "right_vacuum_gripper", "");
                    gripper._start_tool();
                }

                robot._start_robot();
                using (var node_setup = new ServerNodeSetup("sawyer_robot", 58653, args))
                {
                    var robot_service_ctx = RobotRaconteurNode.s.RegisterService("robot", "com.robotraconteur.robotics.robot", robot);
                    robot_service_ctx.SetServiceAttributes(AttributesUtil.GetDefaultServiceAtributesFromDeviceInfo(robot_info.Item1.device_info));
                    if (gripper != null)
                    {
                        var tool_service_ctx = RobotRaconteurNode.s.RegisterService("gripper", "com.robotraconteur.robotics.tool", gripper);
                        tool_service_ctx.SetServiceAttributes(AttributesUtil.GetDefaultServiceAtributesFromDeviceInfo(tool_info.Item1.device_info));
                    }

                    if (!wait_signal)
                    {
                        Console.WriteLine("Press enter to exit");
                        Console.ReadKey();
                    }
                    else
                    {
                        UnixSignal[] signals = new UnixSignal[] {
                            new UnixSignal(Mono.Unix.Native.Signum.SIGINT),
                            new UnixSignal(Mono.Unix.Native.Signum.SIGTERM),
                        };

                        Console.WriteLine("Press Ctrl-C to exit");
                        // block until a SIGINT or SIGTERM signal is generated.
                        int which = UnixSignal.WaitAny(signals, -1);

                        Console.WriteLine("Got a {0} signal, exiting", signals[which].Signum);
                    }
                }
            }
            finally
            {
                robot_info?.Item2?.Dispose();
                tool_info?.Item2?.Dispose();
                robot?.Dispose();
                gripper?.Dispose();
            }

            return(0);
        }
        static int Main(string[] args)
        {
            bool   shouldShowHelp  = false;
            string robot_info_file = null;

            var options = new OptionSet {
                { "robot-info-file=", n => robot_info_file = n },
                { "h|help", "show this message and exit", h => shouldShowHelp = h != null }
            };

            List <string> extra;

            try
            {
                // parse the command line
                extra = options.Parse(args);
            }
            catch (OptionException e)
            {
                // output some error message
                Console.Write("MotomanHSCRobotRaconteurDriver: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `MotomanHSCRobotRaconteurDriver --help' for more information.");
                return(1);
            }

            if (shouldShowHelp)
            {
                Console.WriteLine("Usage: MotomanHSCRobotRaconteurDriver [Options+]");
                Console.WriteLine();
                Console.WriteLine("Options:");
                options.WriteOptionDescriptions(Console.Out);
                return(0);
            }

            if (robot_info_file == null)
            {
                Console.WriteLine("error: robot-info-file must be specified");
                return(1);
            }


            var robot_info = RobotInfoParser.LoadRobotInfoYamlWithIdentifierLocks(robot_info_file);

            using (robot_info.Item2)
            {
                using (var robot = new MotomanHSCRobot(robot_info.Item1))
                {
                    robot._start_robot();
                    using (var node_setup = new ServerNodeSetup("Motoman_robot", 58651, args))
                    {
                        RobotRaconteurNode.s.RegisterService("robot", "com.robotraconteur.robotics.robot", robot);


                        Console.WriteLine("Press enter to exit");
                        Console.ReadKey();
                    }
                }
            }

            return(0);
        }
Пример #4
0
        static int Main(string[] args)
        {
            bool   shouldShowHelp  = false;
            string robot_info_file = null;
            string robot_name      = null;
            ushort tcp_port        = 58653;
            string node_name       = "gazebo_robot";
            string model_name      = null;
            string gazebo_url      = null;

            var options = new OptionSet {
                { "robot-info-file=", n => robot_info_file = n },
                { "robot-name=", "override the robot device name", n => robot_name = n },
                { "model-name=", "the gazebo model to control", n => model_name = n },
                { "gazebo-url=", "url for the Robot Raconteur Gazebo plugin", n => gazebo_url = n },
                { "h|help", "show this message and exit", h => shouldShowHelp = h != null }
            };

            List <string> extra;

            try
            {
                // parse the command line
                extra = options.Parse(args);
            }
            catch (OptionException e)
            {
                // output some error message
                Console.Write("GazeboModelRobotRaconteurDriver: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `GazeboModelRobotRaconteurDriver --help' for more information.");
                return(1);
            }

            if (shouldShowHelp)
            {
                Console.WriteLine("Usage: GazeboModelRobotRaconteurDriver [Options+]");
                Console.WriteLine();
                Console.WriteLine("Options:");
                options.WriteOptionDescriptions(Console.Out);
                return(0);
            }

            if (robot_info_file == null)
            {
                Console.WriteLine("error: robot-info-file must be specified");
                return(1);
            }

            if (model_name == null)
            {
                Console.WriteLine("error: model-name must be specified");
                return(1);
            }

            if (gazebo_url == null)
            {
                Console.WriteLine("error: gazebo_url must be specified");
                return(1);
            }

            var robot_info = RobotInfoParser.LoadRobotInfoYamlWithIdentifierLocks(robot_info_file, robot_name);

            robot_info.Item1.robot_capabilities &= (uint)(RobotCapabilities.jog_command | RobotCapabilities.position_command | RobotCapabilities.trajectory_command);

            RobotOperationalMode robot_op_mode = RobotOperationalMode.auto;
            var robot_class = robot_info.Item1?.device_info?.device_classes?.Find(x => x?.class_identifier?.name == "robot");

            if (robot_class?.subclasses != null)
            {
                if (robot_class.subclasses.Contains("cobot"))
                {
                    robot_op_mode = RobotOperationalMode.cobot;
                }
            }


            using (robot_info.Item2)
            {
                using (var node_setup = new ServerNodeSetup(node_name, tcp_port, args))
                {
                    using (var robot = new GazeboRobot(robot_info.Item1, gazebo_url, model_name, robot_op_mode))
                    {
                        robot._start_robot();
                        var robot_service_ctx = RobotRaconteurNode.s.RegisterService("robot", "com.robotraconteur.robotics.robot", robot);
                        robot_service_ctx.SetServiceAttributes(AttributesUtil.GetDefaultServiceAtributesFromDeviceInfo(robot_info.Item1.device_info));

                        Console.WriteLine("Press enter to exit");
                        Console.ReadKey();
                    }
                }
            }

            return(0);
        }
        static int Main(string[] args)
        {
            bool   shouldShowHelp = false;
            string tool_info_file = null;
            string gripper_ip     = null;
            bool   wait_signal    = false;

            var options = new OptionSet {
                { "tool-info-file=", n => tool_info_file = n },
                { "gripper-ip=", "the ip address of the gripper", n => gripper_ip = n },
                { "wait-signal", "wait for POSIX sigint or sigkill to exit", n => wait_signal = n != null },
                { "h|help", "show this message and exit", h => shouldShowHelp = h != null }
            };

            List <string> extra;

            try
            {
                // parse the command line
                extra = options.Parse(args);
            }
            catch (OptionException e)
            {
                // output some error message
                Console.Write("RobotiqThreeFingerGripperRobotRaconteurDriver: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `RobotiqThreeFingerGripperRobotRaconteurDriver --help' for more information.");
                return(1);
            }

            if (shouldShowHelp)
            {
                Console.WriteLine("Usage: RobotiqThreeFingerGripperRobotRaconteurDriver [Options+]");
                Console.WriteLine();
                Console.WriteLine("Options:");
                options.WriteOptionDescriptions(Console.Out);
                Console.WriteLine("Also supports standard --robotraconteur- node options");
                return(0);
            }

            if (tool_info_file == null)
            {
                //Console.WriteLine("error: robot-info-file must be specified");
                //return 1;
            }

            if (gripper_ip == null)
            {
                Console.WriteLine("error: gripper-ip must be specified");
                return(1);
            }



            using (var node_setup = new ServerNodeSetup("robotiq_gripper", 58323, args))
            {
                using (var tool = new RobotiqThreeFingerGripper(gripper_ip))
                {
                    tool._start_tool();
                    RobotRaconteurNode.s.RegisterService("tool", "com.robotraconteur.robotics.tool", tool);

                    if (!wait_signal)
                    {
                        Console.WriteLine("Press enter to exit");
                        Console.ReadKey();
                    }
                    else
                    {
                        UnixSignal[] signals = new UnixSignal[] {
                            new UnixSignal(Mono.Unix.Native.Signum.SIGINT),
                            new UnixSignal(Mono.Unix.Native.Signum.SIGTERM),
                        };

                        Console.WriteLine("Press Ctrl-C to exit");
                        // block until a SIGINT or SIGTERM signal is generated.
                        int which = UnixSignal.WaitAny(signals, -1);

                        Console.WriteLine("Got a {0} signal, exiting", signals[which].Signum);
                    }
                }
            }

            return(0);
        }
Пример #6
0
        static void Main(string[] args)
        {
            //string path = @"C:\Users\wasonj\Documents\RobotRaconteur2\bin_devel\out_debug\NET\Native\RobotRaconteurNETNative.dll";

            //Environment.SetEnvironmentVariable("PATH", Path.GetDirectoryName(path) + ";" + Environment.GetEnvironmentVariable("PATH"));

            string exepath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

            MultiDimArrayTest.testdatapath = System.IO.Path.Combine(exepath, System.IO.Path.Combine("..", "testdata"));

            RobotRaconteurNode.s.SetExceptionHandler(delegate(Exception e)
            {
                Console.WriteLine(e.ToString());
            });

            string command = "loopback";

            if (args.Length >= 1)
            {
                command = args[0];
            }

            if (command == "loopback")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                TcpTransport t = new TcpTransport();
                t.StartServer(2323);
                t.EnableNodeDiscoveryListening();
                t.EnableNodeAnnounce();

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());


                MultiDimArrayTest.Test();

                RobotRaconteurTestServiceSupport sup = new RobotRaconteurTestServiceSupport();
                sup.RegisterServices(t);

                int count = 1;

                if (args.Length >= 2)
                {
                    count = int.Parse(args[1]);
                }

                for (int i = 0; i < count; i++)
                {
                    ServiceTestClient c = new ServiceTestClient();
                    c.RunFullTest("tcp://localhost:2323/{0}/RobotRaconteurTestService", "tcp://localhost:2323/{0}/RobotRaconteurTestService_auth");
                    //System.Threading.Thread.Sleep(100);
                }

                /* c = new ServiceTestClient();
                 * c.RunFullTest("tcp://localhost:2323/{0}/RobotRaconteurTestService", "tcp://localhost:2323/{0}/RobotRaconteurTestService_auth");
                 * System.Threading.Thread.Sleep(1000);*/

                /*System.Threading.Thread.Sleep(10000);
                 *
                 * ServiceInfo2[] services = RobotRaconteurNode.s.FindServiceByType("RobotRaconteurTestService.testroot", new string[] { "tcp" });*/

                try
                {
                    object o = RobotRaconteurNode.s.ConnectService("tcp://localhost:2323/{0}/RobotRaconteurTestService");
                }
                catch { }

                //System.Threading.Thread.Sleep(17000);



                RobotRaconteurNode.s.Shutdown();
                Console.WriteLine("Test completed");
                return;
            }

            if (command == "loopback2")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                using (var setup = new ServerNodeSetup("com.robotraconteur.testing.TestService2", 4565,
                                                       RobotRaconteurNodeSetupFlags.ENABLE_TCP_TRANSPORT | RobotRaconteurNodeSetupFlags.TCP_TRANSPORT_START_SERVER))
                {
                    MultiDimArrayTest.Test();

                    RobotRaconteurTestServiceSupport2 sup = new RobotRaconteurTestServiceSupport2();
                    sup.RegisterServices(setup.TcpTransport);

                    ServiceTestClient2 c = new ServiceTestClient2();
                    c.RunFullTest("rr+tcp://localhost:4565/?service=RobotRaconteurTestService2");
                }
                Console.WriteLine("Test completed");
                return;
            }

            if (command == "loopback3")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                using (var setup = new ServerNodeSetup("com.robotraconteur.testing.TestService3", 4567,
                                                       RobotRaconteurNodeSetupFlags.ENABLE_TCP_TRANSPORT | RobotRaconteurNodeSetupFlags.TCP_TRANSPORT_START_SERVER))
                {
                    RobotRaconteurTestServiceSupport3 sup = new RobotRaconteurTestServiceSupport3();
                    sup.RegisterServices();

                    ServiceTestClient3 c = new ServiceTestClient3();
                    c.RunFullTest("rr+tcp://localhost:4567/?service=RobotRaconteurTestService3");
                }
                Console.WriteLine("Test completed");
                return;
            }

            if (command == "client")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string url      = args[1];
                string url_auth = args[2];

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);

                HardwareTransport t4 = new HardwareTransport();
                RobotRaconteurNode.s.RegisterTransport(t4);


                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());


                MultiDimArrayTest.Test();

                RobotRaconteurTestServiceSupport sup = new RobotRaconteurTestServiceSupport();
                sup.RegisterServices(t);

                int count = 1;

                if (args.Length >= 4)
                {
                    count = int.Parse(args[3]);
                }

                for (int i = 0; i < count; i++)
                {
                    ServiceTestClient c = new ServiceTestClient();
                    c.RunFullTest(url, url_auth);
                    //System.Threading.Thread.Sleep(100);
                }

                RobotRaconteurNode.s.Shutdown();
                Console.WriteLine("Test completed");
                return;
            }

            if (command == "client2")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string url = args[1];

                TcpTransport t = new TcpTransport();

                t.EnableNodeDiscoveryListening();

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService3.com__robotraconteur__testing__TestService3Factory());

                MultiDimArrayTest.Test();

                RobotRaconteurTestServiceSupport2 sup = new RobotRaconteurTestServiceSupport2();
                sup.RegisterServices(t);

                ServiceTestClient2 c = new ServiceTestClient2();
                c.RunFullTest(url);

                RobotRaconteurNode.s.Shutdown();
                Console.WriteLine("Test completed");
                return;
            }

            if (command == "client3")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string url = args[1];

                TcpTransport t = new TcpTransport();

                t.EnableNodeDiscoveryListening();

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService5.com__robotraconteur__testing__TestService5Factory());



                ServiceTestClient3 c = new ServiceTestClient3();
                c.RunFullTest(url);

                RobotRaconteurNode.s.Shutdown();
                Console.WriteLine("Test completed");
                return;
            }

            if (command == "server")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                int port;
                if (args[1] == "sharer")
                {
                    port = -1;
                }
                else
                {
                    port = Int32.Parse(args[1]);
                }
                string name = args[2];

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);
                t2.StartServerAsNodeName(name);

                TcpTransport t = new TcpTransport();
                t.EnableNodeAnnounce();
                if (port > 0)
                {
                    t.StartServer(port);
                }
                else
                {
                    t.StartServerUsingPortSharer();
                }

                try
                {
                    t.LoadTlsNodeCertificate();
                }
                catch (Exception)
                {
                    Console.WriteLine("warning: Could not load local node certificate");
                }

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService3.com__robotraconteur__testing__TestService3Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService5.com__robotraconteur__testing__TestService5Factory());


                RobotRaconteurTestServiceSupport sup = new RobotRaconteurTestServiceSupport();
                sup.RegisterServices(t);

                RobotRaconteurTestServiceSupport2 sup2 = new RobotRaconteurTestServiceSupport2();
                sup2.RegisterServices(t);

                RobotRaconteurTestServiceSupport2 sup3 = new RobotRaconteurTestServiceSupport2();
                sup3.RegisterServices(t);

                Console.WriteLine("Server started, press enter to quit");
                Console.ReadLine();
                RobotRaconteurNode.s.Shutdown();
                Console.WriteLine("Test complete, no error detected");
                return;
            }


            if (command == "findservicebytype")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string   type     = args[1];
                string[] tschemes = args[2].Split(new char[] { ',' });

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);

                System.Threading.Thread.Sleep(6000);



                ServiceInfo2[] ret = RobotRaconteurNode.s.FindServiceByType(type, tschemes);

                foreach (ServiceInfo2 r in ret)
                {
                    print_ServiceInfo2(r);
                }

                var t1 = RobotRaconteurNode.s.AsyncFindServiceByType(type, tschemes);
                t1.Wait();
                var ret2 = t1.Result;
                {
                    foreach (ServiceInfo2 r in ret2)
                    {
                        print_ServiceInfo2(r);
                    }
                }

                System.Threading.Thread.Sleep(10000);
                RobotRaconteurNode.s.Shutdown();
                return;
            }

            if (command == "findnodebyid")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                NodeID   id       = new NodeID(args[1]);
                string[] tschemes = args[2].Split(new char[] { ',' });

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);

                System.Threading.Thread.Sleep(6000);



                NodeInfo2[] ret = RobotRaconteurNode.s.FindNodeByID(id, tschemes);

                foreach (NodeInfo2 r in ret)
                {
                    print_NodeInfo2(r);
                }

                var ts1 = RobotRaconteurNode.s.AsyncFindNodeByID(id, tschemes);
                ts1.Wait();
                var ret2 = ts1.Result;
                {
                    foreach (NodeInfo2 r in ret2)
                    {
                        print_NodeInfo2(r);
                    }
                }

                System.Threading.Thread.Sleep(10000);
                RobotRaconteurNode.s.Shutdown();
                return;
            }

            if (command == "findnodebyname")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string   name     = args[1];
                string[] tschemes = args[2].Split(new char[] { ',' });

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);

                System.Threading.Thread.Sleep(6000);



                NodeInfo2[] ret = RobotRaconteurNode.s.FindNodeByName(name, tschemes);

                foreach (NodeInfo2 r in ret)
                {
                    print_NodeInfo2(r);
                }

                var ts1 = RobotRaconteurNode.s.AsyncFindNodeByName(name, tschemes);
                ts1.Wait();
                var ret2 = ts1.Result;
                {
                    foreach (NodeInfo2 r in ret2)
                    {
                        print_NodeInfo2(r);
                    }
                }

                System.Threading.Thread.Sleep(10000);
                RobotRaconteurNode.s.Shutdown();
                return;
            }

            if (command == "stresstestclient")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string url1 = args[1];

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);


                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                servicetest_count     = 0;
                servicetest_keepgoing = true;

                object         obj = RobotRaconteurNode.s.ConnectService(url1);
                async_testroot o   = (async_testroot)obj;
                testroot       o2  = (testroot)obj;
                o.async_func3(1, 2).ContinueWith(ts1 => servicetest2(o, ts1));

                Pipe <double> .PipeEndpoint p = o2.broadcastpipe.Connect(-1);
                p.PacketReceivedEvent += servicetest7;
                Wire <double> .WireConnection w  = o2.broadcastwire.Connect();
                RobotRaconteur.Timer          tt = RobotRaconteurNode.s.CreateTimer(40, delegate(TimerEvent ev) { servicetest5(p, w, ev); });
                tt.Start();

                Console.WriteLine("Press enter to quit");
                Console.ReadLine();
                servicetest_keepgoing = false;
                tt.Stop();
                RobotRaconteurNode.s.Shutdown();

                return;
            }

            if (command == "latencytestclient" || command == "latencytestclient2")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                string url1 = args[1];

                LocalTransport t2 = new LocalTransport();
                RobotRaconteurNode.s.RegisterTransport(t2);


                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                servicetest_count     = 0;
                servicetest_keepgoing = true;

                object         obj = RobotRaconteurNode.s.ConnectService(url1);
                async_testroot o   = (async_testroot)obj;
                testroot       o2  = (testroot)obj;

                var o3 = o2.get_o1();

                int iters = 100000;

                var d = new double[10];

                DateTime start;
                DateTime end;

                if (command == "latencytestclient")
                {
                    start = DateTime.UtcNow;
                    for (int i = 0; i < iters; i++)
                    {
                        o3.d1 = d;
                    }
                    end = DateTime.UtcNow;
                }
                else
                {
                    start = DateTime.UtcNow;
                    for (int i = 0; i < iters; i++)
                    {
                        var dummy = o2.struct1;
                    }
                    end = DateTime.UtcNow;
                }

                var diff = (end - start).Ticks / (TimeSpan.TicksPerMillisecond / 1000);

                double period = ((double)diff) / ((double)iters);

                Console.WriteLine("Period = {0}", period);

                RobotRaconteurNode.s.Shutdown();

                return;
            }

            if (command == "peeridentity")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                if (args.Length < 2)
                {
                    Console.WriteLine("Usage for peeridentity:  RobotRaconteurTest peeridentity url [nodeid]");
                    return;
                }

                var url1 = args[1];
                Console.WriteLine(url1);
                var c = new TcpTransport();

                if (args.Length > 2)
                {
                    var nodeid = args[2];

                    var id = new NodeID(nodeid);

                    RobotRaconteurNode.s.NodeID = id;

                    try
                    {
                        c.LoadTlsNodeCertificate();
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("warning: Could not load local node certificate");
                    }
                }

                Console.WriteLine(RobotRaconteurNode.s.NodeID);
                var c2 = new LocalTransport();

                var c5 = new HardwareTransport();

                RobotRaconteurNode.s.RegisterTransport(c);
                RobotRaconteurNode.s.RegisterTransport(c2);

                RobotRaconteurNode.s.RegisterTransport(c5);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                var oo = (testroot)RobotRaconteurNode.s.ConnectService(url1);
                oo.func3(1.0, 2.3);

                if (c.IsTransportConnectionSecure(oo))
                {
                    Console.WriteLine("Connection is secure");

                    if (c.IsSecurePeerIdentityVerified(oo))
                    {
                        Console.WriteLine("Peer identity is verified: " + c.GetSecurePeerIdentity(oo));
                    }
                    else
                    {
                        Console.WriteLine("Peer identity is not verified");
                    }
                }
                else
                {
                    Console.WriteLine("Connection is not secure");
                }

                RobotRaconteurNode.s.Shutdown();

                Console.WriteLine("Test completed, no errors detected");
                return;
            }

            if (command == "multidimarraytest")
            {
                MultiDimArrayTest.Test();
                RobotRaconteurNode.s.Shutdown();
                return;
            }

            if (command == "subscribertest")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                if (args.Length < 2)
                {
                    Console.WriteLine("Usage for subscribertest:  RobotRaconteurTest subscribertest servicetype");
                    return;
                }

                var servicetype = args[1];

                LocalTransport t2 = new LocalTransport();
                t2.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t2);

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                HardwareTransport t3 = new HardwareTransport();
                RobotRaconteurNode.s.RegisterTransport(t3);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                var subscription = RobotRaconteurNode.s.SubscribeServiceByType(new string[] { servicetype });

                subscription.ClientConnected += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, object e)
                {
                    Console.WriteLine("Client connected: " + d.NodeID.ToString() + ", " + d.ServiceName);
                    testroot e1 = (testroot)e;
                    Console.WriteLine("d1 = " + e1.d1);
                };

                subscription.ClientDisconnected += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, object e)
                {
                    Console.WriteLine("Client disconnected: " + d.NodeID.ToString() + ", " + d.ServiceName);
                };

                var wire_subscription = subscription.SubscribeWire <double>("broadcastwire");
                wire_subscription.WireValueChanged += delegate(WireSubscription <double> c, double d, TimeSpec e)
                {
                    //Console.WriteLine("Wire value changed: " + d);
                };

                var pipe_subscription = subscription.SubscribePipe <double>("broadcastpipe");
                pipe_subscription.PipePacketReceived += delegate(PipeSubscription <double> c)
                {
                    double val;
                    while (c.TryReceivePacket(out val))
                    {
                        Console.WriteLine("Received pipe packet: " + val);
                    }
                };


                System.Threading.Thread.Sleep(6000);

                var connected_clients = subscription.GetConnectedClients();

                foreach (var c in connected_clients)
                {
                    Console.WriteLine("Client: " + c.Key.NodeID + ", " + c.Key.ServiceName);
                }

                TimeSpec w1_time = null;
                double   w1_value;
                var      w1_res = wire_subscription.TryGetInValue(out w1_value);

                if (w1_res)
                {
                    Console.WriteLine("Got broadcastwire value: " + w1_value + " " + w1_time?.seconds);
                }

                Console.WriteLine("Waiting for services...");

                Console.ReadLine();

                RobotRaconteurNode.s.Shutdown();

                return;
            }

            if (command == "subscriberurltest")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                if (args.Length < 2)
                {
                    Console.WriteLine("Usage for subscriberurltest:  RobotRaconteurTest subscriberurltest url");
                    return;
                }

                var url = args[1];

                LocalTransport t2 = new LocalTransport();
                t2.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t2);

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                HardwareTransport t3 = new HardwareTransport();
                RobotRaconteurNode.s.RegisterTransport(t3);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                var subscription = RobotRaconteurNode.s.SubscribeService(url);

                subscription.ClientConnected += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, object e)
                {
                    Console.WriteLine("Client connected: " + d.NodeID.ToString() + ", " + d.ServiceName);
                    testroot e1 = (testroot)e;
                    Console.WriteLine("d1 = " + e1.d1);
                };

                subscription.ClientDisconnected += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, object e)
                {
                    Console.WriteLine("Client disconnected: " + d.NodeID.ToString() + ", " + d.ServiceName);
                };

                subscription.ClientConnectFailed += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, string[] url2, Exception err)
                {
                    Console.WriteLine("Client connect failed: " + d.NodeID.ToString() + " url: " + String.Join(",", url2) + err.ToString());
                };

                subscription.AsyncGetDefaultClient(1000).ContinueWith(delegate(Task <object> res)
                {
                    if (res.IsFaulted)
                    {
                        Console.WriteLine("AsyncGetDefaultClient failed");
                    }
                    else if (res.Result == null)
                    {
                        Console.WriteLine("AsyncGetDefaultClient returned null");
                    }
                    else
                    {
                        Console.WriteLine($"AsyncGetDefaultClient successful: {res.Result}");
                    }
                });
                var    client2 = subscription.GetDefaultClientWait(6000);
                object client3;
                var    try_res = subscription.TryGetDefaultClientWait(out client3, 6000);
                Console.WriteLine($"try_res = {try_res}");

                var connected_clients = subscription.GetConnectedClients();

                foreach (var c in connected_clients)
                {
                    Console.WriteLine("Client: " + c.Key.NodeID + ", " + c.Key.ServiceName);
                }

                try
                {
                    Console.WriteLine(((testroot)subscription.GetDefaultClient()).d1);
                }
                catch (Exception)
                {
                    Console.WriteLine("Client not connected");
                }

                object client1;
                subscription.TryGetDefaultClient(out client1);

                Console.WriteLine("Waiting for services...");

                Console.ReadLine();

                RobotRaconteurNode.s.Shutdown();

                return;
            }

            if (command == "subscriberfiltertest")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                if (args.Length < 2)
                {
                    throw new Exception("Usage for subscriberfiltertest:  RobotRaconteurTest subscriberfiltertest servicetype");
                }

                var servicetype = args[1];

                var f = new ServiceSubscriptionFilter();

                if (args.Length >= 3)
                {
                    var subcommand = args[2];

                    if (subcommand == "nodeid")
                    {
                        if (args.Length < 4)
                        {
                            throw new Exception("Usage for subscriberfiltertest:  RobotRaconteurTest subscriberfiltertest nodeid <nodeid>");
                        }

                        var n = new ServiceSubscriptionFilterNode();
                        n.NodeID = new NodeID(args[3]);
                        f.Nodes  = new ServiceSubscriptionFilterNode[] { n };
                    }

                    else if (subcommand == "nodename")
                    {
                        if (args.Length < 4)
                        {
                            throw new Exception("Usage for subscriberfiltertest:  RobotRaconteurTest subscriberfiltertest nodename <nodename>");
                        }

                        var n = new ServiceSubscriptionFilterNode();
                        n.NodeName = args[3];
                        f.Nodes    = new ServiceSubscriptionFilterNode[] { n };
                    }
                    else
                    if (subcommand == "nodeidscheme")
                    {
                        if (args.Length < 5)
                        {
                            throw new Exception("Usage for subscriberfiltertest:  RobotRaconteurTest subscriberfiltertest nodeidscheme <nodeid> <schemes>");
                        }

                        var n = new ServiceSubscriptionFilterNode();
                        n.NodeID           = new NodeID(args[3]);
                        f.Nodes            = new ServiceSubscriptionFilterNode[] { n };
                        f.TransportSchemes = args[4].Split(new char[] { ',' });
                    }
                    else
                    if (subcommand == "nodeidauth")
                    {
                        if (args.Length < 6)
                        {
                            throw new Exception("Usage for subscriberfiltertest:  RobotRaconteurTest subscriberfiltertest nodeidauth <nodeid> <username> <password>");
                        }

                        var n = new ServiceSubscriptionFilterNode();
                        n.NodeID      = new NodeID(args[3]);
                        n.Username    = args[4];
                        n.Credentials = new Dictionary <string, object>()
                        {
                            { "password", args[5] }
                        };
                        f.Nodes = new ServiceSubscriptionFilterNode[] { n };
                    }
                    else
                    if (subcommand == "servicename")
                    {
                        if (args.Length < 4)
                        {
                            throw new Exception("Usage for subscriberfiltertest:  RobotRaconteurTest subscriberfiltertest servicename <servicename>");
                        }

                        var n = new ServiceSubscriptionFilterNode();
                        f.ServiceNames = new string[] { args[3] };
                    }
                    else if (subcommand == "predicate")
                    {
                        f.Predicate = delegate(ServiceInfo2 info)
                        {
                            Console.WriteLine("Predicate: " + info.NodeName);
                            return(info.NodeName == "testprog");
                        };
                    }
                    else
                    {
                        throw new Exception("Unknown subscriberfiltertest command");
                    }

                    LocalTransport t2 = new LocalTransport();
                    t2.EnableNodeDiscoveryListening();
                    RobotRaconteurNode.s.RegisterTransport(t2);

                    TcpTransport t = new TcpTransport();
                    t.EnableNodeDiscoveryListening();
                    RobotRaconteurNode.s.RegisterTransport(t);

                    HardwareTransport t3 = new HardwareTransport();
                    RobotRaconteurNode.s.RegisterTransport(t3);

                    RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                    RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                    var subscription = RobotRaconteurNode.s.SubscribeServiceByType(new string[] { servicetype }, f);

                    subscription.ClientConnected += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, object e)
                    {
                        Console.WriteLine("Client connected: " + d.NodeID.ToString() + ", " + d.ServiceName);
                        testroot e1 = (testroot)e;
                        Console.WriteLine("d1 = " + e1.d1);
                    };

                    subscription.ClientDisconnected += delegate(ServiceSubscription c, ServiceSubscriptionClientID d, object e)
                    {
                        Console.WriteLine("Client disconnected: " + d.NodeID.ToString() + ", " + d.ServiceName);
                    };

                    Console.ReadLine();

                    RobotRaconteurNode.s.Shutdown();

                    return;
                }



                return;
            }

            if (command == "serviceinfo2subscribertest")
            {
                RobotRaconteurNode.s.SetLogLevelFromEnvVariable();

                if (args.Length < 2)
                {
                    Console.WriteLine("Usage for subscribertest:  RobotRaconteurTest subscribertest servicetype");
                    return;
                }

                var servicetype = args[1];

                LocalTransport t2 = new LocalTransport();
                t2.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t2);

                TcpTransport t = new TcpTransport();
                t.EnableNodeDiscoveryListening();
                RobotRaconteurNode.s.RegisterTransport(t);

                HardwareTransport t3 = new HardwareTransport();
                RobotRaconteurNode.s.RegisterTransport(t3);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                var subscription = RobotRaconteurNode.s.SubscribeServiceInfo2(new string[] { servicetype });
                subscription.ServiceDetected += delegate(ServiceInfo2Subscription sub, ServiceSubscriptionClientID id, ServiceInfo2 info)
                {
                    Console.WriteLine("Service detected: " + info.NodeID.ToString() + ", " + info.Name);
                };

                subscription.ServiceLost += delegate(ServiceInfo2Subscription sub, ServiceSubscriptionClientID id, ServiceInfo2 info)
                {
                    Console.WriteLine("Service lost: " + info.NodeID.ToString() + ", " + info.Name);
                };

                System.Threading.Thread.Sleep(6000);

                var connected_clients = subscription.GetDetectedServiceInfo2();

                foreach (var c in connected_clients)
                {
                    Console.WriteLine("Client: " + c.Key.NodeID + ", " + c.Key.ServiceName);
                }

                Console.WriteLine("Waiting for services...");

                Console.ReadLine();

                RobotRaconteurNode.s.Shutdown();

                return;
            }

            if (command == "nowutc")
            {
                Console.WriteLine(RobotRaconteurNode.s.NowUTC);

                RobotRaconteurNode.s.Shutdown();
                return;
            }

            if (command == "testlogging")
            {
                var r      = new RRLogRecord();
                var node   = RobotRaconteurNode.s;
                var nodeid = node.NodeID;
                r.Node    = node;
                r.Time    = DateTime.UtcNow;
                r.Level   = LogLevel.LogLevel_Warning;
                r.Message = "This is a test warning";
                RobotRaconteurNode.s.LogRecord(r);

                RobotRaconteurNode.s.Shutdown();
                return;
            }

            if (command == "testloghandler")
            {
                var user_log_handler = new UserLogRecordHandler(x => Console.WriteLine("csharp handler: " + x.ToString()));
                RobotRaconteurNode.s.SetLogRecordHandler(user_log_handler);
                RobotRaconteurNode.s.SetLogLevel(LogLevel.LogLevel_Debug);

                TcpTransport t = new TcpTransport();
                t.StartServer(2323);

                RobotRaconteurNode.s.RegisterTransport(t);

                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService1.com__robotraconteur__testing__TestService1Factory());
                RobotRaconteurNode.s.RegisterServiceType(new com.robotraconteur.testing.TestService2.com__robotraconteur__testing__TestService2Factory());

                RobotRaconteurTestServiceSupport sup = new RobotRaconteurTestServiceSupport();
                sup.RegisterServices(t);
                ServiceTestClient c = new ServiceTestClient();
                c.RunFullTest("tcp://localhost:2323/{0}/RobotRaconteurTestService", "tcp://localhost:2323/{0}/RobotRaconteurTestService_auth");

                RobotRaconteurNode.s.Shutdown();
                Console.WriteLine("Test completed");

                return;
            }

            if (command == "server2")
            {
                ServerNodeSetup node_setup = new ServerNodeSetup("testprog", 22222, args);
                using (node_setup)
                {
                    var t = node_setup.TcpTransport;

                    RobotRaconteurTestServiceSupport sup = new RobotRaconteurTestServiceSupport();
                    sup.RegisterServices(t);

                    RobotRaconteurTestServiceSupport2 sup2 = new RobotRaconteurTestServiceSupport2();
                    sup2.RegisterServices(t);

                    RobotRaconteurTestServiceSupport3 sup3 = new RobotRaconteurTestServiceSupport3();
                    sup3.RegisterServices();

                    Console.WriteLine("Server started, press enter to quit");
                    Console.ReadLine();
                    RobotRaconteurNode.s.Shutdown();
                    Console.WriteLine("Test complete, no error detected");
                    return;
                }
            }

            throw new Exception("Unknown command");
        }
        static int Main(string[] args)
        {
            bool   shouldShowHelp = false;
            string tool_info_file = null;
            string robot_url      = null;
            List <SignalCommand> open_commands  = new List <SignalCommand>();
            List <SignalCommand> close_commands = new List <SignalCommand>();
            bool wait_signal = false;

            var options = new OptionSet {
                { "tool-info-file=", n => tool_info_file = n },
                { "robot-url=", "url for the robot with signals", n => robot_url = n },
                { "open-signal-command=", "add signal to send to open gripper with form <signal_name>,<value>", s => open_commands.Add(parse_signal_command(s)) },
                { "close-signal-command=", "add signal to send to open gripper with form <signal_name>,<value>", s => close_commands.Add(parse_signal_command(s)) },
                { "wait-signal", "wait for POSIX sigint or sigkill to exit", n => wait_signal = n != null },
                { "h|help", "show this message and exit", h => shouldShowHelp = h != null }
            };

            List <string> extra;

            try
            {
                // parse the command line
                extra = options.Parse(args);
            }
            catch (OptionException e)
            {
                // output some error message
                Console.Write("RobotSignalToolRobotRaconteurDriver: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `RobotSignalToolRobotRaconteurDriver --help' for more information.");
                return(1);
            }

            if (shouldShowHelp)
            {
                Console.WriteLine("Usage: RobotSignalToolRobotRaconteurDriver [Options+]");
                Console.WriteLine();
                Console.WriteLine("Options:");
                options.WriteOptionDescriptions(Console.Out);
                Console.WriteLine("Also supports standard --robotraconteur- node options");
                return(0);
            }

            if (tool_info_file == null)
            {
                //Console.WriteLine("error: robot-info-file must be specified");
                //return 1;
            }

            if (robot_url == null)
            {
                Console.WriteLine("error: robot-url must be specified");
                return(1);
            }



            using (var node_setup = new ServerNodeSetup("robot_signal_tool", 58323, args))
            {
                using (var tool = new RobotSignalTool(robot_url, open_commands.ToArray(), close_commands.ToArray()))
                {
                    RobotRaconteurNode.s.RegisterService("tool", "com.robotraconteur.robotics.tool", tool);

                    if (!wait_signal)
                    {
                        Console.WriteLine("Press enter to exit");
                        Console.ReadKey();
                    }
                    else
                    {
                        UnixSignal[] signals = new UnixSignal[] {
                            new UnixSignal(Mono.Unix.Native.Signum.SIGINT),
                            new UnixSignal(Mono.Unix.Native.Signum.SIGTERM),
                        };

                        Console.WriteLine("Press Ctrl-C to exit");
                        // block until a SIGINT or SIGTERM signal is generated.
                        int which = UnixSignal.WaitAny(signals, -1);

                        Console.WriteLine("Got a {0} signal, exiting", signals[which].Signum);
                    }
                }
            }

            return(0);
        }
        static int Main(string[] args)
        {
            bool   shouldShowHelp = false;
            string tool_info_file = null;
            string robot_url      = null;
            bool   wait_signal    = false;

            var options = new OptionSet {
                { "tool-info-file=", n => tool_info_file = n },
                { "robot-url=", "url for the robot with signals", n => robot_url = n },
                { "wait-signal", "wait for POSIX sigint or sigkill to exit", n => wait_signal = n != null },
                { "h|help", "show this message and exit", h => shouldShowHelp = h != null }
            };

            List <string> extra;

            try
            {
                // parse the command line
                extra = options.Parse(args);
            }
            catch (OptionException e)
            {
                // output some error message
                Console.Write("RobotSignalToolRobotRaconteurDriver: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `RobotSignalToolRobotRaconteurDriver --help' for more information.");
                return(1);
            }

            if (shouldShowHelp)
            {
                Console.WriteLine("Usage: RobotSignalToolRobotRaconteurDriver [Options+]");
                Console.WriteLine();
                Console.WriteLine("Options:");
                options.WriteOptionDescriptions(Console.Out);
                Console.WriteLine("Also supports standard --robotraconteur- node options");
                return(0);
            }

            if (tool_info_file == null)
            {
                Console.WriteLine("error: robot-info-file must be specified");
                return(1);
            }

            if (robot_url == null)
            {
                Console.WriteLine("error: robot-url must be specified");
                return(1);
            }


            Tuple <ToolInfo, LocalIdentifierLocks> tool_info = null;

            tool_info = ToolInfoParser.LoadToolInfoYamlWithIdentifierLocks(tool_info_file);

            using (tool_info.Item2)
                using (var node_setup = new ServerNodeSetup("robot_signal_tool", 58323, args))
                {
                    using (var tool = new UR_CB2_SoftGripper(robot_url, tool_info.Item1))
                    {
                        var tool_service_ctx = RobotRaconteurNode.s.RegisterService("tool", "com.robotraconteur.robotics.tool", tool);
                        tool_service_ctx.SetServiceAttributes(AttributesUtil.GetDefaultServiceAtributesFromDeviceInfo(tool_info.Item1.device_info));

                        if (!wait_signal)
                        {
                            Console.WriteLine("Press enter to exit");
                            Console.ReadKey();
                        }
                        else
                        {
                            UnixSignal[] signals = new UnixSignal[] {
                                new UnixSignal(Mono.Unix.Native.Signum.SIGINT),
                                new UnixSignal(Mono.Unix.Native.Signum.SIGTERM),
                            };

                            Console.WriteLine("Press Ctrl-C to exit");
                            // block until a SIGINT or SIGTERM signal is generated.
                            int which = UnixSignal.WaitAny(signals, -1);

                            Console.WriteLine("Got a {0} signal, exiting", signals[which].Signum);
                        }
                    }
                }

            return(0);
        }
Пример #9
0
        static int Main(string[] args)
        {
            bool   shouldShowHelp  = false;
            string robot_info_file = null;
            bool   wait_signal     = false;
            string robot_name      = null;

            var options = new OptionSet {
                { "robot-info-file=", n => robot_info_file = n },
                { "robot-name=", "override the robot device name", n => robot_name = n },
                { "h|help", "show this message and exit", h => shouldShowHelp = h != null },
                { "wait-signal", "wait for POSIX sigint or sigkill to exit", n => wait_signal = n != null }
            };

            List <string> extra;

            try
            {
                // parse the command line
                extra = options.Parse(args);
            }
            catch (OptionException e)
            {
                // output some error message
                Console.Write("ABBRobotRaconteurDriver: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `ABBRobotRaconteurDriver --help' for more information.");
                return(1);
            }

            if (shouldShowHelp)
            {
                Console.WriteLine("Usage: ABBRobotRaconteurDriver [Options+]");
                Console.WriteLine();
                Console.WriteLine("Options:");
                options.WriteOptionDescriptions(Console.Out);
                return(0);
            }

            if (robot_info_file == null)
            {
                Console.WriteLine("error: robot-info-file must be specified");
                return(1);
            }


            var robot_info = RobotInfoParser.LoadRobotInfoYamlWithIdentifierLocks(robot_info_file, robot_name);

            using (robot_info.Item2)
            {
                using (var robot = new ABBRobot(robot_info.Item1))
                {
                    robot._start_robot();
                    using (var node_setup = new ServerNodeSetup("ABB_robot", 58651, args))
                    {
                        var service_ctx = RobotRaconteurNode.s.RegisterService("robot", "com.robotraconteur.robotics.robot", robot);
                        service_ctx.SetServiceAttributes(RobotRaconteur.Companion.Util.AttributesUtil.GetDefaultServiceAtributesFromDeviceInfo(robot_info.Item1.device_info));

                        if (!wait_signal)
                        {
                            Console.WriteLine("Press enter to exit");
                            Console.ReadKey();
                        }
                        else
                        {
                            UnixSignal[] signals = new UnixSignal[] {
                                new UnixSignal(Mono.Unix.Native.Signum.SIGINT),
                                new UnixSignal(Mono.Unix.Native.Signum.SIGTERM),
                            };

                            Console.WriteLine("Press Ctrl-C to exit");
                            // block until a SIGINT or SIGTERM signal is generated.
                            int which = UnixSignal.WaitAny(signals, -1);

                            Console.WriteLine("Got a {0} signal, exiting", signals[which].Signum);
                        }
                    }
                }
            }

            return(0);
        }