/// <summary> /// /// </summary> ConversionEntry CreateEntry(string symbol1, string symbol2, double?value) { ConversionEntry entry = new ConversionEntry(symbol1, symbol2); if (value.HasValue) { entry.Update(value.Value); } lock (this) { if (_entries.ContainsKey(symbol1) == false) { _entries.Add(symbol1, new Dictionary <string, ConversionEntry>()); } if (_entries[symbol1].ContainsKey(symbol2)) { SystemMonitor.Warning("Entry already exists."); return(_entries[symbol1][symbol2]); } _entries[symbol1].Add(symbol2, entry); } return(entry); }
/// <summary> /// /// </summary> void _currencyService_ConversionRateCompleted(object sender, ConversionRateCompletedEventArgs e) { Currency[] state = (Currency[])e.UserState; double value = e.Result; if (value == 0) { SystemMonitor.Warning("Value 0 not accepted from service."); return; } ConversionEntry entry = null; lock (this) { if (_entries.ContainsKey(state[0].ToString()) && _entries[state[0].ToString()].ContainsKey(state[1].ToString())) { entry = _entries[state[0].ToString()][state[1].ToString()]; entry.Update(value); } } if (EntryUpdateEvent != null && entry != null) { EntryUpdateEvent(this, entry); } }
public static T ConvertNMSType <T, S>(S value) { ConversionKey key = ConversionKey.GetKey(typeof(T), value.GetType()); ConversionEntry <T, S> converter = (ConversionEntry <T, S>)NMSTypeConversionTable[key]; if (converter == null) { throw new NMSTypeConversionException("Cannot convert between type : " + (typeof(T)).Name + ", and type: " + value.GetType().Name); } return(converter.ConvertInstance(value)); }
/// <summary> /// /// </summary> public void UpdateValue(string symbol1, string symbol2, double value) { if (string.IsNullOrEmpty(symbol1) || string.IsNullOrEmpty(symbol2)) { SystemMonitor.Warning("Invalid symbol name."); return; } if (value == 0) { SystemMonitor.Warning("Value 0 not accepted."); return; } symbol1 = symbol1.ToUpper(); symbol2 = symbol2.ToUpper(); if (symbol1 == symbol2) { return; } ConversionEntry entry = null; double updateValue = value; lock (this) { if (_entries.ContainsKey(symbol1) && _entries[symbol1].ContainsKey(symbol2)) {// Straight. entry = _entries[symbol1][symbol2]; updateValue = value; } else if (_entries.ContainsKey(symbol2) && _entries[symbol2].ContainsKey(symbol1)) {// Reverse. entry = _entries[symbol2][symbol1]; updateValue = 1 / value; } } if (entry != null) { entry.Update(updateValue); } else { entry = CreateEntry(symbol1, symbol2, value); } if (EntryUpdateEvent != null) { EntryUpdateEvent(this, entry); } }
/// <summary> /// /// </summary> void BeginServiceEntryUpdate(ConversionEntry entry) { Currency currency1, currency2; lock (this) { if (_serviceCurrencies.ContainsKey(entry.Symbol1) == false || _serviceCurrencies.ContainsKey(entry.Symbol2) == false) { SystemMonitor.Warning("Symbol not supported."); return; } entry.UpdateEvent.Reset(); currency1 = _serviceCurrencies[entry.Symbol1]; currency2 = _serviceCurrencies[entry.Symbol2]; // Begin operation. _currencyService.ConversionRateAsync(currency1, currency2, new Currency[] { currency1, currency2 }); } }
/// <summary> /// /// </summary> ConversionEntry CreateEntry(string symbol1, string symbol2, double? value) { ConversionEntry entry = new ConversionEntry(symbol1, symbol2); if (value.HasValue) { entry.Update(value.Value); } lock (this) { if (_entries.ContainsKey(symbol1) == false) { _entries.Add(symbol1, new Dictionary<string,ConversionEntry>()); } if (_entries[symbol1].ContainsKey(symbol2)) { SystemMonitor.Warning("Entry already exists."); return _entries[symbol1][symbol2]; } _entries[symbol1].Add(symbol2, entry); } return entry; }
/// <summary> /// /// </summary> void BeginServiceEntryUpdate(ConversionEntry entry) { Currency currency1, currency2; lock(this) { if (_serviceCurrencies.ContainsKey(entry.Symbol1) == false || _serviceCurrencies.ContainsKey(entry.Symbol2) == false) { SystemMonitor.Warning("Symbol not supported."); return; } entry.UpdateEvent.Reset(); currency1 = _serviceCurrencies[entry.Symbol1]; currency2 = _serviceCurrencies[entry.Symbol2]; // Begin operation. _currencyService.ConversionRateAsync(currency1, currency2, new Currency[] { currency1, currency2 }); } }