示例#1
0
        /// <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);
        }
示例#2
0
        /// <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;
        }
示例#3
0
        /// <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;
        }
示例#4
0
        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;
        }