public GridRow(ConnectorInfo info, IMessageAdapter adapter /*, IMessageAdapter innerAdapter*/) { if (info == null) { throw new ArgumentNullException(nameof(info)); } if (adapter == null) { throw new ArgumentNullException(nameof(adapter)); } //if (innerAdapter == null) // throw new ArgumentNullException("innerAdapter"); Info = info; Adapter = adapter; //InnerAdapter = innerAdapter; SupportedMessages = adapter.GetType().CreateInstance <IMessageAdapter>(adapter.TransactionIdGenerator).SupportedMessages.Select(m => new SupportedMessage(adapter, m)).ToArray(); SupportedMessages.ForEach(m => m.SelectedChanged += () => { NotifyChanged("IsTransactionEnabled"); NotifyChanged("IsMarketDataEnabled"); }); Icon = adapter.GetType().GetIconUrl(); }
private void ProcessDisconnectMessage(IMessageAdapter innerAdapter, DisconnectMessage message) { if (message.Error != null) { this.AddErrorLog(LocalizedStrings.Str627Params, innerAdapter.GetType().Name, message.Error); } SendOutMessage(message); }
internal static Type GetOrderConditionType(this IMessageAdapter adapter) { if (adapter == null) { throw new ArgumentNullException(nameof(adapter)); } return(adapter .GetType() .GetAttribute <OrderConditionAttribute>()? .ConditionType); }
private ConnectorInfo GetInfo(IMessageAdapter adapter) { if (adapter == null) { throw new ArgumentNullException("adapter"); } var info = ConnectorsInfo.FirstOrDefault(i => i.TransactionAdapterType.IsInstanceOfType(adapter) || i.MarketDataAdapterType.IsInstanceOfType(adapter)); if (info == null) { throw new ArgumentException(LocalizedStrings.Str1553Params.Put(adapter.GetType()), "adapter"); } return(info); }
private void ProcessConnectMessage(IMessageAdapter innerAdapter, ConnectMessage message) { if (message.Error != null) { this.AddErrorLog(LocalizedStrings.Str625Params, innerAdapter.GetType().Name, message.Error); } var adapter = _hearbeatAdapters[innerAdapter]; foreach (var supportedMessage in adapter.SupportedMessages) { _connectedAdapters.SafeAdd(supportedMessage).Add(adapter); } SendOutMessage(message); }
private void ProcessInnerAdapterConnectMessage(IMessageAdapter innerAdapter, ConnectMessage message) { if (message.Error != null) { SessionHolder.AddErrorLog(LocalizedStrings.Str625Params, innerAdapter.GetType().Name, message.Error); } Exception error = null; var canProcess = _innerAdapters.SyncGet(c => { var connected = message.Error == null; _adapterStates[innerAdapter] = new RefPair <bool, Exception>(connected, message.Error); if (_canRaiseConnected && connected) { _canRaiseConnected = false; _canRaiseDisconnected = true; ResetConnectionErrors(); return(true); } if (_adapterStates.Count == c.Count) { // произошла ошибка и нет ни одного подключенного коннектора if (_adapterStates.Values.All(p => !p.First)) { error = new AggregateException(LocalizedStrings.Str626, _adapterStates.Values.Select(p => p.Second)); return(true); } ResetConnectionErrors(); } return(false); }); if (canProcess) { SendOutMessage(new ConnectMessage { Error = error }); } }
private void ProcessInnerAdapterDisconnectMessage(IMessageAdapter innerAdapter, DisconnectMessage message) { if (message.Error != null) { SessionHolder.AddErrorLog(LocalizedStrings.Str627Params, innerAdapter.GetType().Name, message.Error); } Exception error = null; var canProcess = _innerAdapters.SyncGet(c => { _adapterStates[innerAdapter] = new RefPair <bool, Exception>(false, message.Error); if (_canRaiseDisconnected && _adapterStates.Values.All(p => !p.First)) { _canRaiseConnected = true; _canRaiseDisconnected = false; var errors = _adapterStates.Values.Where(p => p.Second != null).Select(p => p.Second).ToArray(); if (errors.Length != 0) { error = new AggregateException(LocalizedStrings.Str628, errors); ResetConnectionErrors(); } DisposeInnerAdapters(); return(true); } return(false); }); if (canProcess) { SendOutMessage(new DisconnectMessage { Error = error }); } }