initial commit
This commit is contained in:
commit
4b60ece582
327 changed files with 28286 additions and 0 deletions
91
libjs/wDispatcher/dispatcher.js
Normal file
91
libjs/wDispatcher/dispatcher.js
Normal file
|
@ -0,0 +1,91 @@
|
|||
"use strict";
|
||||
var Class = require("../utils/class");
|
||||
var Handler = require("./handler");
|
||||
var DefaultHandler = require("./defaulthandler");
|
||||
var Address = require("../wType/address");
|
||||
var AbstractMap = require("../wContainer/abstractmap");
|
||||
var AbstractOrder = require("../wContainer/abstractorder");
|
||||
|
||||
var HandlerOrder = AbstractOrder.template(Handler);
|
||||
var DefaultHandlerOrder = AbstractOrder.template(DefaultHandler);
|
||||
var HandlerMap = AbstractMap.template(Address, HandlerOrder);
|
||||
|
||||
var Dispatcher = Class.inherit({
|
||||
"className": "Dispatcher",
|
||||
"constructor": function() {
|
||||
Class.fn.constructor.call(this);
|
||||
|
||||
this._handlers = new HandlerMap();
|
||||
this._defautHandlers = new DefaultHandlerOrder(false);
|
||||
},
|
||||
"destructor": function() {
|
||||
this._handlers.destructor();
|
||||
|
||||
Class.fn.destructor.call(this);
|
||||
},
|
||||
"registerHandler": function(handler) {
|
||||
var itr = this._handlers.find(handler.address);
|
||||
var order;
|
||||
|
||||
|
||||
if (itr["=="](this._handlers.end())) {
|
||||
order = new HandlerOrder(false);
|
||||
this._handlers.insert(handler.address.clone(), order);
|
||||
} else {
|
||||
order = itr["*"]();
|
||||
}
|
||||
|
||||
order.push_back(handler);
|
||||
},
|
||||
"unregisterHandler": function(handler) {
|
||||
var itr = this._handlers.find(handler.address);
|
||||
|
||||
if (!itr["=="](this._handlers.end())) {
|
||||
|
||||
var ord = itr["*"]().second;
|
||||
ord.erase(handler);
|
||||
|
||||
if (ord.size() === 0) {
|
||||
this._handlers.erase(itr);
|
||||
}
|
||||
|
||||
} else {
|
||||
throw new Error("Can't unregister hander");
|
||||
}
|
||||
},
|
||||
"registerDefaultHandler": function(dh) {
|
||||
this._defautHandlers.push_back(dh);
|
||||
},
|
||||
"unregisterDefaultHandler": function(dh) {
|
||||
this._defautHandlers.erase(dh);
|
||||
},
|
||||
"pass": function(event) {
|
||||
var itr = this._handlers.find(event.getDestination());
|
||||
|
||||
if (!itr["=="](this._handlers.end())) {
|
||||
var ord = itr["*"]().second;
|
||||
|
||||
var o_beg = ord.begin();
|
||||
var o_end = ord.end();
|
||||
var hands = [];
|
||||
|
||||
for (; !o_beg["=="](o_end); o_beg["++"]()) {
|
||||
hands.push(o_beg["*"]());
|
||||
}
|
||||
|
||||
for (var i = 0; i < hands.length; ++i) {
|
||||
hands[i].pass(event)
|
||||
}
|
||||
} else {
|
||||
var dhitr = this._defautHandlers.begin();
|
||||
var dhend = this._defautHandlers.end();
|
||||
for (; !dhitr["=="](dhend); dhitr["++"]()) {
|
||||
if (dhitr["*"]().call(event)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = Dispatcher;
|
Loading…
Add table
Add a link
Reference in a new issue