The actorify module turns any duplex stream into an actor.
This example demonstrates how you can associate callbacks with an actor message. That is, you can use actorify
for remote method invocation.
actor.send('get user', name, callback);
The actorify module turns any duplex stream into an actor.
This example demonstrates how you can associate callbacks with an actor message. That is, you can use actorify
for remote method invocation.
actor.send('get user', name, callback);
### | |
# quick demo using actorify for remote method invocation | |
# | |
### | |
net = require 'net' | |
actorify = require 'actorify' | |
# datastore of users | |
users = | |
Bob: | |
first: 'Bob' | |
last: 'Johnson' | |
age: 54 | |
sex: 'male' | |
Mary: | |
first: 'Mary' | |
last: 'Jackson' | |
age: 44 | |
sex: 'female' | |
Dick: | |
first: 'Dick' | |
last: 'Jones' | |
age: 34 | |
sex: 'male' | |
# server | |
serve = (sock) -> | |
actor = actorify(sock) | |
getUser = (user, reply) -> reply null, users[user] | |
getLast = (user, reply) -> reply null, users[user].last | |
actor.on('get user', getUser) | |
actor.on('get last', getLast) | |
server = net.createServer(serve) | |
.listen(3000) | |
# client | |
sock = net.connect 3000 | |
actor = actorify sock | |
getUser = (name) -> | |
print = (err, user) -> | |
console.log "#{user.first} is #{user.age} years old" | |
actor.send('get user', name, print) | |
getUser(name) for name in ['Bob', 'Mary', 'Dick'] | |
getLast = (first) -> | |
print = (err, last) -> | |
console.log first, last | |
actor.send('get last', first, print) | |
getLast(name) for name in ['Bob', 'Mary', 'Dick'] |
(function() { | |
var actor, actorify, getLast, getUser, name, net, serve, server, sock, users, _i, _j, _len, _len1, _ref, _ref1; | |
net = require('net'); | |
actorify = require('actorify'); | |
// user database | |
users = { | |
Bob: { | |
first: 'Bob', | |
last: 'Johnson', | |
age: 54, | |
sex: 'male' | |
}, | |
Mary: { | |
first: 'Mary', | |
last: 'Jackson', | |
age: 44, | |
sex: 'female' | |
}, | |
Dick: { | |
first: 'Dick', | |
last: 'Jones', | |
age: 34, | |
sex: 'male' | |
} | |
}; | |
// server | |
serve = function(sock) { | |
var actor, getLast, getUser; | |
actor = actorify(sock); | |
getUser = function(user, reply) { | |
reply(null, users[user]); | |
}; | |
getLast = function(user, reply) { | |
reply(null, users[user].last); | |
}; | |
actor.on('get user', getUser); | |
actor.on('get last', getLast); | |
}; | |
server = net.createServer(serve).listen(3000); | |
// client | |
sock = net.connect(3000); | |
actor = actorify(sock); | |
getUser = function(name) { | |
var print; | |
print = function(err, user) { | |
console.log("" + user.first + " is " + user.age + " years old"); | |
}; | |
actor.send('get user', name, print); | |
}; | |
_ref = ['Bob', 'Mary', 'Dick']; | |
for (_i = 0, _len = _ref.length; _i < _len; _i++) { | |
name = _ref[_i]; | |
getUser(name); | |
} | |
getLast = function(first) { | |
var print; | |
print = function(err, last) { | |
console.log(first, last); | |
}; | |
actor.send('get last', first, print); | |
}; | |
_ref1 = ['Bob', 'Mary', 'Dick']; | |
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { | |
name = _ref1[_j]; | |
getLast(name); | |
} | |
}).call(this); |
{ | |
"name": "actorify-rpc-demo", | |
"version": "0.0.1", | |
"description": "Demo how to use actorify for RPC calls.", | |
"main": "index.js", | |
"scripts": { | |
"start": "node index.js" | |
}, | |
"dependencies": { | |
"actorify": "~0.1.0" | |
} | |
} |