/// <summary> /// Register applet /// </summary> /// <param name="applet">Applet.</param> public virtual bool LoadApplet(AppletManifest applet) { if (applet.Info.Id == (ApplicationContext.Current.Configuration.GetSection <AppletConfigurationSection>().StartupAsset ?? "org.openiz.core")) { this.m_appletCollection.DefaultApplet = applet; } applet.Initialize(); this.m_appletCollection.Add(applet); AppletCollection.ClearCaches(); return(true); }
/// <summary> /// Load applet /// </summary> public override bool LoadApplet(AppletManifest applet) { if (applet.Assets.Count == 0) { var baseDirectory = this.m_appletBaseDir[applet]; if (!baseDirectory.EndsWith(Path.DirectorySeparatorChar.ToString())) { baseDirectory += Path.DirectorySeparatorChar.ToString(); } applet.Assets.AddRange(this.ProcessDirectory(baseDirectory, baseDirectory)); applet.Initialize(); if (applet.Info.Version.Contains("*")) { applet.Info.Version = applet.Info.Version.Replace("*", "0000"); } } return(base.LoadApplet(applet)); }
/// <summary> /// Compile /// </summary> static int Compile(ConsoleParameters parameters) { int retVal = 0; // First is there a Manifest.xml? if (!Path.IsPathRooted(parameters.Source)) { parameters.Source = Path.Combine(Environment.CurrentDirectory, parameters.Source); } // Applet collection AppletCollection ac = new AppletCollection(); XmlSerializer xsz = new XmlSerializer(typeof(AppletManifest)); XmlSerializer xpz = new XmlSerializer(typeof(AppletPackage)); if (parameters.References != null) { foreach (var itm in parameters.References) { if (File.Exists(itm)) { using (var fs = File.OpenRead(itm)) { if (Path.GetExtension(itm) == ".pak") { using (var gzs = new GZipStream(fs, CompressionMode.Decompress)) { var pack = xpz.Deserialize(gzs) as AppletPackage; var mfst = pack.Unpack(); mfst.Initialize(); ac.Add(mfst); Console.WriteLine("Added reference to {0}; v={1}", mfst.Info.Id, mfst.Info.Version); } } else { var mfst = xsz.Deserialize(fs) as AppletManifest; mfst.Initialize(); ac.Add(mfst); Console.WriteLine("Added reference to {0}; v={1}", mfst.Info.Id, mfst.Info.Version); } } } } } Console.WriteLine("Processing {0}...", parameters.Source); String manifestFile = Path.Combine(parameters.Source, "manifest.xml"); if (!File.Exists(manifestFile)) { Console.WriteLine("Directory must have manifest.xml"); } else { Console.WriteLine("\t Reading Manifest...", parameters.Source); using (var fs = File.OpenRead(manifestFile)) { AppletManifest mfst = xsz.Deserialize(fs) as AppletManifest; mfst.Assets.AddRange(ProcessDirectory(parameters.Source, parameters.Source, parameters)); foreach (var i in mfst.Assets) { i.Name = i.Name.Substring(1); } if (mfst.Info.Version.Contains("*")) { mfst.Info.Version = mfst.Info.Version.Replace("*", (((DateTime.Now.Subtract(new DateTime(DateTime.Now.Year, 1, 1)).Ticks >> 24) % 10000)).ToString("0000")); } if (!Directory.Exists(Path.GetDirectoryName(parameters.Output)) && !String.IsNullOrEmpty(Path.GetDirectoryName(parameters.Output))) { Directory.CreateDirectory(Path.GetDirectoryName(parameters.Output)); } AppletPackage pkg = null; // Is there a signature? if (!String.IsNullOrEmpty(parameters.SignKey)) { pkg = CreateSignedPackage(mfst, parameters); if (pkg == null) { return(-102); } } else { Console.WriteLine("WARNING:>>> THIS PACKAGE IS NOT SIGNED - MOST OPEN IZ TOOLS WILL NOT LOAD IT"); mfst.Info.PublicKeyToken = null; pkg = mfst.CreatePackage(parameters.Compression); //pkg.Meta.PublicKeyToken = null; } pkg.Meta.Hash = SHA256.Create().ComputeHash(pkg.Manifest); using (var ofs = File.Create(Path.ChangeExtension(parameters.Output ?? "out.pak", ".pak"))) { pkg.Save(ofs); } // Render the build directory if (!String.IsNullOrEmpty(parameters.Deploy)) { var bindir = Path.Combine(Path.GetDirectoryName(parameters.Output), "bin"); if (String.IsNullOrEmpty(parameters.Deploy)) { if (Directory.Exists(bindir) && parameters.Clean) { Directory.Delete(bindir, true); } bindir = Path.Combine(bindir, mfst.Info.Id); Directory.CreateDirectory(bindir); } else { bindir = parameters.Deploy; } mfst.Initialize(); ac.Add(mfst); foreach (var lang in mfst.Strings) { string wd = Path.Combine(bindir, lang.Language); if (String.IsNullOrEmpty(parameters.Lang)) { Directory.CreateDirectory(wd); } else if (parameters.Lang == lang.Language) { wd = bindir; } else { continue; } foreach (var m in ac) { foreach (var itm in m.Assets) { try { String fn = Path.Combine(wd, m.Info.Id, itm.Name.Replace("/", "\\")); Console.WriteLine("\tRendering {0}...", fn); if (!Directory.Exists(Path.GetDirectoryName(fn))) { Directory.CreateDirectory(Path.GetDirectoryName(fn)); } File.WriteAllBytes(fn, ac.RenderAssetContent(itm, lang.Language)); } catch (Exception e) { Console.WriteLine("E: {0}: {1} {2}", itm, e.GetType().Name, e); retVal = -1000; } } } } } } } return(retVal); }