Example #1
0
        static int Main(string[] args)
        {
            var    exeName  = Path.GetFileName(Assembly.GetExecutingAssembly().Location);
            var    showHelp = false;
            var    windowsPhonePortMapping = false;
            int    exitCode    = 0;
            string logFileName = "routerlog.txt";

            var p = new OptionSet
            {
                "Copyright (c) Stride contributors (https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp) All Rights Reserved",
                "Stride Router Server - Version: "
                +
                String.Format(
                    "{0}.{1}.{2}",
                    typeof(Program).Assembly.GetName().Version.Major,
                    typeof(Program).Assembly.GetName().Version.Minor,
                    typeof(Program).Assembly.GetName().Version.Build) + string.Empty,
                string.Format("Usage: {0} command [options]*", exeName),
                string.Empty,
                "=== Options ===",
                string.Empty,
                { "h|help", "Show this message and exit", v => showHelp = v != null },
                { "log-file=", "Log build in a custom file (default: routerlog.txt).", v => logFileName = v },
                { "register-windowsphone-portmapping", "Register Windows Phone IpOverUsb port mapping", v => windowsPhonePortMapping = true },
            };

            try
            {
                var commandArgs = p.Parse(args);
                if (showHelp)
                {
                    p.WriteOptionDescriptions(Console.Out);
                    return(0);
                }

                // Make sure path exists
                if (commandArgs.Count > 0)
                {
                    throw new OptionException("This command expect no additional arguments", "");
                }

                if (windowsPhonePortMapping)
                {
                    WindowsPhoneTracker.RegisterWindowsPhonePortMapping();
                    return(0);
                }

                // Enable file logging
                if (!string.IsNullOrEmpty(logFileName))
                {
                    var fileLogListener = new TextWriterLogListener(File.Open(logFileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite));
                    GlobalLogger.GlobalMessageLogged += fileLogListener;
                }

                // TODO: Lock will be only for this folder but it should be shared across OS
                using (var mutex = FileLock.TryLock("connectionrouter.lock"))
                {
                    if (mutex == null)
                    {
                        Console.WriteLine("Another instance of Stride Router is already running");
                        return(-1);
                    }

                    var router = new Router();

                    // Start router (in listen server mode)
                    router.Listen(RouterClient.DefaultPort).Wait();

                    // Start Android management thread
                    new Thread(() => AndroidTracker.TrackDevices(router))
                    {
                        IsBackground = true
                    }.Start();

                    // Start Windows Phone management thread
                    new Thread(() => WindowsPhoneTracker.TrackDevices(router))
                    {
                        IsBackground = true
                    }.Start();

                    //Start iOS device discovery and proxy launcher
                    //Currently this is used only internally for QA testing... as we cannot attach the debugger from windows for normal usages..
                    if (IosTracker.CanProxy())
                    {
                        new Thread(async() =>
                        {
                            var iosTracker = new IosTracker(router);
                            await iosTracker.TrackDevices();
                        })
                        {
                            IsBackground = true
                        }.Start();
                    }

                    SetupTrayIcon(logFileName);

                    // Start WinForms loop
                    System.Windows.Forms.Application.Run();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("{0}: {1}", exeName, e);
                if (e is OptionException)
                {
                    p.WriteOptionDescriptions(Console.Out);
                }
                exitCode = 1;
            }

            return(exitCode);
        }
Example #2
0
        static int Main(string[] args)
        {
            var    exeName     = Path.GetFileName(Assembly.GetExecutingAssembly().Location);
            var    showHelp    = false;
            int    exitCode    = 0;
            string logFileName = "routerlog.txt";

            var p = new OptionSet
            {
                "Copyright (c) 2018-2021 Stride and its contributors (https://stride3d.net)",
                "Copyright (c) 2011-2018 Silicon Studio Corp. (https://www.siliconstudio.co.jp)",
                "Stride Router Server - Version: " + Format("{0}.{1}.{2}",
                                                            typeof(Program).Assembly.GetName().Version.Major,
                                                            typeof(Program).Assembly.GetName().Version.Minor,
                                                            typeof(Program).Assembly.GetName().Version.Build),
                Empty,
                $"Usage: {exeName} command [options]*",
                Empty,
                "=== Options ===",
                Empty,
                { "h|help", "Show this message and exit", v => showHelp = v != null },
                { "log-file=", "Log build in a custom file (default: routerlog.txt).", v => logFileName = v }
            };

            try
            {
                var commandArgs = p.Parse(args);
                if (showHelp)
                {
                    p.WriteOptionDescriptions(Console.Out);
                    return(0);
                }

                // Make sure path exists
                if (commandArgs.Count > 0)
                {
                    throw new OptionException("This command expect no additional arguments.", "");
                }

                // Enable file logging
                if (!string.IsNullOrEmpty(logFileName))
                {
                    var fileLogListener = new TextWriterLogListener(File.Open(logFileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite));
                    GlobalLogger.GlobalMessageLogged += fileLogListener;
                }

                // TODO: Lock will be only for this folder but it should be shared across OS
                using (var mutex = FileLock.TryLock("connectionrouter.lock"))
                {
                    if (mutex is null)
                    {
                        Console.WriteLine("Another instance of Stride Router is already running.");
                        return(-1);
                    }

                    var router = new Router();

                    // Start router (in listen server mode)
                    router.Listen(RouterClient.DefaultPort).Wait();

                    // Start WinForms loop
                    System.Windows.Forms.Application.Run();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("{0}: {1}", exeName, ex);
                if (ex is OptionException)
                {
                    p.WriteOptionDescriptions(Console.Out);
                }
                exitCode = 1;
            }

            return(exitCode);
        }