Exemple #1
0
        void Uplink_OnStanzaMessage(StanzaMessage Data)
        {
            try
            {
                if (Data.From.GetBareJID() != Orchestrator.GetBareJID())
                {
                    return;
                }

                XElement ActEl = Data.Payload.Element(CDO.Namespace + "actionrequest");
                if (ActEl == null)
                {
                    return;
                }

                ActionRequest Req = new ActionRequest(ActEl);

                switch (Req.Name)
                {
                case "sessionstarted":
                    HandleSessionStarted(Req);
                    break;

                case "sessionterminated":
                    HandleSessionTerminated(Req);
                    break;
                }
            }
            catch (System.Exception ex)
            {
                Console.WriteLine("Uncatched exception in on stanzamessage: " + ex.ToString());
            }
        }
Exemple #2
0
        void Uplink_OnStanzaIQ(StanzaIQ Data)
        {
            if (Data.From.GetBareJID() != DataSourceAddress.GetBareJID())
            {
                return;
            }

            Console.WriteLine("Controller received iq stanza");

            if (!IQRequests.ContainsKey(Data.ID))
            {
                return;
            }
            TaskCompletionSource <StanzaIQ> Signal;

            if (!IQRequests.TryRemove(Data.ID, out Signal))
            {
                return;
            }

            Signal.SetResult(Data);
        }
Exemple #3
0
        // Returns address to source or null
        public async Task <JID> StartSession(string SessionID, int TimeoutSeconds = 60)
        {
            DateTime StartedAt = DateTime.UtcNow;

            XElement Payload = new XElement(CDO.Namespace + "entitystartsession");

            CDO.SetString(Payload, "sessionid", SessionID);

            var Resp = await Requester.Request("startsession", Payload, TimeoutSeconds);

            if (!Resp.Successful)
            {
                return(null);
            }

            JID BareJID = CDO.GetAddress(Resp.Payload, "targetaddress");

            if (Uplink.Roster.AggregatedPresence.ContainsKey(BareJID.GetBareJID()))
            {
                return(Uplink.Roster.AggregatedPresence[BareJID.GetBareJID()].Last().FullJID);
            }


            Uplink.Roster.Subscribe(BareJID);

            while (!Uplink.Roster.AggregatedPresence.ContainsKey(BareJID.GetBareJID()))
            {
                await Task.Delay(25);

                if ((DateTime.UtcNow - StartedAt).TotalSeconds > TimeoutSeconds)
                {
                    throw new System.TimeoutException();
                }
            }

            return(Uplink.Roster.AggregatedPresence[BareJID.GetBareJID()].Last().FullJID);
        }
Exemple #4
0
        public void RemoveAccessToken(JID Actor, AccessToken Token)
        {
            AccessTokenSession Temp;

            AccessTokens.TryRemove(Actor.GetBareJID() + Token, out Temp);
        }
Exemple #5
0
 public void SetAccessTokenSession(JID Actor, AccessTokenSession Session)
 {
     AccessTokens[Actor.GetBareJID() + Session.Token] = Session;
 }