public async Task <bool> RequestNewSession(TimeSpan SessionLength, int TimeOutSeconds = 60) { Console.WriteLine("Await request session"); CDO.Session NewSession = await SessionController.RequestSession( TargetEntityID, RequestedResources.Values.ToList(), SessionLength, TimeOutSeconds); Console.WriteLine("Done"); if (NewSession == null) { throw new AccessViolationException("New session was actively denied"); } JID TargetJID = await SessionController.StartSession(NewSession.ID); if (TargetJID == null) { throw new InvalidProgramException("Session failed to start"); } if (LowlevelDataController != null) { LowlevelDataController.Dispose(); LowlevelDataController = null; } LowlevelDataController = new LWTSD.DataController(Uplink, TargetJID); ActiveSession = NewSession; return(true); }
public async Task <LWTSD.DataController.DataPage> ReadData(int Page = 0) { if (RequestedResources.Count() == 0) { throw new InvalidOperationException("No requested resources"); } if (KnownSchema != null) { foreach (var rkey in RequestedResources.Keys) { if (!KnownSchema.Resources.ContainsKey(rkey)) { KnownSchema = null; ActiveSession = null; break; } } } if (ActiveSession == null || ActiveSession.SessionEndsAtUTC < DateTime.UtcNow.AddSeconds(15)) { await RequestNewSession(new TimeSpan(1, 0, 0)); } return(await LowlevelDataController.ReadData(KnownSchema, RequestedResources.Keys.ToList(), ActiveSession.ID)); }
void SessionTerminated(CDO.Session Session) { Console.WriteLine("Session terminated!"); if (Session.ID == ActiveSession.ID) { ActiveSession = null; } }
void SessionStarted(CDO.Session Session) { LWTSD.AccessTokenSession LowlevelSession = new LWTSD.AccessTokenSession(); LowlevelSession.Actor = Session.Requester; LowlevelSession.ExpiresAtUTC = Session.SessionEndsAtUTC; LowlevelSession.Token = Session.ID; LowlevelSession.Rights = new List <LWTSD.ResourceAccess>(); foreach (var Res in Session.Resources) { LWTSD.ResourceAccess ResourceRights = new LWTSD.ResourceAccess(); ResourceRights.SupportsRead = Res.Verbs.Contains(CDO.DataVerb.GET); ResourceRights.SupportsWrite = Res.Verbs.Contains(CDO.DataVerb.SET); ResourceRights.Path = Res.ResourcePath; ResourceRights.Subordinates = Res.Subordinates; LowlevelSession.Rights.Add(ResourceRights); } LowlevelSource.SetAccessTokenSession(Session.Requester, LowlevelSession); }
void SessionTerminated(CDO.Session Session) { LowlevelSource.RemoveAccessToken(Session.Requester, Session.ID); }