Subversion Repositories HomeAutomation

Rev

Rev 2083 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

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