using System; using System.Linq; using System.Runtime.ExceptionServices; using System.Security; using System.Threading.Tasks; using Bsw.Isonas.Dotnet.Client.Core; using Bsw.Isonas.Dotnet.Client.Entities; using Bsw.Isonas.Dotnet.Client.Entities.Shifts; using Bsw.Isonas.Dotnet.Client.Utility; using Newtonsoft.Json; using Nito.AsyncEx; using NodaTime; namespace IsonasDemo { internal class Program { static void Main(string[] args) { AsyncContext.Run(() => DoStuff()); } static async Task DoStuff() { var client = IsonasAccessControlClient.Create(hostname: "weezwinsvr"); IIsonasConnection connection; using (var key = new SecureString()) { "2D381400325FCF24A0D9AC16094E47622D381400325FCF24A0D9AC16094E4762".ToList().ForEach(key.AppendChar); connection = await client.OpenEncrypted(key: key); // controller.Open() returns an unencrypted connection } IISonasSession session; using (var password = new SecureString()) { "sapient".ToList().ForEach(password.AppendChar); session = await connection.Logon(username: "admin", password: password); } await session.UsingAsync(async s => { await WorkWithSession(s); }); } static async Task WorkWithSession(IISonasSession session) { var id = new IdFile(lastName: "Doe", firstName: "John", personIdString: "auto_200", area: "COMMON", ssn: "123456789"); await session.AddIdFile(id); Exception uncaught = null; var shift = new Shift(shiftName: "the shift", days: new[] { new ShiftDay(dayOfWeek: IsoDayOfWeek.Wednesday, start: new LocalTime(hour: 17, minute: 0), end: new LocalTime(hour: 17, minute: 30)) }); try { var allIds = await session.QueryAllIdFiles(); Console.WriteLine("IDs are {0}", JsonConvert.SerializeObject(allIds)); var retrievedId = await session.QueryIdFile(id.PersonIdString); Console.WriteLine("Retrieved ID file {0}", JsonConvert.SerializeObject(retrievedId)); await session.AddShift(shift); var retrievedShift = await session.QueryShift(shiftName: shift.ShiftName); Console.WriteLine("Retrieved shift {0}", JsonConvert.SerializeObject(retrievedShift)); Console.WriteLine("\nPress Enter to continue..."); Console.ReadLine(); } catch (Exception e) { uncaught = e; } await session.DeleteIdFile(id.PersonIdString); await session.DeleteShift(shift); // C# 6 will support awaits inside a catch block if (uncaught != null) { ExceptionDispatchInfo.Capture(uncaught).Throw(); } } } }