public IEnumerator<object> InitGateways()
{
DestroyEndpoints();
Endpoints.Clear();
EndpointSettings[] endpoints = null;
using (var q = Database.BuildQuery("SELECT * FROM jabber.endpoints"))
yield return q.ExecuteArray<EndpointSettings>().Bind(() => endpoints);
foreach (var settings in endpoints)
Endpoints[settings.Name] = null;
if (endpoints.Length == 0)
yield break;
using (var lw = new LoadingWindow()) {
lw.SetStatus("Connecting", null);
lw.Text = "Jabber Gateway";
lw.Show();
float? current = null;
float stepSize = (1.0f / endpoints.Length);
var sleep = new Sleep(0.25f);
foreach (var settings in endpoints) {
lw.SetStatus(String.Format("Connecting endpoint {0}", settings.Name), current);
Console.Write("Initializing endpoint '{0}'... ", settings.Name);
var f = Endpoint.Connect(
this, settings,
(s) => lw.SetProgress(current + (s * stepSize))
);
yield return f;
if (f.Error != null) {
Console.WriteLine("failed: {0}", f.Error);
Scheduler.OnTaskError(f.Error);
} else {
Console.WriteLine("initialized.");
}
current = current.GetValueOrDefault(0.0f) + stepSize;
lw.SetProgress(current);
yield return sleep;
}
lw.SetStatus("Ready", 1.0f);
lw.Close();
}
}