public RCallbacksImpl(RithmicClient client, ILogReceiver receiver)
			{
				if (client == null)
					throw new ArgumentNullException(nameof(client));

				if (receiver == null)
					throw new ArgumentNullException(nameof(receiver));

				_client = client;
				_receiver = receiver;
			}
            public RCallbacksImpl(RithmicClient client, ILogReceiver receiver)
            {
                if (client == null)
                {
                    throw new ArgumentNullException(nameof(client));
                }

                if (receiver == null)
                {
                    throw new ArgumentNullException(nameof(receiver));
                }

                _client   = client;
                _receiver = receiver;
            }
		/// <summary>
		/// Send message.
		/// </summary>
		/// <param name="message">Message.</param>
		protected override void OnSendInMessage(Message message)
		{
			switch (message.Type)
			{
				case MessageTypes.Reset:
				{
					_accounts.Clear();
					_quotes.Clear();

					if (_client != null)
					{
						try
						{
							_client.Session.logout();
						}
						catch (Exception ex)
						{
							SendOutError(ex);
						}

						_client = null;
					}

					SendOutMessage(new ResetMessage());

					break;
				}

				case MessageTypes.Connect:
				{
					if (_client != null)
						throw new InvalidOperationException(LocalizedStrings.Str1619);

					Connect();
					
					break;
				}

				case MessageTypes.Disconnect:
				{
					if (_client == null)
						throw new InvalidOperationException(LocalizedStrings.Str1856);

					_client.Session.logout();

					break;
				}

				case MessageTypes.OrderRegister:
					ProcessRegisterMessage((OrderRegisterMessage)message);
					break;

				case MessageTypes.OrderReplace:
					ProcessReplaceMessage((OrderReplaceMessage)message);
					break;

				case MessageTypes.OrderCancel:
					ProcessCancelMessage((OrderCancelMessage)message);
					break;

				case MessageTypes.OrderGroupCancel:
					ProcessGroupCancelMessage((OrderGroupCancelMessage)message);
					break;

				case MessageTypes.OrderStatus:
					ProcessOrderStatusMessage();
					break;

				case MessageTypes.SecurityLookup:
					ProcessSecurityLookupMessage((SecurityLookupMessage)message);
					break;

				case MessageTypes.PortfolioLookup:
					_client.Session.getAccounts();
					break;

				case MessageTypes.Portfolio:
					ProcessPortfolioMessage((PortfolioMessage)message);
					break;

				case MessageTypes.MarketData:
					ProcessMarketDataMessage((MarketDataMessage)message);
					break;

				case MessageTypes.ChangePassword:
					var newPassword = ((ChangePasswordMessage)message).NewPassword;
					_client.Session.changePassword(Password.To<string>(), newPassword.To<string>());
					break;
			}
		}
		private void SessionHolderOnAlert(AlertInfo info)
		{
			try
			{
				if (!_connStates.ContainsKey(info.ConnectionId))
				{
					this.AddErrorLog("Received alert for unexpected connection id ({0}):\n{1}",
						info.ConnectionId, info.DumpableToString());

					return;
				}

				this.AddInfoLog("{0}: {1} - '{2}'", info.AlertType, info.ConnectionId, info.Message);

				switch (info.AlertType)
				{
					case AlertType.ConnectionOpened:
					case AlertType.TradingEnabled:
						break;

					case AlertType.LoginComplete:
					{
						var dict = _connStates;

						bool canProcess;

						lock (dict.SyncRoot)
						{
							dict[info.ConnectionId] = true;
							canProcess = dict.Values.All(connected => connected == null || connected == true);
						}

						if (canProcess)
							SendOutMessage(new ConnectMessage());

						break;
					}

					case AlertType.ConnectionClosed:
					{
						var dict = _connStates;

						bool canProcess;

						lock (dict.SyncRoot)
						{
							dict[info.ConnectionId] = false;
							canProcess = dict.Values.All(connected => connected == null || connected == false);
						}

						if (canProcess)
						{
							SendOutMessage(new DisconnectMessage());
							_client.Session.shutdown();
						}

						break;
					}

					case AlertType.LoginFailed:
					case AlertType.ServiceError:
					case AlertType.ForcedLogout:
					{
						this.AddErrorLog(info.AlertType.ToString());

						var dict = _connStates;

						bool canProcess;

						lock (dict.SyncRoot)
						{
							dict[info.ConnectionId] = false;
							canProcess = dict.Values.All(connected => connected == null || connected == false);
						}

						if (canProcess)
							SendOutMessage(new ConnectMessage { Error = new InvalidOperationException(LocalizedStrings.Str3458Params.Put(info.Message)) });

						break;
					}

					case AlertType.ShutdownSignal:
					{
						_client.OrderInfo -= SessionHolderOnOrderInfo;
						_client.OrderBust -= SessionHolderOnOrderBust;
						_client.OrderCancel -= SessionHolderOnOrderCancel;
						_client.OrderCancelFailure -= SessionHolderOnOrderCancelFailure;
						_client.OrderFailure -= SessionHolderOnOrderFailure;
						_client.OrderFill -= SessionHolderOnOrderFill;
						_client.OrderLineUpdate -= SessionHolderOnOrderLineUpdate;
						_client.OrderModify -= SessionHolderOnOrderModify;
						_client.OrderModifyFailure -= SessionHolderOnOrderModifyFailure;
						_client.OrderReject -= SessionHolderOnOrderReject;
						_client.OrderReport -= SessionHolderOnOrderReport;
						_client.OrderStatus -= SessionHolderOnOrderStatus;
						_client.OrderReplay -= SessionHolderOnOrderReplay;

						_client.Execution -= SessionHolderOnExecution;

						_client.AccountPnL -= SessionHolderOnAccountPnL;
						_client.AccountPnLUpdate -= SessionHolderOnAccountPnLUpdate;
						_client.AccountRms -= SessionHolderOnAccountRms;
						_client.Accounts -= SessionHolderOnAccounts;
						_client.AccountSodUpdate -= SessionHolderOnAccountSodUpdate;

						_client.TransactionError -= SendOutError;

						_client.SecurityBinaryContracts -= SessionHolderOnSecurityBinaryContracts;
						_client.SecurityInstrumentByUnderlying -= SessionHolderOnSecurityInstrumentByUnderlying;
						_client.SecurityOptions -= SessionHolderOnSecurityOptions;
						_client.SecurityRefData -= SessionHolderOnSecurityRefData;

						_client.Exchanges -= SessionHolderOnExchanges;

						_client.BidQuote -= SessionHolderOnBidQuote;
						_client.BestBidQuote -= SessionHolderOnBestBidQuote;
						_client.AskQuote -= SessionHolderOnAskQuote;
						_client.BestAskQuote -= SessionHolderOnBestAskQuote;
						_client.EndQuote -= SessionHolderOnEndQuote;
						_client.Level1 -= SessionHolderOnLevel1;
						_client.OrderBook -= SessionHolderOnOrderBook;
						_client.SettlementPrice -= SessionHolderOnSettlementPrice;
						_client.TradeCondition -= SessionHolderOnTradeCondition;
						_client.TradePrint -= SessionHolderOnTradePrint;
						_client.TradeVolume -= SessionHolderOnTradeVolume;
						_client.TradeReplay -= SessionHolderOnTradeReplay;

						_client.TimeBar -= SessionHolderOnTimeBar;
						_client.TimeBarReplay -= SessionHolderOnTimeBarReplay;

						_client.MarketDataError -= SendOutError;

						_client.Alert -= SessionHolderOnAlert;
						_client.PasswordChange -= SessionHolderOnPasswordChange;

						_client = null;
						break;
					}

					case AlertType.ConnectionBroken:
					case AlertType.TradingDisabled:
					case AlertType.QuietHeartbeat:
					{
						this.AddErrorLog(info.AlertType.ToString());
						break;
					}

					default:
						this.AddWarningLog("Unhandled alert: {0}:{1}:{2}", info.ConnectionId, info.AlertType, info.Message);
						break;
				}
			}
			catch (Exception ex)
			{
				SendOutError(ex);
			}
		}
		private void Connect()
		{
			if (UserName.IsEmpty() || Password.IsEmpty())
				throw new InvalidOperationException(LocalizedStrings.Str3456);

			_client = new RithmicClient(this, AdminConnectionPoint, CertFile, DomainServerAddress, DomainName,
				LicenseServerAddress, LocalBrokerAddress, LoggerAddress, LogFileName);

			_client.OrderInfo += SessionHolderOnOrderInfo;
			_client.OrderBust += SessionHolderOnOrderBust;
			_client.OrderCancel += SessionHolderOnOrderCancel;
			_client.OrderCancelFailure += SessionHolderOnOrderCancelFailure;
			_client.OrderFailure += SessionHolderOnOrderFailure;
			_client.OrderFill += SessionHolderOnOrderFill;
			_client.OrderLineUpdate += SessionHolderOnOrderLineUpdate;
			_client.OrderModify += SessionHolderOnOrderModify;
			_client.OrderModifyFailure += SessionHolderOnOrderModifyFailure;
			_client.OrderReject += SessionHolderOnOrderReject;
			_client.OrderReport += SessionHolderOnOrderReport;
			_client.OrderStatus += SessionHolderOnOrderStatus;
			_client.OrderReplay += SessionHolderOnOrderReplay;

			_client.Execution += SessionHolderOnExecution;

			_client.AccountPnL += SessionHolderOnAccountPnL;
			_client.AccountPnLUpdate += SessionHolderOnAccountPnLUpdate;
			_client.AccountRms += SessionHolderOnAccountRms;
			_client.Accounts += SessionHolderOnAccounts;
			_client.AccountSodUpdate += SessionHolderOnAccountSodUpdate;

			_client.TransactionError += SendOutError;

			_client.SecurityBinaryContracts += SessionHolderOnSecurityBinaryContracts;
			_client.SecurityInstrumentByUnderlying += SessionHolderOnSecurityInstrumentByUnderlying;
			_client.SecurityOptions += SessionHolderOnSecurityOptions;
			_client.SecurityRefData += SessionHolderOnSecurityRefData;

			_client.Exchanges += SessionHolderOnExchanges;

			_client.BidQuote += SessionHolderOnBidQuote;
			_client.BestBidQuote += SessionHolderOnBestBidQuote;
			_client.AskQuote += SessionHolderOnAskQuote;
			_client.BestAskQuote += SessionHolderOnBestAskQuote;
			_client.EndQuote += SessionHolderOnEndQuote;
			_client.Level1 += SessionHolderOnLevel1;
			_client.OrderBook += SessionHolderOnOrderBook;
			_client.SettlementPrice += SessionHolderOnSettlementPrice;
			_client.TradeCondition += SessionHolderOnTradeCondition;
			_client.TradePrint += SessionHolderOnTradePrint;
			_client.TradeVolume += SessionHolderOnTradeVolume;
			_client.TradeReplay += SessionHolderOnTradeReplay;

			_client.TimeBar += SessionHolderOnTimeBar;
			_client.TimeBarReplay += SessionHolderOnTimeBarReplay;

			_client.MarketDataError += SendOutError;

			_client.Alert += SessionHolderOnAlert;
			_client.PasswordChange += SessionHolderOnPasswordChange;

			_connStates[ConnectionId.TradingSystem] = TransactionConnectionPoint.IsEmpty() ? (bool?)null : false;
			_connStates[ConnectionId.MarketData] = MarketDataConnectionPoint.IsEmpty() ? (bool?)null : false;
			_connStates[ConnectionId.PnL] = PositionConnectionPoint.IsEmpty() ? (bool?)null : false;
			_connStates[ConnectionId.History] = HistoricalConnectionPoint.IsEmpty() ? (bool?)null : false;

			_client.Session.login(_client.Callbacks,
				UserName, Password.To<string>(),
				MarketDataConnectionPoint,
				TransactionalUserName.IsEmpty() ? UserName : TransactionalUserName,
				(TransactionalPassword.IsEmpty() ? Password : TransactionalPassword).To<string>(),
				TransactionConnectionPoint,
				PositionConnectionPoint,
				HistoricalConnectionPoint);
		}
