Subversion Repositories HomeAutomation

Rev

Rev 1610 | Rev 1619 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1.  
  2. var modules = new Array();
  3. var module_aliases = new Array();
  4.  
  5. function CreateModuleAlias(alias, module_name, module_id, extra)
  6. {
  7.     module_aliases[alias] = { "is_group" : false, "module_name" : module_name, "module_id" : module_id, "extra" : extra };
  8. }
  9.  
  10. function CreateModuleAliasGroup(alias, aliases)
  11. {
  12.     module_aliases[alias] = { "is_group" : true, "aliases" : aliases };
  13. }
  14.  
  15. function GetModule(name)
  16. {
  17.     if (typeof modules[name] == 'undefined')
  18.     {
  19.         LoadScript("module/" + name + ".js");
  20.        
  21.         if (eval("typeof " + name + " != 'function'"))
  22.         {
  23.             Log("Failed to load " + name + " module.");
  24.             return;
  25.         }
  26.        
  27.         modules[name] = eval("(new " + name + "('" + name + "'))");
  28.     }
  29.    
  30.     return modules[name];
  31. }
  32.  
  33. function Module_OnChange(full_id, available)
  34. {
  35.     var parts = full_id.split(":", 2);
  36.    
  37.     if (global_legacy)
  38.     {
  39.         legacyOnState(full_id, parts[1], parts[0], available);
  40.         return;
  41.     }
  42.    
  43.     var module = GetModule(parts[0]);
  44.    
  45.     if (module)
  46.     {
  47.         module.SetStatus(parts[1], available);
  48.     }
  49. }
  50.  
  51. function Module_OnMessage()
  52. {
  53.     var full_id = arguments[0];
  54.     var command = arguments[1];
  55.     var number_of_variables = arguments[2];
  56.    
  57.     var variables = new Array();
  58.    
  59.     for (var i = 3; i < number_of_variables * 2 + 3; i += 2)
  60.     {
  61.         variables[arguments[i]] = arguments[i + 1];
  62.     }
  63.    
  64.     variables.length = number_of_variables;
  65.    
  66.     var parts = full_id.split(":", 2);
  67.    
  68.     if (global_legacy)
  69.     {
  70.         legacyOnMessage(full_id, parts[1], parts[0], command, variables);
  71.         return;
  72.     }
  73.    
  74.    
  75.     var module = GetModule(parts[0]);
  76.    
  77.     if (module)
  78.     {
  79.         module.ReceiveMessage(parts[1], command, variables);
  80.     }
  81.     else
  82.     {
  83.         //Log("No one to receive this message, ignoring...");
  84.     }
  85. }
  86.  
  87. function SendModuleMessage(full_id, command, variables)
  88. {
  89.     var args = new Array();
  90.    
  91.     args[args.length] = full_id;
  92.     args[args.length] = command;
  93.     args[args.length] = variables.length;
  94.    
  95.     for (var i = 0; i < variables.length; i++)
  96.     {
  97.         var obj = variables[i];
  98.        
  99.         for (var key in obj)
  100.         {
  101.             args[args.length] = key;
  102.             args[args.length] = obj[key];
  103.         }
  104.     }
  105.    
  106.     Module_SendMessage.apply(null, Array.prototype.slice.call(args, 0));
  107. }
  108.  
  109.  
  110. function Module(name)
  111. {
  112.     this.name_ = name;
  113.     this.ids_ = new Array();
  114.    
  115.     this.EventBase();
  116. }
  117.  
  118. Extend(Module, EventBase);
  119.  
  120. Module.prototype.name_;
  121. Module.prototype.ids_;
  122.  
  123. Module.prototype.SetStatus = function(id, available)
  124. {
  125.     if (typeof this.ids_[id] == 'undefined')
  126.     {
  127.         this.ids_[id] = available;
  128.         this.EventBase.prototype.Trigger.call(this, "onStatusChange", id, available);
  129.     }
  130.     else if (this.ids[id] != available)
  131.     {
  132.         this.EventBase.prototype.Trigger.call(this, "onStatusChange", id, available);
  133.     }
  134. }
  135.  
  136. Module.prototype.ReceiveMessage = function(id, command, variables)
  137. {
  138.     //Log("received " + command);
  139. }
  140.  
  141. Module.prototype.GetAvailableIds = function()
  142. {
  143.     var ids = new Array();
  144.    
  145.     for (var id in this.ids_)
  146.     {
  147.         if (this.ids_[id] && typeof this.ids_[id] != 'function')
  148.         {
  149.             ids[ids.length] = id;
  150.         }
  151.     }
  152.    
  153.     return ids;
  154. }
  155.  
  156. Module.prototype.GetAvailableNames = function()
  157. {
  158.     var result = new Array();
  159.     var available_ids = this.GetAvailableIds();
  160.    
  161.     for (var alias in module_aliases)
  162.     {
  163.         if (module_aliases[alias]["is_group"])
  164.         {
  165.             for (var n = 0; n < module_aliases[alias]["aliases"].length; n++)
  166.             {
  167.                 var group_alias = module_aliases[alias]["aliases"][n];
  168.  
  169.                 if (module_aliases[group_alias]["module_name"] == this.name_ && available_ids.contains(module_aliases[group_alias]["module_id"]))
  170.                 {
  171.                     result.push(alias);
  172.                     break;
  173.                 }
  174.             }
  175.         }
  176.         else
  177.         {
  178.             if (module_aliases[alias]["module_name"] == this.name_ && available_ids.contains(module_aliases[alias]["module_id"]))
  179.             {
  180.                 result.push(alias);
  181.             }
  182.         }
  183.     }
  184.    
  185.     return result;
  186. }
  187.  
  188. Module.prototype.IsAvailable = function(id)
  189. {
  190.     if (typeof this.ids_[id] == 'undefined' || this.ids_[id] == false)
  191.     {
  192.         return false;
  193.     }
  194.    
  195.     return true;
  196. }
  197.  
  198. Module.prototype.SendMessage = function(id, command, variables)
  199. {
  200.     if (this.IsAvailable(id))
  201.     {
  202.         SendModuleMessage(this.name_ + ":" + id, command, variables);
  203.     }
  204. }
  205.  
  206.  
  207. // Console Commands
  208.  
  209. function modulelist()
  210. {
  211.     var result = "";
  212.    
  213.     for (var name in modules)
  214.     {
  215.         result += name + ":  " + modules[name].GetAvailableIds().toString() + "\n";
  216.     }
  217.    
  218.     return result;
  219. }
  220.  
  221. RegisterConsoleCommand(modulelist);
  222.  
  223.