Subversion Repositories HomeAutomation

Rev

Rev 1614 | Rev 1624 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | SVN | RSS feed

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