Esempio n. 6
0
        /// <summary>
        /// Send message.
        /// </summary>
        /// <param name="message">Message.</param>
        protected override void OnSendInMessage(Message message)
        {
            switch (message.Type)
            {
            case MessageTypes.Reset:
            {
                _accounts.Clear();
                _quotes.Clear();

                if (_client != null)
                {
                    try
                    {
                        _client.Session.logout();
                    }
                    catch (Exception ex)
                    {
                        SendOutError(ex);
                    }

                    _client = null;
                }

                SendOutMessage(new ResetMessage());

                break;
            }

            case MessageTypes.Connect:
            {
                if (_client != null)
                {
                    throw new InvalidOperationException(LocalizedStrings.Str1619);
                }

                Connect();

                break;
            }

            case MessageTypes.Disconnect:
            {
                if (_client == null)
                {
                    throw new InvalidOperationException(LocalizedStrings.Str1856);
                }

                _client.Session.logout();

                break;
            }

            case MessageTypes.OrderRegister:
                ProcessRegisterMessage((OrderRegisterMessage)message);
                break;

            case MessageTypes.OrderReplace:
                ProcessReplaceMessage((OrderReplaceMessage)message);
                break;

            case MessageTypes.OrderCancel:
                ProcessCancelMessage((OrderCancelMessage)message);
                break;

            case MessageTypes.OrderGroupCancel:
                ProcessGroupCancelMessage((OrderGroupCancelMessage)message);
                break;

            case MessageTypes.OrderStatus:
                ProcessOrderStatusMessage();
                break;

            case MessageTypes.SecurityLookup:
                ProcessSecurityLookupMessage((SecurityLookupMessage)message);
                break;

            case MessageTypes.PortfolioLookup:
                _client.Session.getAccounts();
                break;

            case MessageTypes.Portfolio:
                ProcessPortfolioMessage((PortfolioMessage)message);
                break;

            case MessageTypes.MarketData:
                ProcessMarketDataMessage((MarketDataMessage)message);
                break;

            case MessageTypes.ChangePassword:
                var newPassword = ((ChangePasswordMessage)message).NewPassword;
                _client.Session.changePassword(Password.To <string>(), newPassword.To <string>());
                break;
            }
        }
