예제 #1
0
파일: Robot.cs 프로젝트: yingted/Myro
 public static void Init(string manifestFile, int httpPort, int dsspPort)
 {
     if (bank == null)
     {
         Robot.httpPort = httpPort;
         Robot.dsspPort = dsspPort;
         FileAttributes att = File.GetAttributes(manifestFile);
         if ((att & (FileAttributes.Device | FileAttributes.Directory | FileAttributes.Offline)) != 0)
         {
             throw new IOException("Manifest file is not a normal file");
         }
         Console.Write("Starting DSS environment...");
         DssEnvironment.Initialize(httpPort, dsspPort, "file://" + manifestFile);
         Console.WriteLine("Done");
         bank = new AdapterBank(new List <IAdapterFactory>()
         {
             new Myro.Adapters.DriveAdapterFactory(),
             new Myro.Adapters.VectorAdapterFactory(),
             new Myro.Adapters.WebcamAdapterFactory(),
             new Myro.Adapters.CamControlAdapterFactory()
         });
         driveAdapter      = bank.GetAdapterSpec <DriveAdapter>("drive");
         soundAdapter      = bank.GetAdapterSpec <VectorAdapter>("tonegen");
         webcamAdapter     = bank.GetAdapterSpec <WebcamAdapter>("webcam");
         camcontrolAdapter = bank.GetAdapterSpec <CamControlAdapter>("camcontrol");
     }
     else
     {
         throw new Exception("Myro is already initialized");
     }
 }
예제 #2
0
        private void ConductorSvr_Load(object sender, EventArgs e)
        {
            if (IsPortInUse(ProtocolType.Tcp, 50000) || IsPortInUse(ProtocolType.Tcp, 50001))
            {
                System.Windows.Forms.MessageBox.Show("Tcp port 50000 or 50001 is in use, please check it.", "URWPGSim2D Server");
                System.Diagnostics.Process.GetCurrentProcess().Kill(); // 没有数据需要保存直接结束当前进程
            }

            // 调试时在同一节点上启动Server服务和Client服务
            string[] strArrManifestFileNames = new string[2] {
                Application.StartupPath + "\\Sim2DSvr.manifest.xml",
                Application.StartupPath + "\\Sim2DClt.manifest.xml",
            };
            //DssEnvironment.Initialize(50000, 50001, strArrManifestFileNames);

            // 在50000/50001这组端口上启动一个DSS Node并初始化Server服务实例
            string strServerManifestFileName = Application.StartupPath + "\\Sim2DSvr.manifest.xml";

            DssEnvironment.Initialize(50000, 50001, strServerManifestFileName);

            // 等待当前Dss Node上的某Dss Service发生Drop事件执行DssEnvironment.Shutdown命令
            DssEnvironment.WaitForShutdown();

            // 退出客户端启动引导程序界面不再显示
            Application.Exit();
        }
예제 #3
0
        private void Initialize()
        {
            // Initialize Dss using the Scribbler base manifest
            DssEnvironment.Initialize(50000, 50001,
                                      @"C:\\Microsoft Robotics Studio (1.5)\\samples\\IPRE\\Scribbler\\Scribbler\\Batch Files\\IPRE.Scribbler.standard.manifest.xml"
                                      );

            Arbiter.Receive <DateTime>(true, _timerPort, ConnectToScribbler);
            _timerPort.Post(DateTime.Now);

            autolock.WaitOne();
        }
예제 #4
0
        public Robot(string manifestFile)
        {
            Console.Write("Starting DSS environment...");
            DssEnvironment.Initialize(50000, 50001, "file://" + Path.GetFullPath(manifestFile));
            Console.WriteLine("Done");
            bank = new AdapterBank(new List <IAdapterFactory>()
            {
                new Myro.Adapters.DriveAdapterFactory(),
                new Myro.Adapters.VectorAdapterFactory()
            });

            Sensors  = new MyroSensors(bank);
            Movement = new MyroMovement(bank);
            Sound    = new MyroSound(bank);
        }
