jaguar_rpc 1.3.1 jaguar_rpc: ^1.3.1 copied to clipboard
A simple JSON based RPC protocol
jaguar_rpc #
A simple JSON based RPC protocol
Example #
HTTP #
main() async {
int contactIdGen = 0;
// RPC endpoint
final endpoint = new RpcEndpoint()
..route('/get/version', (_) => response(body: {'major': '1', 'minor': '0'}))
..route('/add/todo', (RpcRequest req) {
final newContact = new Contact.fromJson(req.body);
newContact.id = contactIdGen++;
contacts.contacts.add(newContact);
return response(body: contacts.json);
});
// Serve the endpoint with Jaguar http server
final server = new Jaguar();
server.addApi(rpcOnHttp(endpoint));
await server.serve();
}
Client:
main() async {
final client =
new JsonClient(new http.IOClient(), basePath: 'http://localhost:8080/');
{
final resp =
await client.post('/get/version', body: request('/get/version').toMap);
final rpcResp = new RpcResponse.decodeJson(resp.bodyStr);
print(rpcResp.status);
print(rpcResp.body);
}
{
final resp = await client.post('/add/todo',
body: request('/add/todo',
body: new Contact(name: 'teja', email: 'tejainece@gmail.com')
.json)
.toMap);
final rpcResp = new RpcResponse.decodeJson(resp.bodyStr);
print(rpcResp.status);
print(rpcResp.body);
}
}
Websocket server #
main() async {
int contactIdGen = 0;
// RPC endpoint
final endpoint = new RpcEndpoint()
..route('/get/version', (_) => response(body: {'major': '1', 'minor': '0'}))
..route('/add/todo', (RpcRequest req) {
final newContact = new Contact.fromJson(req.body);
newContact.id = contactIdGen++;
contacts.contacts.add(newContact);
return response(body: contacts.json);
});
// Serve the endpoint with Jaguar http server
final server = new Jaguar();
server.get('/ws', rpcOnWebSocket(endpoint));
await server.serve();
}
Client:
main() async {
// Client
final WebSocket socket = await WebSocket.connect('ws://localhost:8080/ws');
final Stream<RpcResponse> data =
socket.asBroadcastStream().map((d) => new RpcResponse.decodeJson(d));
{
socket.add(request('/get/version').json);
final RpcResponse rpcResp = await data.first;
print(rpcResp.status);
print(rpcResp.body);
}
{
socket.add(request('/add/todo',
body: new Contact(name: 'teja', email: 'tejainece@gmail.com').toMap)
.json);
final RpcResponse rpcResp = await data.first;
print(rpcResp.status);
print(rpcResp.body);
}
}
WebSocket IO client #
main() async {
// Client
final RpcWebSocketClient socket =
await RpcWebSocketClient.connect('ws://localhost:8080/ws');
{
final RpcResponse rpcResp = await socket.send(request('/get/version'));
print(rpcResp.status);
print(rpcResp.body);
}
{
final RpcResponse rpcResp = await socket.send(request('/add/todo',
body: new Contact(name: 'teja', email: 'tejainece@gmail.com').toMap));
print(rpcResp.status);
print(rpcResp.body);
}
}
Isolate #
TODO
TCP #
TODO
Plain #
main() {
int contactIdGen = 0;
final server = new RpcEndpoint()
..route('/get/version', (_) => response(body: {'major': '1', 'minor': '0'}))
..route('/add/todo', (RpcRequest req) {
final newContact = new Contact.fromJson(req.body);
newContact.id = contactIdGen++;
contacts.contacts.add(newContact);
return response(body: contacts.json);
});
{
final RpcResponse resp = server.handleRequest(request('/get/unknown'));
print(resp.status);
}
{
final RpcResponse resp = server.handleRequest(request('/add/todo',
body: new Contact(name: 'teja', email: 'tejainece@gmail.com').json));
print(resp.status);
print(resp.body);
}
}
Native extension #
TODO
TODO #
- HTTP interface
- Websocket interface
- TCP interface
- Isolate interface