/// <summary> /// Конструктор /// </summary> /// <param name="name">Имя соединения</param> /// <param name="ip">IP адрес, по котором удоступен роутер plaza2</param> /// <param name="port">Порт, по котором удоступен роутер plaza2</param> /// <param name="credential">Логин и пароль</param> /// <param name="secondSubconnections">Потоки и паблишеры</param> /// <param name="firstSubconnections">Потоки и паблишеры</param> /// <param name="logger">Логгер</param> /// <param name="callback"></param> public CGateConnection( string name, IPAddress ip, ushort port, NetworkCredential credential, IEnumerable <CGateSubconnection> firstSubconnections, IEnumerable <CGateSubconnection> secondSubconnections, ICGateLogger logger, ICGateConnectionCallback callback) { _name = name; _logger = logger; _callback = callback; if (!string.IsNullOrEmpty(credential.UserName) && !string.IsNullOrEmpty(credential.Password)) { _connectionString = $"p2tcp://{ip}:{port};app_name={credential.UserName};local_pass={credential.Password};"; } else { _connectionString = $"p2tcp://{ip}:{port};"; } _streamsAndPublishers1 = new List <CGateSubconnection>(firstSubconnections.Where(_ => _ != null)); _streamsAndPublishers2 = secondSubconnections != null ? new List <CGateSubconnection>(secondSubconnections.Where(_ => _ != null)) : null; _streamsAndPublishers1.ForEach(_ => _.StateMightBeenChanged += StateMightBeenChangedHandler); _logger.Debug($"{_name} connection string is: {_connectionString}"); callback.RegisterConnection(this); }
/// <summary> /// Конструктор для создания потока сообщений, привязанного к паблишеру /// </summary> public CGateStream( string refListener, CGateStreamType streamType, IMessageConverter converter, ICGateStreamCallback callback, ICGateLogger logger, string mode = "", bool transactional = true) { _callback = callback; _logger = logger; Transactional = transactional; _isPublisherReplyStream = true; RefListener = refListener; Converter = converter; StreamType = streamType; if (!string.IsNullOrEmpty(mode)) { _mode = mode; } _callback.RegisterStream(this); _configuredWell = true; }
/// <summary> /// Конструктор для создания потока репликации общей информации /// </summary> /// <param name="name">Название потока</param> /// <param name="streamType">Тип потока</param> /// <param name="schemeFileName">Имя файла схемы (ini)</param> /// <param name="schemeName">Имя схемы</param> /// <param name="converter">Конвертер сообщений</param> /// <param name="callback">Интерфейс который нужно дёргать для передачи ему полученных сообщений</param> /// <param name="logger">Логгер</param> /// <param name="dependOnStreams">Потоки, от которых зависит данный поток. Сначала нужно дождаться их подключения, потом подключаться самому</param> /// <param name="mode">Режим, в котором должен работать поток</param> /// <param name="useReplStateWhenReconnect">Использовать ли replstate при переподключении или стартовать с нуля</param> /// <param name="transactional">Признак того, что поток транзакционный, то есть в нем приходит OSCMы и сделки</param> public CGateStream( string name, CGateStreamType streamType, string schemeFileName, string schemeName, IMessageConverter converter, ICGateStreamCallback callback, ICGateLogger logger, CGateStream[] dependOnStreams = null, string mode = "", bool useReplStateWhenReconnect = true, bool transactional = false) { _callback = callback; _logger = logger; Name = name; StreamType = streamType; SchemeFileName = schemeFileName; SchemeName = schemeName; Converter = converter; Transactional = transactional; _dependOnStreams = dependOnStreams; if (!string.IsNullOrEmpty(mode)) { _mode = mode; } _useReplStateWhenReconnect = useReplStateWhenReconnect; if (!File.Exists(schemeFileName)) { _logger.Error($"File {schemeFileName} doesn't exist, stream {Name} won't be started"); _configuredWell = false; return; } _callback.RegisterStream(this); _configuredWell = true; }
public CGatePublisher( string name, string schemeFileName, string schemeName, IMessageConverter converter, ICGateStreamCallback callback, ICGateLogger logger) { _logger = logger; Name = name; SchemeFileName = schemeFileName; SchemeName = schemeName; if (!File.Exists(schemeFileName)) { _logger.Error($"File {schemeFileName} doesn't exist, publisher {Name} won't be started"); _configuredWell = false; return; } _stream = new CGateStream(Name, CGateStreamType.FortsMessages, converter, callback, _logger); _configuredWell = true; }