public static bool TryIdentify(this IList <IUserAgentServicePlugin> plugins, string homeURI, out UserAgentServiceInterface userAgentService)
        {
            userAgentService = null;

            string[] handlerType;
            try
            {
                handlerType = ServicePluginHelo.HeloRequest_HandleType(homeURI);
            }
            catch
            {
                return(false);
            }

            foreach (var service in plugins)
            {
                if (handlerType.Contains(service.Name))
                {
                    userAgentService = service.Instantiate(homeURI);
                    break;
                }
            }

            return(userAgentService != null);
        }
        public bool TryGetFriendsService(UGUI agent, out FriendsServiceInterface friendsService)
        {
            friendsService = null;
            if (agent.HomeURI == null)
            {
                return(false);
            }

            string[] handlerType;
            var      homeURI = agent.HomeURI.ToString();

            try
            {
                handlerType = ServicePluginHelo.HeloRequest_HandleType(homeURI);
            }
            catch
            {
                return(false);
            }

            UserAgentServiceInterface userAgentService = null;

            foreach (var service in m_UserAgentPlugins)
            {
                if (handlerType.Contains(service.Name))
                {
                    userAgentService = service.Instantiate(homeURI);
                    break;
                }
            }

            if (userAgentService == null)
            {
                return(false);
            }

            string friendsUri;
            Dictionary <string, string> serviceurls;

            try
            {
                serviceurls = userAgentService.GetServerURLs(agent);
            }
            catch
            {
                return(false);
            }

            if (!serviceurls.TryGetValue("FriendsServerURI", out friendsUri))
            {
                return(false);
            }

            try
            {
                handlerType = ServicePluginHelo.HeloRequest_HandleType(friendsUri);
            }
            catch
            {
                return(false);
            }

            foreach (var service in m_FriendsPlugins)
            {
                if (handlerType.Contains(service.Name))
                {
                    friendsService = service.Instantiate(friendsUri);
                    return(true);
                }
            }

            return(false);
        }