devir-mbclient
Version:
MB client
151 lines (130 loc) • 4.3 kB
JavaScript
/**
* Created by mac on 17.09.15.
*/
var _ = require("underscore");
var shortid = require("shortid");
module.exports = function(connector, remoteAddr, remotePort, onConnected){
var id = shortid.generate();
var core = new require("./core")({}, onRequest, onConnected);
core.registerConnector(connector, remoteAddr, remotePort);
var routingTable = [];
function onRequest(request){
_.find(routingTable, function(route){
return route.route == request.route;
}).callBack(request);
}
function sendRequest(route, payload, callback){
var id = shortid.generate();
core.sendRequest(id, route, payload);
core.events.once("resp:"+id, function(data){
if(data.isError)
callback(data, null);
else
callback(null, data);
});
}
function registerQueue(name, isPersist, maxVolume, callback){
var id = shortid.generate();
core.sendRegisterQueue(id,name, isPersist, maxVolume);
core.events.on("resp:"+id, function(data){
if(data.isError)
callback(data, null);
else
callback(null, data);
});
}
function subscribeToQueueChange(name, callback, eventCallBack){
var id = shortid.generate();
core.sendSubscribeToQueueChange(id,name);
core.events.on("resp:"+id, function(data){
if(data.isError)
callback(data, null);
else {
core.events.on("event:"+name+":changed", eventCallBack);
callback(null, data);
}
})
}
function pushToQueue(name, payload, callback){
var id = shortid.generate();
core.sendPushToQueue(id,name, payload);
core.events.on("resp:"+id, function(data){
if(data.isError)
callback(data, null);
else {
callback(null, data);
}
})
}
function popFromQueue(name, callback){
var id = shortid.generate();
core.sendPopFromQueue(id,name);
core.events.on("resp:"+id, function(data){
if(data.isError)
callback(data, null);
else {
callback(null, data);
}
});
}
function registerEvent(name, callback){
var id = shortid.generate();
core.sendRegisterEvent(id,name);
core.events.on("resp:"+id, function(data){
if(data.isError)
callback(data, null);
else
callback(null, data);
})
}
function subscribeToEvent(name, callback, eventCallback){
var id = shortid.generate();
core.sendSubscribeToEvent(id,name);
core.events.on("resp:"+id, function(data){
if(data.isError)
callback(data, null);
else
core.events.on("event:"+name, eventCallback);
callback(null, data);
})
}
function unsubscribeFromEvent(name, callback){
var id = shortid.generate();
core.sendUnsubscribeFromEvent(id,name);
core.events.on("resp:"+id, function(data){
if(data.isError)
callback(data, null);
else
callback(null, data);
});
}
function fireEvent(name, payload, callback){
var id = shortid.generate();
core.sendFireEvent(id,name, payload);
core.events.on("resp:"+id, function(data){
if(data.isError)
callback(data, null);
else
callback(null, data);
});
}
function registerRoute(route, callBack){
routingTable.push({route: route, callBack: callBack});
}
function registerService(){
core.sendRegisterService(id, _.pluck(routingTable, 'route'));
}
return {
registerRoute: registerRoute,
sendRequest: sendRequest,
registerService: registerService,
registerQueue: registerQueue,
subscribeToQueueChange: subscribeToQueueChange,
pushToQueue: pushToQueue,
popFromQueue: popFromQueue,
registerEvent: registerEvent,
subscribeToEvent: subscribeToEvent,
unsubscribeFromEvent: unsubscribeFromEvent,
fireEvent: fireEvent
}
}