Subversion Repositories HomeAutomation

Rev

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

  1.  
  2. CanServices = new Array();
  3. CanOfflineTimeoutId = null;
  4.  
  5. // This is called when a message has been received from the can network
  6. function handleMessage(className, directionFlag, moduleName, moduleId, commandName, data)
  7. {
  8.     var canMessage = new CanMessage(className, directionFlag, moduleName, moduleId, commandName, eval("(" + data + ")"));
  9.     var fullId = canMessage.getModuleName() + canMessage.getModuleId();
  10.  
  11.     if (canMessage.getCommandName() == "List" && canMessage.getDirectionFlag() == "From_Owner")
  12.     {
  13.         if (!CanServices[fullId])
  14.         {
  15.             var service = ServiceManager.getService("Can", canMessage.getModuleName(), canMessage.getModuleId())
  16.  
  17.             if (service != null)
  18.             {
  19.                 CanServices[fullId] = service;
  20.                 CanServices[fullId].setHardwareId(canMessage.getData("HardwareId"));
  21.                 CanServices[fullId].onlineHandler();
  22.             }
  23.             else
  24.             {
  25.                 log("No such service found: " + canMessage.getModuleName() + "\n");
  26.             }
  27.         }
  28.     }
  29.     else
  30.     {
  31.         if (CanServices[fullId])
  32.         {
  33.             // Tell the service to handle the message, a module service must implement canMessageHandler or derive from CanService-class
  34.             CanServices[fullId].canMessageHandler(canMessage);
  35.         }
  36.         else if (canMessage.getModuleName() == "Debug")
  37.         {
  38.             var service = ServiceManager.getService("Can", canMessage.getModuleName(), canMessage.getModuleId())
  39.             if (service != null)
  40.             {
  41.                 CanServices[fullId] = service;
  42.                 CanServices[fullId].canMessageHandler(canMessage);
  43.             }
  44.         }
  45.     }
  46. }
  47.  
  48. // This is used to send messages to the can network
  49. function sendMessage(canMessage)
  50. {
  51.     sendCanMessage( canMessage.getClassName(),
  52.             canMessage.getDirectionFlag(),
  53.             canMessage.getModuleName(),
  54.             canMessage.getModuleId(),
  55.             canMessage.getCommandName(),
  56.             canMessage.getDataString());
  57. }
  58.  
  59. function startOfflineCheck()
  60. {
  61.     CanOfflineTimeoutId = setInterval("offlineCheck();", 10000);
  62. }
  63.  
  64. // This will be called at reqular intervals
  65. function offlineCheck()
  66. {
  67.     for (var n in CanServices)
  68.     {
  69.         CanServices[n].checkOffline();
  70.     }
  71. }
  72.  
  73. // This is called when a node sends a heartbeat
  74. function handleHeartbeat(hardwareId)
  75. {
  76.     var found = false;
  77.  
  78.     for (var n in CanServices)
  79.     {
  80.         if (CanServices[n].getHardwareId() == hardwareId)
  81.         {
  82.             found = true;
  83.            
  84.             if (CanServices[n].isOnline())
  85.             {
  86.                 CanServices[n].heartbeatHandler();
  87.             }
  88.             else
  89.             {
  90.                 CanServices[n].onlineHandler();
  91.             }
  92.         }
  93.     }
  94.    
  95.     if (!found)
  96.     {
  97.         log("Received heartbeat from unknown node, requesting module listing for hardware id " + hardwareId + "\n");
  98.         var canMessage = new CanMessage("nmt", "To_Owner", "", 0, "List");
  99.         canMessage.setData("HardwareId", hardwareId);
  100.         sendMessage(canMessage);
  101.     }
  102. }
  103.