vox-core
Version:
Runtime de aplicaciones multiplataforma
200 lines (172 loc) • 4.28 kB
JavaScript
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);
}