Beispiel #1
0
        static int Main(string[] args)
        {
            LogHelper.LogAdapter = new ConsoleLogAdapter();

            int    retCode         = 0;
            string data            = null;
            string error           = null;
            int    sleepms         = 0;
            var    p               = new OptionSet();
            var    readInputToEof  = false;
            var    lines           = new List <string>();
            bool   runWebServer    = false;
            SPath  outfile         = SPath.Default;
            SPath  path            = SPath.Default;
            string releaseNotes    = null;
            int    webServerPort   = -1;
            bool   generateVersion = false;
            bool   generatePackage = false;
            string version         = null;
            string url             = null;
            string readVersion     = null;
            string msg             = null;
            string host            = null;
            bool   runUsage        = false;

            var arguments = new List <string>(args);

            if (arguments.Contains("usage"))
            {
                runUsage = true;
                arguments.RemoveRange(0, 2);
            }

            p = p
                .Add("r=", (int v) => retCode       = v)
                .Add("d=|data=", v => data          = v)
                .Add("e=|error=", v => error        = v)
                .Add("f=|file=", v => data          = File.ReadAllText(v))
                .Add("ef=|errorFile=", v => error   = File.ReadAllText(v))
                .Add("sleep=", (int v) => sleepms   = v)
                .Add("i|input", v => readInputToEof = true)
                .Add("w|web", v => runWebServer     = true)
                .Add("p|port=", "Port", (int v) => webServerPort = v)
                .Add("g|generateVersion", v => generateVersion   = true)
                .Add("v=|version=", v => version = v)
                .Add("gen-package", "Pass --version --url --path --md5 --rn --msg to generate a package", v => generatePackage = true)
                .Add("u=|url=", v => url = v)
                .Add("path=", v => path  = v.ToSPath())
                .Add("rn=", "Path to file with release notes", v => releaseNotes = v.ReadAllTextIfFileExists())
                .Add("msg=", "Path to file with message for package", v => msg   = v.ReadAllTextIfFileExists())
                .Add("readVersion=", v => readVersion = v)
                .Add("o=|outfile=", v => outfile      = v.ToSPath().MakeAbsolute())
                .Add("h=", "Host", v => host          = v)
                .Add("help", v => p.WriteOptionDescriptions(Console.Out));

            var extra = p.Parse(arguments);

            if (runUsage)
            {
                extra.Remove("usage");
                p.Parse(extra);

                path = extra[extra.Count - 1].ToSPath();
                var server     = RunWebServer(webServerPort);
                var webRequest = (HttpWebRequest)WebRequest.Create(new UriString("http://localhost:" + webServerPort + "/api/usage/unity"));
                webRequest.Method = "POST";
                using (var sw = new StreamWriter(webRequest.GetRequestStream()))
                {
                    foreach (var line in path.ReadAllLines())
                    {
                        sw.WriteLine(line);
                    }
                }
                using (var webResponse = (HttpWebResponse)webRequest.GetResponseWithoutException())
                {
                    MemoryStream ms             = new MemoryStream();
                    var          responseLength = webResponse.ContentLength;
                    using (var sr = new StreamWriter(ms))
                        using (var responseStream = webResponse.GetResponseStream())
                        {
                            Utils.Copy(responseStream, ms, responseLength);
                        }
                    Console.WriteLine(Encoding.ASCII.GetString(ms.ToArray()));
                }

                server.Stop();
                return(0);
            }

            if (generatePackage)
            {
                var md5 = path.CalculateMD5();
                url += "/" + path.FileName;
                var package = new Package
                {
                    Message         = msg,
                    Md5             = md5,
                    ReleaseNotes    = releaseNotes,
                    ReleaseNotesUrl = null,
                    Url             = url,
                    Version         = TheVersion.Parse(version),
                };

                var json = package.ToJson(lowerCase: true, onlyPublic: false);
                if (outfile.IsInitialized)
                {
                    outfile.WriteAllText(json);
                }
                else
                {
                    Console.WriteLine(json);
                }
                return(0);
            }

            if (readVersion != null)
            {
                var json    = File.ReadAllText(readVersion);
                var package = json.FromJson <Package>(lowerCase: true, onlyPublic: false);
                Console.WriteLine(package);
                Console.WriteLine($"{package.Url} {package.Version}");
                return(0);
            }

            if (generateVersion)
            {
                Logger.Error($"Generating version json {version} to {(outfile.IsInitialized ? outfile : "console")}");
                var vv = TheVersion.Parse(version);
                url += $"/unity/releases/github-for-unity-{version}.unitypackage";
                var package = new Package {
                    Url = url, Version = vv
                };
                var json = package.ToJson(lowerCase: true, onlyPublic: false);
                if (outfile.IsInitialized)
                {
                    outfile.WriteAllText(json);
                }
                else
                {
                    Logger.Info(json);
                }
                return(0);
            }

            if (runWebServer)
            {
                if (webServerPort < 0)
                {
                    webServerPort = 50000;
                }
                RunWebServer(outfile, webServerPort);
                return(0);
            }

            if (readInputToEof)
            {
                string line;
                while ((line = Console.ReadLine()) != null)
                {
                    lines.Add(line);
                }
            }

            if (sleepms > 0)
            {
                Thread.Sleep(sleepms);
            }

            if (!String.IsNullOrEmpty(data))
            {
                Console.WriteLine(data);
            }
            else if (readInputToEof)
            {
                Console.WriteLine(String.Join(Environment.NewLine, lines.ToArray()));
            }

            if (!String.IsNullOrEmpty(error))
            {
                Console.Error.WriteLine(error);
            }

            return(retCode);
        }