vox-core
Version:
Runtime de aplicaciones multiplataforma
141 lines (97 loc) • 4.87 kB
Markdown
**NOTICIA**: vox-core-clr es parte de [vox-core](https://www.npmjs.com/package/vox-core), y por tanto se ejecuta sobre vox-core. Si usted ya tiene instalado vox-core no descargue este módulo, puesto que vox-core ya tiene incluido este módulo. Si desea usar este módulo sin instalar vox-core por favor **instale [voxnode-clr](https://www.npmjs.com/package/voxnode-clr)**
VoxSoftware está creando módulos independientes de cada parte de vox-core utilizando el prefijo *voxnode-* en lugar de usar *vox-core-*. Por lo tanto si desea usar alguno de los submódulos presentes en vox-core, de manera independiente revise utilizando este prefijo.
> vox-core-clr ==> voxnode-clr
vox-core-clr permite usar Tipos y Ensamblados .NET desde nodejs. vox-core-clr tiene las siguientes ventajas sobre edge.js
* No tiene que compilarse. vox-core-clr crea un canal de comunicación entre .NET y nodejs
* Permite usar clases ya predeterminadas de .NET sin tener que compilar código fuente C
* Los métodos devuelven tareas asíncronas (Similares a Promises, compatibles con async/await: *Regenerator* de facebook y *vox-core-es6* de vox-core)
vox-core-clr tiene ciertas características más:
* Permite compilar código fuente C
* Permite cargar ensamblados por nombre y por archivo
* Permite utilizar cualquiera de las sobrecargas de un método
* Permite obtener y ajustar valores de propiedades con índices
Debe instalar .NET Framework 4.0 en Windows (en versiones recientes viene preinstalado), o Mono en sistemas Unix
### Cambios
* [Historial de cambios](/submodules/vox-core-clr/CHANGES.md)
### Documentación
Incluye las siguientes clases:
* [VW.Clr.Field](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.Field.html)
* [VW.Clr.Function](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.Function.html)
* [VW.Clr.InvocationException](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.InvocationException.html)
* [VW.Clr.InvocationTimeoutException](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.InvocationTimeoutException.html)
* VW.Clr.IPC *uso interno*
* [VW.Clr.Manager](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.Manager.html)
* [VW.Clr.Property](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.Property.html)
* [VW.Clr.Type](http://voxsoftware.github.io/vox-core/docs/vox-core/0.1.0/VW.Clr.Type.html)
### Ejemplo
Este ejemplo usa sintaxis ES6 y async/await. Se puede usar un transpilador como babel, o ejecutar directamente con vox-core creando un archivo con extensión .es6
```javascript
var clr= new core.VW.Clr.Manager()
var test= async function(){
// Esta parte se demora un poco mientras se carga por completo el canal de comunicación
await clr.loadAssembly("System.Xml")
// La primera vez se demora un poco más porque carga los miembros de los tipos
var d= new Date()
await testxml()
console.info("Time: ", new Date()-d)
var d= new Date()
await testxml()
console.info("Time: ", new Date()-d)
var d= new Date()
await testxmlScope()
console.info("Time: ", new Date()-d)
var d= new Date()
await testxmlScope()
console.info("Time: ", new Date()-d)
await clr.close()
process.exit(0)
}
var testxml= async function(){
try{
var Xml= {}
// Cargar los tipos ...
Xml.Document= clr.get("System.Xml.XmlDocument")
await Xml.Document.loadMembers()
var doc= await Xml.Document.create()
var root= await doc.CreateXmlDeclaration("1.0","utf8","yes")
await doc.AppendChild(root)
var elemento1= await doc.CreateElement("element1")
var elemento2= await doc.CreateElement("element2")
await elemento1.AppendChild(elemento2)
await elemento2.setInnerText("Hola mundo!")
await doc.AppendChild(elemento1)
console.info(await doc.getOuterXml())
var tasks=[root.dispose(), elemento1.dispose(),
elemento2.dispose(), doc.dispose()]
await core.VW.Task.waitMany(tasks)
}
catch(er){
console.error(er)
}
}
var testxmlScope= async function(){
try{
var Xml= {}
// Cargar los tipos ...
var scope= clr.beginScope()
Xml.Document= clr.get("System.Xml.XmlDocument")
await Xml.Document.loadMembers()
var doc= await scope(Xml.Document).create()
var root= await scope(doc).CreateXmlDeclaration("1.0","utf8","yes")
await doc.AppendChild(root)
var elemento1= await doc.CreateElement("element1")
var elemento2= await doc.CreateElement("element2")
await elemento1.AppendChild(elemento2)
await elemento2.setInnerText("Hola mundo!")
await doc.AppendChild(elemento1)
console.info(await doc.getOuterXml())
await scope.end()
}
catch(er){
console.error(er)
}
}
test()
```