ataraxia-services
Services with RPC and events for an Ataraxia
network.
- Based around well-defined contracts, making what a service supports very clear
- Register services, allowing them to be consumed anywhere in the network
- Access services via identifiers or events
- Listen for when services become available or unavailable either globally or specifically on a single service
- Support for remote events via Atvik,
letting nodes listen to events from another node
- Create proxy objects for a more natural way to call methods and listen to events,
with support for type conversions and TypeScript declarations
Usage
To use services on top of a network install ataraxia-services
:
npm install ataraxia-services
Services can then be consumed and registered by creating a Services
instance on top of the network:
import { Services, ServiceContract, stringType } from 'ataraxia-services';
const net = ...
const services = new Services(net);
services.onServiceAvailable(service => console.log(service.id, 'is now available'));
services.onServiceUnavailable(service => console.log(service.id, 'is no longer available'));
await net.join();
await services.join();
const EchoService = new ServiceContract()
.defineMethod('echo', {
returnType: stringType,
parameters: [
{
name: 'message',
type: stringType
}
]
});
services.register('echo', EchoService.implement({
echo(message) {
return Promise.resolve(message);
}
}));
const echoService = services.get('echo');
if(echoService.available) {
await echoService.call('echo', 'Hello world');
const proxied = echoService.as(EchoService);
await proxied.echo('Hello world');
}