You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
4.0 KiB
122 lines
4.0 KiB
/** |
|
* Config object for `Avarice_Feature`. |
|
* Copyright 2021 Anton Tarasenko |
|
*------------------------------------------------------------------------------ |
|
* This file is part of Acedia. |
|
* |
|
* Acedia is free software: you can redistribute it and/or modify |
|
* it under the terms of the GNU General Public License as published by |
|
* the Free Software Foundation, version 3 of the License, or |
|
* (at your option) any later version. |
|
* |
|
* Acedia is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* GNU General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU General Public License |
|
* along with Acedia. If not, see <https://www.gnu.org/licenses/>. |
|
*/ |
|
class Avarice extends FeatureConfig |
|
perobjectconfig |
|
config(AcediaAvarice); |
|
|
|
struct AvariceLinkRecord |
|
{ |
|
var string name; |
|
var string address; |
|
}; |
|
// List all the names (and addresses) of all Avarice instances Acedia must |
|
// connect to. |
|
// `name` parameter is a useful (case-insensitive) identifier that |
|
// can be used in other configs to point at each link. |
|
// `address` must have form "host:port", where "host" is either ip or |
|
// domain name and "port" is a numerical port value. |
|
var public config array<AvariceLinkRecord> link; |
|
|
|
// In case Avarice utility is launched after link started trying open |
|
// the connection - that connection attempt will fail. To fix that link must |
|
// try connecting again. |
|
// This variable sets the time (in seconds), after which link will |
|
// re-attempt opening connection. Setting value too low can prevent any |
|
// connection from opening, setting it too high might make you wait for |
|
// connection too long. |
|
var public config float reconnectTime; |
|
|
|
protected function HashTable ToData() |
|
{ |
|
local int i; |
|
local Text nextValue; |
|
local HashTable data; |
|
local HashTable linkData; |
|
local ArrayList linksArray; |
|
data = __().collections.EmptyHashTable(); |
|
data.SetFloat(P("reconnectTime"), reconnectTime, true); |
|
linksArray = __().collections.EmptyArrayList(); |
|
data.SetItem(P("link"), linksArray); |
|
for (i = 0; i < link.length; i += 1) |
|
{ |
|
linkData = __().collections.EmptyHashTable(); |
|
nextValue = __().text.FromString(link[i].name); |
|
linkData.SetItem(P("name"), nextValue); |
|
nextValue.FreeSelf(); |
|
nextValue = __().text.FromString(link[i].address); |
|
linkData.SetItem(P("address"), nextValue); |
|
nextValue.FreeSelf(); |
|
linksArray.AddItem(linkData); |
|
linkData.FreeSelf(); |
|
} |
|
linksArray.FreeSelf(); |
|
return data; |
|
} |
|
|
|
protected function FromData(HashTable source) |
|
{ |
|
local int i; |
|
local Text nextText; |
|
local ArrayList linksArray; |
|
local HashTable nextLink; |
|
local AvariceLinkRecord nextRecord; |
|
if (source == none) { |
|
return; |
|
} |
|
reconnectTime = source.GetFloat(P("reconnectTime")); |
|
link.length = 0; |
|
linksArray = source.GetArrayList(P("link")); |
|
if (linksArray == none) { |
|
return; |
|
} |
|
for (i = 0; i < linksArray.GetLength(); i += 1) |
|
{ |
|
nextLink = linksArray.GetHashTable(i); |
|
if (nextLink == none) { |
|
continue; |
|
} |
|
nextText = nextLink.GetText(P("name")); |
|
if (nextText != none) { |
|
nextRecord.name = __().text.ToString(nextText); |
|
} |
|
nextText = nextLink.GetText(P("address")); |
|
if (nextText != none) { |
|
nextRecord.address = __().text.ToString(nextText); |
|
} |
|
link[i] = nextRecord; |
|
_.memory.Free(nextLink); |
|
} |
|
_.memory.Free(linksArray); |
|
} |
|
|
|
protected function DefaultIt() |
|
{ |
|
local AvariceLinkRecord defaultRecord; |
|
reconnectTime = 10.0; |
|
link.length = 0; |
|
defaultRecord.name = "avarice"; |
|
defaultRecord.address = "127.0.0.1:1234"; |
|
link[0] = defaultRecord; |
|
} |
|
|
|
defaultproperties |
|
{ |
|
configName = "AcediaAvarice" |
|
} |