예제 #5
0
        private void ConductorClt_Load(object sender, EventArgs e)
        {
            DssRuntimeConfiguration dssConfig = new DssRuntimeConfiguration();

            dssConfig.PublicHttpPort = 0;
            dssConfig.PublicTcpPort  = 0;

            int port = 40000;

            do // 从TCP端口40000起查找尚未被占用的端口
            {
                while (IsPortInUse(ProtocolType.Tcp, port))
                {
                    port++;
                }
                if (dssConfig.PublicHttpPort == 0)
                {
                    dssConfig.PublicHttpPort = port;
                    port++;
                }
                else
                {
                    dssConfig.PublicTcpPort = port;
                }
            } while (dssConfig.PublicHttpPort == 0 || dssConfig.PublicTcpPort == 0);

            // 调试时在同一节点上启动Server服务和Client服务
            string[] strArrManifestFileNames = new string[2] {
                Application.StartupPath + "\\Sim2DSvr.manifest.xml",
                Application.StartupPath + "\\Sim2DClt.manifest.xml",
            };
            //DssEnvironment.Initialize(dssConfig, strArrManifestFileNames);

            // 在50000/50001这组端口上启动一个DSS Node并初始化Server服务实例
            string strServerManifestFileName = Application.StartupPath + "\\Sim2DSvr.manifest.xml";
            //DssEnvironment.Initialize(dssConfig, strServerManifestFileName);

            // 在40000/40001这组端口上启动一个DSS Node并初始化Client服务实例
            string strClientManifestFileName = Application.StartupPath + "\\Sim2DClt.manifest.xml";

            DssEnvironment.Initialize(dssConfig, strClientManifestFileName);

            // 等待当前Dss Node上的某Dss Service发生Drop事件执行DssEnvironment.Shutdown命令
            DssEnvironment.WaitForShutdown();

            // 退出客户端启动引导程序界面不再显示
            Application.Exit();
        }
예제 #6
0
파일: Robot.cs 프로젝트: yingted/Myro
        /// <summary>
        /// This is an internal helper method that starts the DSS environment,
        /// using the manifest file specified in the MyroConfigFiles argument.
        /// </summary>
        /// <param name="config"></param>
        private static void startDSS(MyroConfigFiles config)
        {
            string manifestFile = Path.Combine(Path.Combine(Params.ConfigPath, config.BaseName + ".manifest"), config.BaseName + ".manifest.xml");

            Robot.httpPort = config.MyroConfiguration.HttpPort;
            Robot.dsspPort = config.MyroConfiguration.DsspPort;
            FileAttributes att = File.GetAttributes(manifestFile);

            if ((att & (FileAttributes.Device | FileAttributes.Directory | FileAttributes.Offline)) != 0)
            {
                throw new IOException("Manifest file is not a normal file");
            }
            Console.Write("Starting DSS environment...");
            DssEnvironment.Initialize(httpPort, dsspPort, "file://" + manifestFile);
            Console.WriteLine("Done");
        }
예제 #7
0
        /// <summary>
        /// Intialization Routine. Called by constructor.
        /// </summary>
        protected virtual void Initialize()
        {
            XPathDocument  xpdoc = new XPathDocument(configFile);
            XPathNavigator xpnav = xpdoc.CreateNavigator();

            manifestFile = xpnav.SelectSingleNode("//ManifestFile/URI").Value;
            httpPort     = int.Parse(xpnav.SelectSingleNode("//DssEnvironment/HttpPort").Value);
            soapPort     = int.Parse(xpnav.SelectSingleNode("//DssEnvironment/SoapPort").Value);
            verbosity    = int.Parse(xpnav.SelectSingleNode("//Verbosity/Level").Value);

            // Initialize Dss manifest
            DssEnvironment.Initialize(httpPort, soapPort, manifestFile);

            // Wait for 30 seconds for the DssEnvironment to completely load all services
            // TODO: utilize config file to remove the sleep
            Thread.Sleep(10000);
        }
예제 #8
0
        /// <summary>
        /// Intialization Routine. Called by constructor.
        /// </summary>
        protected virtual void Initialize()
        {
            XPathDocument  xpdoc = new XPathDocument(configFile);
            XPathNavigator xpnav = xpdoc.CreateNavigator();

            manifestFile = xpnav.SelectSingleNode("//ManifestFile/URI").Value;
            httpPort     = int.Parse(xpnav.SelectSingleNode("//DssEnvironment/HttpPort").Value);
            soapPort     = int.Parse(xpnav.SelectSingleNode("//DssEnvironment/SoapPort").Value);
            verbosity    = int.Parse(xpnav.SelectSingleNode("//Verbosity/Level").Value);

            // Initialize Dss manifest
            String manifestFileFull = Path.Combine(Path.GetDirectoryName(Path.GetFullPath(configFile)), manifestFile);

            Console.WriteLine("Starting DSS environment with manifest: " + manifestFileFull);
            DssEnvironment.Initialize(httpPort, soapPort, manifestFileFull);
            //Console.WriteLine("Done");

            // Wait for 30 seconds for the DssEnvironment to completely load all services
            // TODO: utilize config file to remove the sleep
            Thread.Sleep(10000);
        }