示例#1
0
        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);
        }
示例#2
0
        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));
        }
示例#3
0
        void SessionTerminated(CDO.Session Session)
        {
            Console.WriteLine("Session terminated!");

            if (Session.ID == ActiveSession.ID)
            {
                ActiveSession = null;
            }
        }
示例#4
0
 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);
 }
示例#5
0
 void SessionTerminated(CDO.Session Session)
 {
     LowlevelSource.RemoveAccessToken(Session.Requester, Session.ID);
 }