Subversion Repositories HomeAutomation

Rev

Rev 2083 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1.  
  2. Console_Functions = {};
  3. Console_CurrentFunction = null;
  4. Console_DefaultPrompt = "\033[29;1m[atomic] \033[0m";
  5. Console_LastClientId = null;
  6.  
  7. function Console_GetFunctionNames()
  8. {
  9.     return get_keys(Console_Functions);
  10. }
  11.  
  12. // C++ callable functions
  13.  
  14. function Console_AutocompleteRequest(client_id, arg_index, commandline)
  15. {
  16.     Console_LastClientId = client_id;
  17.  
  18.     var result = [];
  19.     var parts = [];
  20.     var name = "Console_Shell";
  21.  
  22.     if (commandline.length > 0 && arg_index != 0)
  23.     {
  24.         parts = commandline.split(" ");
  25.         name = parts.shift();
  26.         arg_index--;
  27.     }
  28.  
  29.     if (Console_Functions[name] && Console_Functions[name]["autocomplete"])
  30.     {
  31.         //Log("calling autocomplete_callback: " + name + "\n");
  32.         result = Console_Functions[name]["autocomplete"](arg_index, parts);
  33.     }
  34.  
  35.     var result_string = result.join("\n");
  36.  
  37.     ConsoleExport_AutoCompleteResponse(Console_LastClientId, result_string);
  38.     return true;
  39. }
  40.  
  41. function Console_PromptResponse(client_id, response)
  42. {
  43.     Console_LastClientId = client_id;
  44.  
  45.     var parts = array_remove_empty(response.split(" "));
  46.  
  47.   var result = true;
  48.  
  49.   if (Console_CurrentFunction)
  50.   {
  51.     var current_function = Console_CurrentFunction;
  52.     Console_CurrentFunction = Console_Shell;
  53.  
  54.     result = current_function.apply(null, Array.prototype.slice.call(parts, 0));
  55.  
  56.     if (Console_CurrentFunction == Console_Shell)
  57.     {
  58.       Console_SetDefaultPrompt();
  59.     }
  60.   }
  61.  
  62.     return result;
  63. }
  64.  
  65. function Console_NewConnection(client_id)
  66. {
  67.     Console_LastClientId = client_id;
  68.  
  69.     return Console_SetDefaultPrompt();
  70. }
  71.  
  72. // User script functions
  73.  
  74. function Console_GetClientId()
  75. {
  76.     return Console_LastClientId;
  77. }
  78.  
  79. function Console_LogToClient(client_id, text)
  80. {
  81.     if (client_id)
  82.     {
  83.         return ConsoleExport_LogToClient(client_id, text);
  84.     }
  85.  
  86.     return false;
  87. }
  88.  
  89. function Console_PreventDefaultPrompt()
  90. {
  91.     Console_CurrentFunction = null;
  92. }
  93.  
  94. function Console_SetDefaultPrompt()
  95. {
  96.     return Console_PromptRequest(Console_DefaultPrompt, Console_Shell);
  97. }
  98.  
  99. function Console_PromptRequest(prompt, callback)
  100. {
  101.     Console_CurrentFunction = callback;
  102.     return ConsoleExport_PromptRequest(Console_LastClientId, prompt);
  103. }
  104.  
  105. function Console_RegisterCommand(command, autocomplete_callback)
  106. {
  107.     var command_string = command.toString();
  108.  
  109.     var pos_end = command_string.indexOf("\n") - 1;
  110.     var pos_start = command_string.indexOf(" ") + 1;
  111.  
  112.     var full_name = command_string.substr(pos_start, pos_end - pos_start);
  113.  
  114.     var pos_split = full_name.indexOf("(");
  115.  
  116.     var name = full_name.substr(0, pos_split);
  117.  
  118.     var argument_string = full_name.substr(pos_split + 1);
  119.  
  120.     if (argument_string.length > 0)
  121.     {
  122.         argument_string = argument_string.replace(/,/g, "");
  123.         argument_string = "<" + argument_string.replace(/ /g, "> <") + ">";
  124.     }
  125.  
  126.     Console_Functions[name] = { "command" : command, "autocomplete" : autocomplete_callback, "help" : argument_string };
  127.     return true;
  128. }
  129.  
  130. function Console_StandardAutocomplete()
  131. {
  132.     var arg_index = arguments[0];
  133.     var args = arguments[1];
  134.  
  135.     if (0 <= arg_index && arg_index < arguments.length - 2)
  136.     {
  137.         return arguments[arg_index + 2];
  138.     }
  139.  
  140.     return [];
  141. }
  142.  
  143. // Default call function
  144.  
  145. function Console_Shell()
  146. {
  147.     var args = to_array(arguments);
  148.     var name = args.shift();
  149.  
  150.     if (Console_Functions[name] && Console_Functions[name]["command"])
  151.     {
  152.         return Console_Functions[name]["command"].apply(null, Array.prototype.slice.call(args, 0));
  153.     }
  154.     else
  155.     {
  156.         Log("\033[31mNo such command found, " + name + ".\033[0m\n");
  157.     }
  158.  
  159.     return false;
  160. }
  161. Console_RegisterCommand(Console_Shell, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Console_GetFunctionNames()); });
  162.  
  163. // Help functions
  164.  
  165. function help_complete(arg_index, args)
  166. {
  167.     var result = [];
  168.  
  169.     if (arg_index == 1) // command name
  170.     {
  171.         for (var name in Console_Functions)
  172.         {
  173.             result.push(name);
  174.         }
  175.     }
  176.  
  177.     return result;
  178. }
  179.  
  180. function help(command_name)
  181. {
  182.     if (!command_name)
  183.     {
  184.         command_name = "help";
  185.     }
  186.  
  187.     if (Console_Functions[command_name] && Console_Functions[command_name]["help"])
  188.     {
  189.         var result = "";
  190.  
  191.         if (Console_Functions[command_name] && Console_Functions[command_name]["autocomplete"])
  192.         {
  193.             result += "Argument autocompletion enabled for " + command_name + "\n";
  194.         }
  195.  
  196.         result += "Syntax: " + command_name + " " + Console_Functions[command_name]["help"] + "\n";
  197.  
  198.         Log(result);
  199.         return true;
  200.     }
  201.  
  202.     Log("\033[31mNo help for " + command_name + " found.\033[0m\n");
  203.     return false;
  204. }
  205. Console_RegisterCommand(help, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Console_GetFunctionNames()); });
  206.  
  207. function version()
  208. {
  209.     Log(SystemExport_Version() + "\n");
  210.     return true;
  211. }
  212. Console_RegisterCommand(version);
  213.  
  214. function license()
  215. {
  216.     Log(SystemExport_License() + "\n");
  217.     return true;
  218. }
  219. Console_RegisterCommand(license);
  220.  
  221. function quit()
  222. {
  223.     Log("Goodbye!\n");
  224.  
  225.     ConsoleExport_DisconnectClient(Console_LastClientId);
  226.     Console_LastClientId = null;
  227.     return false;
  228. }
  229. Console_RegisterCommand(quit);
  230.  
  231. function timestampRaw()
  232. {
  233.   var result = { timestamp: (new Date()).getTime() };
  234.  
  235.   Log(JSON.stringify(result));
  236.   return true;
  237. }
  238. Console_RegisterCommand(timestampRaw);
  239.