示例#1
0
        /// <summary>
        /// Destroys relay connection and all references to it.
        /// </summary>
        /// <param name="Relay">Relay connection to destroy.</param>
        public async Task DestroyNetworkRelay(RelayConnection Relay)
        {
            log.Trace("(Relay.id:'{0}')", Relay.GetId());

            bool destroyed = await Relay.TestAndSetDestroyed();

            if (!destroyed)
            {
                bool relayIdRemoved     = false;
                bool callerTokenRemoved = false;
                bool calleeTokenRemoved = false;
                lock (lockObject)
                {
                    relayIdRemoved     = relaysByGuid.Remove(Relay.GetId());
                    callerTokenRemoved = relaysByGuid.Remove(Relay.GetCallerToken());
                    calleeTokenRemoved = relaysByGuid.Remove(Relay.GetCalleeToken());
                }

                if (!relayIdRemoved)
                {
                    log.Error("Relay ID '{0}' not found in relay list.", Relay.GetId());
                }
                if (!callerTokenRemoved)
                {
                    log.Error("Caller token '{0}' not found in relay list.", Relay.GetCallerToken());
                }
                if (!calleeTokenRemoved)
                {
                    log.Error("Callee token '{0}' not found in relay list.", Relay.GetCalleeToken());
                }

                Relay.Dispose();
            }
            else
            {
                log.Trace("Relay ID '{0}' has been destroyed already.", Relay.GetId());
            }

            log.Trace("(-)");
        }
示例#2
0
        /// <summary>
        /// Creates a new network relay between a caller identity and one of the profile server's customer identities that is online.
        /// </summary>
        /// <param name="Caller">Initiator of the call.</param>
        /// <param name="Callee">Profile server's customer client to be called.</param>
        /// <param name="ServiceName">Name of the application service to use.</param>
        /// <param name="RequestMessage">CallIdentityApplicationServiceRequest message that the caller send in order to initiate the call.</param>
        /// <returns>New relay connection object if the function succeeds, or null otherwise.</returns>
        public RelayConnection CreateNetworkRelay(IncomingClient Caller, IncomingClient Callee, string ServiceName, PsProtocolMessage RequestMessage)
        {
            log.Trace("(Caller.Id:{0},Callee.Id:{1},ServiceName:'{2}')", Caller.Id.ToHex(), Callee.Id.ToHex(), ServiceName);

            RelayConnection res = null;

            RelayConnection relay = new RelayConnection(Caller, Callee, ServiceName, RequestMessage);

            lock (lockObject)
            {
                relaysByGuid.Add(relay.GetId(), relay);
                relaysByGuid.Add(relay.GetCallerToken(), relay);
                relaysByGuid.Add(relay.GetCalleeToken(), relay);
            }

            log.Debug("Relay ID '{0}' added to the relay list.", relay.GetId());
            log.Debug("Caller token '{0}' added to the relay list.", relay.GetCallerToken());
            log.Debug("Callee token '{0}' added to the relay list.", relay.GetCalleeToken());

            res = relay;

            log.Trace("(-):{0}", res);
            return(res);
        }