Subversion Repositories HomeAutomation

Rev

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

  1.  
  2. var modules = new Array();
  3.  
  4. function GetModule(name)
  5. {
  6.     if (typeof modules[name] == 'undefined')
  7.     {
  8.         LoadScript("module/" + name + ".js");
  9.        
  10.         if (eval("typeof " + name + " != 'function'"))
  11.         {
  12.             Log("Failed to load " + name + " module.");
  13.             return;
  14.         }
  15.        
  16.         modules[name] = eval("(new " + name + "('" + name + "'))");
  17.     }
  18.    
  19.     return modules[name];
  20. }
  21.  
  22. function Module_OnChange(full_id, available)
  23. {
  24.     var parts = full_id.split(":", 2);
  25.    
  26.     if (legacy)
  27.     {
  28.         legacyOnState(full_id, parts[1], parts[0], available);
  29.         return;
  30.     }
  31.    
  32.     var module = GetModule(parts[0]);
  33.    
  34.     if (module)
  35.     {
  36.         module.SetStatus(parts[1], available);
  37.     }
  38. }
  39.  
  40. function Module_OnMessage()
  41. {
  42.     var full_id = arguments[0];
  43.     var command = arguments[1];
  44.     var number_of_variables = arguments[2];
  45.    
  46.     var variables = new Array();
  47.    
  48.     for (var i = 3; i < number_of_variables * 2 + 3; i += 2)
  49.     {
  50.         variables[arguments[i]] = arguments[i + 1];
  51.     }
  52.    
  53.     variables.length = number_of_variables;
  54.    
  55.     var parts = full_id.split(":", 2);
  56.    
  57.     if (legacy)
  58.     {
  59.         legacyOnMessage(full_id, parts[1], parts[0], command, variables);
  60.         return;
  61.     }
  62.    
  63.    
  64.     var module = GetModule(parts[0]);
  65.    
  66.     if (module)
  67.     {
  68.         module.ReceiveMessage(parts[1], command, variables);
  69.     }
  70.     else
  71.     {
  72.         //Log("No one to receive this message, ignoring...");
  73.     }
  74. }
  75.  
  76. function SendModuleMessage(full_id, command, variables)
  77. {
  78.     var args = new Array();
  79.    
  80.     args[args.length] = full_id;
  81.     args[args.length] = command;
  82.     args[args.length] = variables.length;
  83.    
  84.     for (var i = 0; i < variables.length; i++)
  85.     {
  86.         var obj = variables[i];
  87.        
  88.         for (var key in obj)
  89.         {
  90.             args[args.length] = key;
  91.             args[args.length] = obj[key];
  92.         }
  93.     }
  94.    
  95.     Module_SendMessage.apply(null, Array.prototype.slice.call(args, 0));
  96. }
  97.  
  98.  
  99. function Module(name)
  100. {
  101.     this.name_ = name;
  102.     this.ids_ = new Array();
  103.    
  104.     this.EventBase();
  105. }
  106.  
  107. Extend(Module, EventBase);
  108.  
  109. Module.prototype.name_;
  110. Module.prototype.ids_;
  111.  
  112. Module.prototype.SetStatus = function(id, available)
  113. {
  114.     if (typeof this.ids_[id] == 'undefined')
  115.     {
  116.         this.ids_[id] = available;
  117.         this.EventBase.prototype.Trigger.call(this, "onStatusChange", id, available);
  118.     }
  119.     else if (this.ids[id] != available)
  120.     {
  121.         this.EventBase.prototype.Trigger.call(this, "onStatusChange", id, available);
  122.     }
  123. }
  124.  
  125. Module.prototype.ReceiveMessage = function(id, command, variables)
  126. {
  127.     Log("received " + command);
  128. }
  129.  
  130. Module.prototype.GetAvailableIds = function()
  131. {
  132.     var ids = new Array();
  133.    
  134.     for (var id in this.ids_)
  135.     {
  136.         if (this.ids_[id])
  137.         {
  138.             ids[ids.length] = id;
  139.         }
  140.     }
  141.    
  142.     return ids;
  143. }
  144.  
  145. Module.prototype.IsAvailable = function(id)
  146. {
  147.     if (typeof this.ids_[id] == 'undefined' || this.ids_[id] == false)
  148.     {
  149.         return false;
  150.     }
  151.    
  152.     return true;
  153. }
  154.  
  155. Module.prototype.SendMessage = function(id, command, variables)
  156. {
  157.     if (this.IsAvailable(id))
  158.     {
  159.         SendModuleMessage(this.name_ + ":" + id, command, variables);
  160.     }
  161. }
  162.