/// <summary> /// Конструктор /// </summary> public CGP2ClientAdapter( CGAdapterConfiguration configuration, string workingDirectory = @"cgate", bool openOrderBooksStreams = true, bool openVolatStream = true, bool openHeartbeatStream = true) { _configuration = configuration; _workingDirectory = workingDirectory; configuration.Logger.Debug("Creating CGAdapter: ip={0}, port={1}, ini_folder={2}", configuration.Address, configuration.Port, configuration.IniFolder); var futInfoStream = new CGateStream( name: "FORTS_FUTINFO_REPL", streamType: CGateStreamType.FutInfo, schemeFileName: $"{configuration.IniFolder}fut_info.ini", schemeName: "CustReplScheme", converter: new Messages.FutInfo.StreamDataMessageConverter(), callback: this, logger: configuration.Logger); var optInfoStream = new CGateStream( name: "FORTS_OPTINFO_REPL", streamType: CGateStreamType.OptInfo, schemeFileName: $"{configuration.IniFolder}opt_info.ini", schemeName: "CustReplScheme", converter: new Messages.OptInfo.StreamDataMessageConverter(), callback: this, logger: configuration.Logger); #region data connection { var firstSubconnections = new[] { futInfoStream, optInfoStream }; var secondSubconnections = new[] { openHeartbeatStream ? new CGateStream( name: "FORTS_FUTTRADE_REPL", streamType: CGateStreamType.FutTrades, schemeFileName: $"{configuration.IniFolder}fut_trades_heartbeat.ini", schemeName: "CustReplScheme", converter: new Messages.FutTrades.StreamDataMessageConverter(), callback: this, logger: configuration.Logger, dependOnStreams: null, mode: "online", transactional: true) : null, new CGateStream( name: "FORTS_FUTCOMMON_REPL", streamType: CGateStreamType.FutCommon, schemeFileName: $"{configuration.IniFolder}fut_common.ini", schemeName: "CustReplScheme", converter: new StreamDataMessageConverter(), callback: this, logger: configuration.Logger), new CGateStream( name: "FORTS_OPTCOMMON_REPL", streamType: CGateStreamType.OptCommon, schemeFileName: $"{configuration.IniFolder}opt_common.ini", schemeName: "CustReplScheme", converter: new Messages.OptCommon.StreamDataMessageConverter(), callback: this, logger: configuration.Logger), new CGateStream( name: "RTS_INDEX_REPL", streamType: CGateStreamType.RtsIndex, schemeFileName: $"{configuration.IniFolder}rts_index.ini", schemeName: "CustReplScheme", converter: new Messages.RtsIndex.StreamDataMessageConverter(), callback: this, logger: configuration.Logger), openVolatStream ? new CGateStream( name: "FORTS_VOLAT_REPL", streamType: CGateStreamType.Volat, schemeFileName: $"{configuration.IniFolder}volat.ini", schemeName: "CustReplScheme", converter: new Messages.Volat.StreamDataMessageConverter(), callback: this, logger: configuration.Logger) : null, openOrderBooksStreams ? new CGateStream( name: "FORTS_FUTAGGR20_REPL", streamType: CGateStreamType.OrdersAggr, schemeFileName: $"{configuration.IniFolder}orders_aggr.ini", schemeName: "CustReplScheme", converter: new Messages.OrdersAggr.StreamDataMessageConverter(), callback: this, logger: configuration.Logger, dependOnStreams: null, mode: "online", useReplStateWhenReconnect: false) : null, openOrderBooksStreams ? new CGateStream( name: "FORTS_OPTAGGR20_REPL", streamType: CGateStreamType.OrdersAggr, schemeFileName: $"{configuration.IniFolder}orders_aggr.ini", schemeName: "CustReplScheme", converter: new Messages.OrdersAggr.StreamDataMessageConverter(), callback: this, logger: configuration.Logger, dependOnStreams: null, mode: "online", useReplStateWhenReconnect: false) : null }; _dataConnection = new CGateConnection( name: "CG_DATA_CONN", ip: configuration.Address, port: configuration.Port, credential: configuration.DataConnectionCredential, firstSubconnections: firstSubconnections, secondSubconnections: secondSubconnections, logger: configuration.Logger, callback: this); } #endregion #region transaction connection { _ordersPublisher = new CGatePublisher( name: "CG_ORDS_SNDR", schemeFileName: $"{configuration.IniFolder}forts_messages.ini", schemeName: "message", converter: new Messages.FortsMessages.StreamDataMessageConverter(), callback: this, logger: configuration.Logger); var firstSubconnections = new CGateSubconnection[] { _ordersPublisher, new CGateStream( name: "FORTS_FUTTRADE_REPL", streamType: CGateStreamType.FutTrades, schemeFileName: $"{configuration.IniFolder}fut_trades.ini", schemeName: "CustReplScheme", converter: new Messages.FutTrades.StreamDataMessageConverter(), callback: this, logger: configuration.Logger, dependOnStreams: new[] { futInfoStream, optInfoStream }, transactional: true), new CGateStream(name: "FORTS_OPTTRADE_REPL", streamType: CGateStreamType.OptTrades, schemeFileName: $"{configuration.IniFolder}opt_trades.ini", schemeName: "CustReplScheme", converter: new Messages.OptTrades.StreamDataMessageConverter(), callback: this, logger: configuration.Logger, dependOnStreams: new[] { futInfoStream, optInfoStream }, transactional: true), new CGateStream( name: "FORTS_POS_REPL", streamType: CGateStreamType.Pos, schemeFileName: $"{configuration.IniFolder}pos.ini", schemeName: "CustReplScheme", converter: new Messages.Pos.StreamDataMessageConverter(), callback: this, logger: configuration.Logger, dependOnStreams: new[] { futInfoStream, optInfoStream }, transactional: true), new CGateStream( name: "FORTS_PART_REPL", streamType: CGateStreamType.Part, schemeFileName: $"{configuration.IniFolder}part.ini", schemeName: "CustReplScheme", converter: new Messages.Part.StreamDataMessageConverter(), callback: this, logger: configuration.Logger, dependOnStreams: new[] { futInfoStream, optInfoStream }, transactional: true), new CGateStream( name: "FORTS_VM_REPL", streamType: CGateStreamType.Vm, schemeFileName: $"{configuration.IniFolder}vm.ini", schemeName: "CustReplScheme", converter: new Messages.Vm.StreamDataMessageConverter(), callback: this, logger: configuration.Logger, dependOnStreams: new[] { futInfoStream, optInfoStream }, transactional: true), }; _transactionConnection = new CGateConnection( "CG_TRNS_CONN", configuration.Address, configuration.Port, configuration.TransactionConnectionCredential, firstSubconnections, null, configuration.Logger, this); } #endregion }
void ICGateConnectionCallback.ConnectionOpening(CGateConnection connection) { }
void ICGateConnectionCallback.ConnectionActive(CGateConnection connection) { UpdateConnectionState(CGConnectionState.Connected); }
void ICGateConnectionCallback.ConnectionError(CGateConnection connection) { }
void ICGateConnectionCallback.ConnectionClosed(CGateConnection connection) { UpdateConnectionState(CGConnectionState.Disconnected); }
void ICGateConnectionCallback.RegisterConnection(CGateConnection connection) { }