// Libuv
function uv_tcp_connect(uv_tcp_t, addr,cb) { cb(); }
// c++
class TCPWrap {
uv_tcp_t = {};
static Connect(cb) {
const tcpWrap = this[0];
uv_tcp_connect(
tcpWrap.uv_tcp_t,
{ip: '127.0.0.1', port: 80},
() => { cb(); }
);
}
}
function FunctionTemplate(cb) {
function Tmp() {
Object.assign(this, map);
cb(this);
}
const map = {};
return {
PrototypeTemplate: function() {
return {
set: function(k, v) {
Tmp.prototype[k] = v;
}
}
},
InstanceTemplate: function() {
return {
set: function(k, v) {
map[k] = v;
}
}
},
GetFunction() {
return Tmp;
}
}
}
const TCPFunctionTemplate = FunctionTemplate((target) => { target[0] = new TCPWrap(); })
TCPFunctionTemplate.PrototypeTemplate().set('connect', TCPWrap.Connect);
TCPFunctionTemplate.InstanceTemplate().set('name', 'hi');
const TCP = TCPFunctionTemplate.GetFunction();
// js
const tcp = new TCP();
tcp.connect(() => { console.log('连接成功'); });
tcp.name;