Client/server!
This commit is contained in:
parent
81a307e03c
commit
e14082795c
|
@ -0,0 +1,34 @@
|
|||
import { Actor, Ref, Turn } from "./actor.js";
|
||||
import { Relay, spawnRelay } from "./relay.js";
|
||||
|
||||
import * as net from 'net';
|
||||
|
||||
const [ moduleName ] = process.argv.slice(2);
|
||||
|
||||
const socket = net.createConnection({ port: 5999, host: 'localhost' }, () => {
|
||||
Turn.for(new Actor(), t => {
|
||||
let shutdownRef: Ref;
|
||||
spawnRelay(t, {
|
||||
packetWriter: bs => socket.write(bs),
|
||||
setup(t: Turn, r: Relay) {
|
||||
socket.on('error', err => t.freshen(t =>
|
||||
((err as any).code === 'ECONNRESET') ? t.quit() : t.crash(err)));
|
||||
socket.on('close', () => t.freshen(t => t.quit()));
|
||||
socket.on('end', () => t.freshen(t => t.quit()));
|
||||
socket.on('data', data => r.accept(data));
|
||||
t.actor.atExit(() => {
|
||||
console.log('closing socket');
|
||||
socket.destroy();
|
||||
});
|
||||
shutdownRef = t.ref({
|
||||
retract(t) { t.quit(); }
|
||||
});
|
||||
},
|
||||
initialOid: 0,
|
||||
// debug: true,
|
||||
}).then(ds => import(moduleName).then(m => t.freshen(t => {
|
||||
t.assert(shutdownRef, true);
|
||||
m.default(t, ds);
|
||||
})));
|
||||
});
|
||||
});
|
|
@ -0,0 +1,38 @@
|
|||
import { Actor, Turn } from './actor.js';
|
||||
import { Dataspace } from './dataspace.js';
|
||||
import { Relay, spawnRelay } from './relay.js';
|
||||
import * as net from 'net';
|
||||
|
||||
Turn.for(new Actor(), t => {
|
||||
const ds = t.ref(new Dataspace());
|
||||
|
||||
function spawnConnection(t: Turn, socket: net.Socket) {
|
||||
console.log('connection', socket.remoteAddress, socket.remotePort);
|
||||
spawnRelay(t, {
|
||||
packetWriter: bs => socket.write(bs),
|
||||
setup(t: Turn, r: Relay) {
|
||||
socket.on('error', err => t.freshen(t =>
|
||||
((err as any).code === 'ECONNRESET') ? t.quit() : t.crash(err)));
|
||||
socket.on('close', () => t.freshen(t => t.quit()));
|
||||
socket.on('end', () => t.freshen(t => t.quit()));
|
||||
socket.on('data', data => r.accept(data));
|
||||
t.actor.atExit(() => socket.destroy());
|
||||
},
|
||||
initialRef: ds,
|
||||
// debug: true,
|
||||
});
|
||||
}
|
||||
|
||||
t.spawn(t => {
|
||||
const server = net.createServer(socket => t.freshen(t => spawnConnection(t, socket)));
|
||||
server.on('error', err => t.freshen(t => t.crash(err)));
|
||||
server.listen(5999, '0.0.0.0', 512);
|
||||
t.actor.atExit(() => {
|
||||
try {
|
||||
server.close();
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue