tart-transport-tcp

0.1.0 • Public • Published

tart-transport-tcp

Stability: 1 - Experimental

NPM version

TCP transport implementation for Tiny Actor Run-Time in JavaScript.

Contributors

@dalnefre, @tristanls

Overview

An implementation of a TCP transport for Tiny Actor Run-Time in JavaScript.

Usage

To run the below example run:

npm run readme
"use strict";
 
var net = require('net');
var tart = require('tart');
var transport = require('../index.js');
 
var sponsor = tart.minimal();
 
var send = sponsor(transport.sendBeh);
 
var receivedMessageCount = 0;
var receptionist = sponsor(function (message) {
    console.log('received message:', message);
    receivedMessageCount++;
    if (receivedMessageCount >= 2) {
        close(); // close listening server
    }
});
 
var serverCapabilities = transport.server(receptionist);
var close = sponsor(serverCapabilities.closeBeh);
var listen = sponsor(serverCapabilities.listenBeh);
 
var fail = sponsor(function (error) {
    console.dir(error);
});
 
var listenAck = sponsor(function listenAckBeh(message) {
    console.log('transport listening on tcp://' + message.host + ':' + message.port);
    send({
        address: 'tcp://localhost:7847', 
        content: '{"some":{"json":"content"},"foo":true}',
        fail: fail,
        ok: function () {
            console.log('foo sent');
        }
    });
    send({
        address: 'tcp://localhost:7847', 
        content: '{"some":{"json":"content"},"bar":true}',
        fail: fail,
        ok: function () {
            console.log('bar sent');
        }
    });    
});
 
listen({host: 'localhost', port: 7847, customer: listenAck});

Tests

npm test

Documentation

Public API

transport.sendBeh

Actor behavior that will attempt to send messages over TCP.

Message format:

  • address: String TCP address in URI format scheme, host, port required, and optional but usually necessary fragment. For example: tcp://localhost:7847/#t5YM5nxnJ/xkPTo....
  • content: String JSON content to be sent.
  • fail: Actor function (error) {} (Default: undefined) Optional actor to report error (if any).
  • ok: Actor function () {} (Default: undefined) Optional actor to report successful send to the destination.
var send = sponsor(transport.sendBeh);
send({address: 'tcp://localhost:7847', content: '{"some":{"json":"content"}}'});

transport.server(receptionist)

  • receptionist: Actor function (message) {} Actor to forward traffic received by this server in {address: , contents: } format.
  • Return: Object An object containing behaviors for listen and close capabilities.

Creates an entangled pair of capabilities that will control a single TCP server.

serverCapabilities.closeBeh

Actor behavior that will close a listening server.

Message is an ack Actor function () {}, an actor that will be sent an empty message once the server closes.

var serverCapabilities = transport.server(receptionist);
var close = sponsor(serverCapabilities.closeBeh);
close(sponsor(function ack() {
    console.log('acked close'); 
});

serverCapabilities.listenBeh

Actor behavior that will create a new listening TCP server.

Message format:

  • customer: Actor function (message) {} Actor to receive acknowledgment once the server is listening.
  • host: String TCP host to listen on.
  • port: Number TCP port to listen on.
var serverCapabilities = transport.server(receptionist);
var listen = sponsor(serverCapabilities.listenBeh);
listen({
    host: 'localhost',
    port: 7847,
    customer: sponsor(function listenAck(message) {
        console.log('transport listening on tcp://' + message.host + ':' + message.port);
    })
});

Sources

Readme

Keywords

none

Package Sidebar

Install

npm i tart-transport-tcp

Weekly Downloads

0

Version

0.1.0

License

MIT

Last publish

Collaborators

  • tristanls