initial commit
This commit is contained in:
commit
4b60ece582
327 changed files with 28286 additions and 0 deletions
85
magnus/core/commands.js
Normal file
85
magnus/core/commands.js
Normal file
|
@ -0,0 +1,85 @@
|
|||
"use strict";
|
||||
|
||||
var ModelVocabulary = require("../lib/wModel/vocabulary");
|
||||
|
||||
var Vocabulary = require("../lib/wType/vocabulary");
|
||||
var String = require("../lib/wType/string");
|
||||
|
||||
var Commands = ModelVocabulary.inherit({
|
||||
"className": "Commands",
|
||||
"constructor": function(address) {
|
||||
ModelVocabulary.fn.constructor.call(this, address);
|
||||
|
||||
this._commands = global.Object.create(null);
|
||||
},
|
||||
"destructor": function() {
|
||||
for (var key in this._commands) {
|
||||
var cmd = this._commands[key];
|
||||
if (cmd.enabled) {
|
||||
this._removeHandler(cmd.handler);
|
||||
}
|
||||
cmd.name.destructor();
|
||||
cmd.handler.destructor();
|
||||
cmd.arguments.destructor();
|
||||
delete this._commands[key];
|
||||
}
|
||||
|
||||
ModelVocabulary.fn.destructor.call(this);
|
||||
},
|
||||
"addCommand": function(key, handler, args) {
|
||||
if (this._commands[key]) {
|
||||
throw new Error("Command with this key already exist");
|
||||
}
|
||||
this._commands[key] = {
|
||||
name: new String(key),
|
||||
handler: handler,
|
||||
arguments: args,
|
||||
enabled: false
|
||||
}
|
||||
},
|
||||
"_disableCommand": function(cmd) {
|
||||
this._removeHandler(cmd.handler);
|
||||
cmd.enabled = false;
|
||||
this.erase(cmd.name.toString());
|
||||
},
|
||||
"enableCommand": function(key, value) {
|
||||
var cmd = this._commands[key];
|
||||
|
||||
if (!cmd) {
|
||||
throw new Error("An attempt to access non existing command: " + key);
|
||||
}
|
||||
|
||||
if (cmd.enabled !== value) {
|
||||
if (value) {
|
||||
this._enableCommand(cmd);
|
||||
} else {
|
||||
this._disableCommand(cmd);
|
||||
}
|
||||
}
|
||||
},
|
||||
"_enableCommand": function(cmd) {
|
||||
this._addHandler(cmd.handler);
|
||||
cmd.enabled = true;
|
||||
|
||||
var vc = new Vocabulary();
|
||||
vc.insert("address", cmd.handler.address.clone());
|
||||
vc.insert("arguments", cmd.arguments.clone());
|
||||
|
||||
this.insert(cmd.name.toString(), vc);
|
||||
},
|
||||
"removeCommand": function(name) {
|
||||
var cmd = this._commands[name];
|
||||
if (cmd === undefined) {
|
||||
throw new Error("An attempt to access non existing command: " + key);
|
||||
}
|
||||
if (cmd.enabled) {
|
||||
this._disableCommand(cmd);
|
||||
}
|
||||
cmd.name.destructor();
|
||||
cmd.handler.destructor();
|
||||
cmd.arguments.destructor();
|
||||
delete this._commands[name];
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = Commands;
|
Loading…
Add table
Add a link
Reference in a new issue