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();
}
}
private IEnumerator <object> SaveEndpoint(EndpointSettings settings) { using (new ControlDisabler(this)) { var columnNames = Mapper <EndpointSettings> .ColumnNames; var questionMarks = new string[columnNames.Length]; for (int i = 0; i < questionMarks.Length; i++) { questionMarks[i] = "?"; } using (var q = Program.Database.BuildQuery(String.Format( "REPLACE INTO jabber.endpoints ({0}) VALUES ({1})", String.Join(", ", columnNames), String.Join(", ", questionMarks) ))) yield return(q.ExecuteNonQuery(Mapper <EndpointSettings> .GetColumnValues(settings))); yield return(LoadConfiguration()); yield return(Script.InitGateways()); } }