UNPKG

vox-core

Version:

Runtime de aplicaciones multiplataforma

200 lines (172 loc) 4.28 kB
var ipc= core.org.voxsoftware.Lpr.IPC; var CSType= core.org.voxsoftware.Lpr.Type /** * Manejador de Tipos, Ensamblados y código .NET (c#) * <br>Punto de partida para usar las demás clases del módulo Clr * <br>Al crear un objeto VW.Clr.Manager, establece un nuevo canal de * comunicación entre .NET y Nodejs * @constructor * @memberof VW.Clr * */ var Manager= module.exports= function(IPC){ this.ipc= IPC this.ipc.manager= this } Manager.prototype.beginScope= function(){ return core.org.voxsoftware.Lpr.Scope.begin(this) } Manager.prototype.validate= function(){ if(this.ipc.lastError) throw this.ipc.lastError } /** * Obtener una clase que representa un Tipo o Clase .NET * @param {String} name Nombre completo del tipo .NET * @return {VW.Clr.Type} */ Manager.prototype.get=function(name){ return CSType.get(this, name); } /** * Terminar el canal de comunicación .NET=> nodejs * @return {void} */ Manager.prototype.close= function(){ return this.ipc.close(); } /** * Cargar un ensamblado por su nombre. * @param {String} name * @return {VW.Task} Tarea asíncrona, Retorna: `void` * @example * var task= manager.loadAssembly("System.Xml") * task.then(function(){ * // OK * }, function(er){ * // ERROR * }) */ Manager.prototype.loadAssembly=function(name){ var id=(++this.ipc.commandid); var opt={}; opt.commandid= id; opt.command="assembly.add"; if(!(name instanceof Array)){ name=[name]; } opt.arguments= this.ipc.processArgs(name); return this.ipc.send(opt); } /** * Cargar un ensamblado desde un archivo * @param {String} filename * @return {VW.Task} Tarea asíncrona, Retorna: `void` * @example * var task= manager.loadAssemblyFile("path/to/miensamblado.dll") * task.then(function(){ * // OK * }, function(er){ * // ERROR * }) */ Manager.prototype.loadAssemblyFile=function(name){ var id=(++this.ipc.commandid); var opt={}; opt.commandid= id; opt.command="assembly.addfile"; if(!(name instanceof Array)){ name=[name]; } opt.arguments= this.ipc.processArgs(name); return this.ipc.send(opt); } //{"commandid":0, "command":"assembly.addfile", "arguments":[{"value": "/Users/james/SenaeFirma2s.jar"}]} /** * Compilar código C# * @param {String} code * @return {VW.Task} Tarea asíncrona, Retorna: `void` * @example * var task= manager.compile("public class prueba{public static void mimetodo(){ .... }}") * task.then(function(){ * // OK * }, function(er){ * // ERROR * }) */ Manager.prototype.compile=function(code){ var task= core.VW.Task.get(arguments); var self=this; /* if(self.ecompiling){ self.ecompiling=false; return setTimeout(function(){ self.compile(code,task) },200); } */ if(typeof code=="function"){ var str=code.toString(); var i=str.indexOf("/*"); var j=str.indexOf("*/"); if(i>-1 && j>-1){ code=str.substring(i+2,j); } else{ code=""; } } var id=(++this.ipc.commandid); var opt={}; opt.commandid= id; opt.command="compile"; opt.arguments= this.ipc.processArgs([code]); this.compiling=this.compiling|0; this.compiling++; //this.ecompiling=true; return this.ipc.send(opt,task); } /** * Cada vez que un Method, Field, Property devuelve un objeto de .NET, se guarda en memoria * en el canal de comunicación. Este método libera el objeto para permitir al recolector * de basura (garbagecollector) de .NET desecharlo * @param {VW.Clr.Type} obj * @return {VW.Task} Tarea asíncrona, Retorna: `void` * @example * var manager = new core.VW.Clr.Manager() * var StringBuilderClass= manager.get("System.Text.StringBuilder").method("Append").method("ToString") * var task = StringBuilderClass.create(); * var StringBuilder * var c1,c2,c3,err * err= function(e){ * // ERROR * } * c1= function(value){ * StringBuilder= value * task= StringBuilder.Append("mi String ...") * task.oncomplete= c2 * } * * c2= function(){ * task= StringBuilder.ToString() * task.oncomplete= c3 * } * * c3= function(str){ * console.log(str) * manager.remove(StringBuilder).then(function(){ * // OK * }, err) * } * * task.then(c1,err) */ Manager.prototype.remove=function(obj){ var id=(++this.ipc.commandid); var opt={}; opt.commandid= id; opt.command="remove"; opt.objectid=obj.CSid; //ipc.setCallback(callback,id); return this.ipc.send(opt); }