Ejemplo n.º 1
0
        public async void GetSourceLanguages(ComboBox comboBox)
        {
            var dictionaryClient = new DictionaryClient();                // create client
            var languageService  = new LanguageService(dictionaryClient); // create service

            try
            {
                var getLanguagesTask = await languageService.GetSourceLanguagesAsnyc(); // get source languages asyunchronously

                if (getLanguagesTask != null && getLanguagesTask.Languages != null)     // if source languages were found
                {
                    var languages = new ObservableCollection <string>();                // transfer supported language strings here

                    foreach (string language in getLanguagesTask.Languages)
                    {
                        languages.Add(language);
                    }

                    SourceLanguages = languages;                            // set SourceLanguages to those found

                    comboBox.SelectedIndex = SourceLanguages.IndexOf("en"); // set initial value of combo box to English
                }
                else
                {
                    SourceLanguages = new ObservableCollection <string>();
                }
            }
            catch (Exception exception)
            {
                Status = NO_CONNECTION;
            }
        }
Ejemplo n.º 2
0
 internal static void PushPooledClient(DictionaryClient client)
 {
     lock (lockObject)
     {
         availableClients.Add(client.Url, client);
         lockedClients.Remove(client.Url);
         errorClients.Remove(client.Url);
     }
 }
Ejemplo n.º 3
0
        public async void FindResult()  // find definition(s) and put them in the Meanings list
        {
            if (Word != "")
            {
                Status = SEARCHING;

                var dictionaryClient  = new DictionaryClient();                  // create client
                var dictionaryService = new DictionaryService(dictionaryClient); // create service

                try
                {
                    var getDefinitionTask = await dictionaryService.GetDefinitionAsync(Word, SourceLanguage); // get definitions asynchronously

                    if (getDefinitionTask != null && getDefinitionTask.Meanings != null)                      // if definitions were found
                    {
                        Meanings = new ObservableCollection <string>(getDefinitionTask.Meanings);             // update found meanings

                        if (Meanings != null && Meanings.Count > 0)
                        {
                            Status = ENTER;
                        }
                        else
                        {
                            Status = NOT_FOUND;
                        }
                    }
                    else
                    {
                        Status = NOT_FOUND;
                    }

                    if (Word == "")
                    {
                        Status = ENTER;

                        ClearMeanings();  // clear any previously stored meanings
                    }
                }
                catch (Exception exception)
                {
                    Status = NO_CONNECTION;
                }
            }
            else
            {
                Status = ENTER;
            }
        }
Ejemplo n.º 4
0
        internal static void DoTranslate(IDictDServiceItem dictServiceItem, string phrase, LanguagePair languagesPair, string subject, Result result, NetworkSetting networkSetting)
        {
            ServiceItem      si = dictServiceItem as ServiceItem;
            DictionaryClient dc = null;

            try
            {
                dc = DictDClientsPool.GetPooledClient(dictServiceItem.Urls);
                DefinitionCollection definitions = dc.GetDefinitions(phrase, si.Name);
                string translation;
                if (definitions != null && definitions.Count > 0)
                {
                    foreach (Definition df in definitions)
                    {
                        translation = "html!<div style='width:{allowed_width}px;overflow:scroll;overflow-y:hidden;overflow-x:auto;'><pre>" + df.Description.Replace("\r\n", "<br />") + "&nbsp</pre></div>";
                        result.Translations.Add(translation);
                    }
                }
                else
                {
                    result.ResultNotFound = true;
                    throw new TranslationException("Nothing found");
                }
            }
            catch (DictionaryServerException e)
            {
                if (e.ErrorCode == 552)                //No definitions found
                {
                    result.ResultNotFound = true;
                    throw new TranslationException("Nothing found");
                }
                else
                {
                    throw;
                }
            }
            finally
            {
                if (dc != null)
                {
                    DictDClientsPool.PushPooledClient(dc);
                }
            }
        }
Ejemplo n.º 5
0
        internal static DictionaryClient GetPooledClient(UrlList urls)
        {
            //list of all to detected connected, etc
            UrlClientDictionaryState states = new UrlClientDictionaryState();

            foreach (Uri url in urls)
            {
                states.Add(url, State.Unknown);
            }

            DictionaryClient result = null;

            do
            {
                lock (lockObject)
                {
                    //get all available and connected
                    List <DictionaryClient> available = new List <DictionaryClient>();
                    DictionaryClient        dictClient;
                    foreach (Uri url in urls)
                    {
                        if (availableClients.TryGetValue(url, out dictClient))
                        {
                            if ((!errorClients.ContainsKey(url) ||
                                 errorClients[url].AddSeconds(5) < DateTime.Now) &&
                                states[url] != State.Error)
                            {
                                available.Add(dictClient);
                            }
                        }
                    }

                    if (available.Count > 0)
                    {
                        if (available.Count > 1)
                        {
                            available.Sort(new DictionaryClientComparerByConnectTicks());
                        }

                        result = available[0];
                    }

                    if (result == null)
                    {
                        foreach (Uri url in urls)
                        {
                            if (states[url] != State.Error &&
                                !lockedClients.ContainsKey(url) &&
                                !availableClients.ContainsKey(url))
                            {
                                result             = new DictionaryClient();
                                result.Url         = url;
                                result.AutoConnect = false;
                                result.ClientName  = "http://translate-net.appspot.com/";
                                break;
                            }
                        }
                    }

                    if (result != null)
                    {
                        lockedClients.Add(result.Url, result);
                        availableClients.Remove(result.Url);
                        states[result.Url] = State.Busy;
                    }
                }                 //end lock

                if (result == null)
                {
                    int cnt = 0;
                    foreach (State state in states.Values)
                    {
                        if (state == State.Error)
                        {
                            cnt++;
                        }
                        else
                        {
                            break;
                        }
                    }
                    if (cnt < states.Count)
                    {
                        System.Threading.Thread.Sleep(200);
                    }
                    else
                    {
                        string errorMessage = "Can't connect to any dictd server : ";
                        foreach (Uri url in urls)
                        {
                            errorMessage += url + ", ";
                        }
                        errorMessage = errorMessage.Substring(0, errorMessage.Length - 2);
                        throw new TranslationException(errorMessage);
                    }
                }
                else
                {                 //try to connect
                    try
                    {
                        if (!result.Connected)
                        {
                            result.Connected = true;
                        }
                    }
                    catch
                    {
                        states[result.Url] = State.Error;
                        lock (lockObject)
                        {
                            errorClients[result.Url] = DateTime.Now;
                            availableClients.Add(result.Url, result);
                            lockedClients.Remove(result.Url);
                        }
                        result = null;
                    }
                }
            }while(result == null);

            return(result);
        }