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; } }
internal static void PushPooledClient(DictionaryClient client) { lock (lockObject) { availableClients.Add(client.Url, client); lockedClients.Remove(client.Url); errorClients.Remove(client.Url); } }
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; } }
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 />") + " </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); } } }
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); }