Esempio n. 7
0
        private void SessionHolderOnAlert(AlertInfo info)
        {
            try
            {
                if (!_connStates.ContainsKey(info.ConnectionId))
                {
                    this.AddErrorLog("Received alert for unexpected connection id ({0}):\n{1}",
                                     info.ConnectionId, info.DumpableToString());

                    return;
                }

                this.AddInfoLog("{0}: {1} - '{2}'", info.AlertType, info.ConnectionId, info.Message);

                switch (info.AlertType)
                {
                case AlertType.ConnectionOpened:
                case AlertType.TradingEnabled:
                    break;

                case AlertType.LoginComplete:
                {
                    var dict = _connStates;

                    bool canProcess;

                    lock (dict.SyncRoot)
                    {
                        dict[info.ConnectionId] = true;
                        canProcess = dict.Values.All(connected => connected == null || connected == true);
                    }

                    if (canProcess)
                    {
                        SendOutMessage(new ConnectMessage());
                    }

                    break;
                }

                case AlertType.ConnectionClosed:
                {
                    var dict = _connStates;

                    bool canProcess;

                    lock (dict.SyncRoot)
                    {
                        dict[info.ConnectionId] = false;
                        canProcess = dict.Values.All(connected => connected == null || connected == false);
                    }

                    if (canProcess)
                    {
                        SendOutMessage(new DisconnectMessage());
                        _client.Session.shutdown();
                    }

                    break;
                }

                case AlertType.LoginFailed:
                case AlertType.ServiceError:
                case AlertType.ForcedLogout:
                {
                    this.AddErrorLog(info.AlertType.ToString());

                    var dict = _connStates;

                    bool canProcess;

                    lock (dict.SyncRoot)
                    {
                        dict[info.ConnectionId] = false;
                        canProcess = dict.Values.All(connected => connected == null || connected == false);
                    }

                    if (canProcess)
                    {
                        SendOutMessage(new ConnectMessage {
                                Error = new InvalidOperationException(LocalizedStrings.Str3458Params.Put(info.Message))
                            });
                    }

                    break;
                }

                case AlertType.ShutdownSignal:
                {
                    _client.OrderInfo          -= SessionHolderOnOrderInfo;
                    _client.OrderBust          -= SessionHolderOnOrderBust;
                    _client.OrderCancel        -= SessionHolderOnOrderCancel;
                    _client.OrderCancelFailure -= SessionHolderOnOrderCancelFailure;
                    _client.OrderFailure       -= SessionHolderOnOrderFailure;
                    _client.OrderFill          -= SessionHolderOnOrderFill;
                    _client.OrderLineUpdate    -= SessionHolderOnOrderLineUpdate;
                    _client.OrderModify        -= SessionHolderOnOrderModify;
                    _client.OrderModifyFailure -= SessionHolderOnOrderModifyFailure;
                    _client.OrderReject        -= SessionHolderOnOrderReject;
                    _client.OrderReport        -= SessionHolderOnOrderReport;
                    _client.OrderStatus        -= SessionHolderOnOrderStatus;
                    _client.OrderReplay        -= SessionHolderOnOrderReplay;

                    _client.Execution -= SessionHolderOnExecution;

                    _client.AccountPnL       -= SessionHolderOnAccountPnL;
                    _client.AccountPnLUpdate -= SessionHolderOnAccountPnLUpdate;
                    _client.AccountRms       -= SessionHolderOnAccountRms;
                    _client.Accounts         -= SessionHolderOnAccounts;
                    _client.AccountSodUpdate -= SessionHolderOnAccountSodUpdate;

                    _client.TransactionError -= SendOutError;

                    _client.SecurityBinaryContracts        -= SessionHolderOnSecurityBinaryContracts;
                    _client.SecurityInstrumentByUnderlying -= SessionHolderOnSecurityInstrumentByUnderlying;
                    _client.SecurityOptions -= SessionHolderOnSecurityOptions;
                    _client.SecurityRefData -= SessionHolderOnSecurityRefData;

                    _client.Exchanges -= SessionHolderOnExchanges;

                    _client.BidQuote        -= SessionHolderOnBidQuote;
                    _client.BestBidQuote    -= SessionHolderOnBestBidQuote;
                    _client.AskQuote        -= SessionHolderOnAskQuote;
                    _client.BestAskQuote    -= SessionHolderOnBestAskQuote;
                    _client.EndQuote        -= SessionHolderOnEndQuote;
                    _client.Level1          -= SessionHolderOnLevel1;
                    _client.OrderBook       -= SessionHolderOnOrderBook;
                    _client.SettlementPrice -= SessionHolderOnSettlementPrice;
                    _client.TradeCondition  -= SessionHolderOnTradeCondition;
                    _client.TradePrint      -= SessionHolderOnTradePrint;
                    _client.TradeVolume     -= SessionHolderOnTradeVolume;
                    _client.TradeReplay     -= SessionHolderOnTradeReplay;

                    _client.TimeBar       -= SessionHolderOnTimeBar;
                    _client.TimeBarReplay -= SessionHolderOnTimeBarReplay;

                    _client.MarketDataError -= SendOutError;

                    _client.Alert          -= SessionHolderOnAlert;
                    _client.PasswordChange -= SessionHolderOnPasswordChange;

                    _client = null;
                    break;
                }

                case AlertType.ConnectionBroken:
                case AlertType.TradingDisabled:
                case AlertType.QuietHeartbeat:
                {
                    this.AddErrorLog(info.AlertType.ToString());
                    break;
                }

                default:
                    this.AddWarningLog("Unhandled alert: {0}:{1}:{2}", info.ConnectionId, info.AlertType, info.Message);
                    break;
                }
            }
            catch (Exception ex)
            {
                SendOutError(ex);
            }
        }
Esempio n. 8
0
        private void Connect()
        {
            if (UserName.IsEmpty() || Password.IsEmpty())
            {
                throw new InvalidOperationException(LocalizedStrings.Str3456);
            }

            _client = new RithmicClient(this, AdminConnectionPoint, CertFile, DomainServerAddress, DomainName,
                                        LicenseServerAddress, LocalBrokerAddress, LoggerAddress, LogFileName);

            _client.OrderInfo          += SessionHolderOnOrderInfo;
            _client.OrderBust          += SessionHolderOnOrderBust;
            _client.OrderCancel        += SessionHolderOnOrderCancel;
            _client.OrderCancelFailure += SessionHolderOnOrderCancelFailure;
            _client.OrderFailure       += SessionHolderOnOrderFailure;
            _client.OrderFill          += SessionHolderOnOrderFill;
            _client.OrderLineUpdate    += SessionHolderOnOrderLineUpdate;
            _client.OrderModify        += SessionHolderOnOrderModify;
            _client.OrderModifyFailure += SessionHolderOnOrderModifyFailure;
            _client.OrderReject        += SessionHolderOnOrderReject;
            _client.OrderReport        += SessionHolderOnOrderReport;
            _client.OrderStatus        += SessionHolderOnOrderStatus;
            _client.OrderReplay        += SessionHolderOnOrderReplay;

            _client.Execution += SessionHolderOnExecution;

            _client.AccountPnL       += SessionHolderOnAccountPnL;
            _client.AccountPnLUpdate += SessionHolderOnAccountPnLUpdate;
            _client.AccountRms       += SessionHolderOnAccountRms;
            _client.Accounts         += SessionHolderOnAccounts;
            _client.AccountSodUpdate += SessionHolderOnAccountSodUpdate;

            _client.TransactionError += SendOutError;

            _client.SecurityBinaryContracts        += SessionHolderOnSecurityBinaryContracts;
            _client.SecurityInstrumentByUnderlying += SessionHolderOnSecurityInstrumentByUnderlying;
            _client.SecurityOptions += SessionHolderOnSecurityOptions;
            _client.SecurityRefData += SessionHolderOnSecurityRefData;

            _client.Exchanges += SessionHolderOnExchanges;

            _client.BidQuote        += SessionHolderOnBidQuote;
            _client.BestBidQuote    += SessionHolderOnBestBidQuote;
            _client.AskQuote        += SessionHolderOnAskQuote;
            _client.BestAskQuote    += SessionHolderOnBestAskQuote;
            _client.EndQuote        += SessionHolderOnEndQuote;
            _client.Level1          += SessionHolderOnLevel1;
            _client.OrderBook       += SessionHolderOnOrderBook;
            _client.SettlementPrice += SessionHolderOnSettlementPrice;
            _client.TradeCondition  += SessionHolderOnTradeCondition;
            _client.TradePrint      += SessionHolderOnTradePrint;
            _client.TradeVolume     += SessionHolderOnTradeVolume;
            _client.TradeReplay     += SessionHolderOnTradeReplay;

            _client.TimeBar       += SessionHolderOnTimeBar;
            _client.TimeBarReplay += SessionHolderOnTimeBarReplay;

            _client.MarketDataError += SendOutError;

            _client.Alert          += SessionHolderOnAlert;
            _client.PasswordChange += SessionHolderOnPasswordChange;

            _connStates[ConnectionId.TradingSystem] = TransactionConnectionPoint.IsEmpty() ? (bool?)null : false;
            _connStates[ConnectionId.MarketData]    = MarketDataConnectionPoint.IsEmpty() ? (bool?)null : false;
            _connStates[ConnectionId.PnL]           = PositionConnectionPoint.IsEmpty() ? (bool?)null : false;
            _connStates[ConnectionId.History]       = HistoricalConnectionPoint.IsEmpty() ? (bool?)null : false;

            _client.Session.login(_client.Callbacks,
                                  UserName, Password.To <string>(),
                                  MarketDataConnectionPoint,
                                  TransactionalUserName.IsEmpty() ? UserName : TransactionalUserName,
                                  (TransactionalPassword.IsEmpty() ? Password : TransactionalPassword).To <string>(),
                                  TransactionConnectionPoint,
                                  PositionConnectionPoint,
                                  HistoricalConnectionPoint);
        }