public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream) { // проверяем, задано ли имя серверного хоста или его адрес _serverHostNameOrIp = requestHeaders["serverHostNameOrIp"]; if (_serverHostNameOrIp != null) { // помещаем его в контекст вызова CallContext.SetData("serverHostNameOrIp", _serverHostNameOrIp); // протоколируем if (_eventLink != null) { _eventLink.Post(_eventSource, string.Format("Имя или IP-адрес сервера ЗАДАНО: [{0}]", _serverHostNameOrIp)); } } else { // очишаем значение, оставшееся от предыдущих вызовов CallContext.FreeNamedDataSlot("serverHostNameOrIp"); // протоколируем if (_eventLink != null) { _eventLink.Post(_eventSource, EventType.Warning, "Имя или IP-адрес сервера НЕ задано"); } } // перенаправляем обработку сообщения следующему приемнику в цепи sinkStack.Push(this, null); ServerProcessing status = _nextSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream); return(status); }
/// <summary> /// Отсоединение объекта от его прокси /// </summary> /// <param name="obj">Объект</param> public void DisconnectedObject(object obj) { if (_debugInfo) { _eventLink.Post(DeviceManager.EventSource, string.Format(_objDisconnected, obj.GetType())); } }
/// <summary> /// Создает экземпляр класса /// </summary> /// <param name="eventLink">Интерфейс журнала событий</param> public TsManager(IEventLink eventLink) { if (eventLink == null) { throw new ArgumentNullException("eventLink"); } // загружаем реализации логики работы СКУД _eventLink = eventLink; _eventLink.Post(TsGlobalConst.EventSource, "Загрузка реализаций логики работы СКУД"); _logicLoader = new AMCSLogicLoader(TsGlobalConst.GetACMSLogicDirectory()); // загрузка конфигурации _eventLink.Post(TsGlobalConst.EventSource, "Загрузка конфигурации менеджера"); _settings = GenericSerializer.Deserialize <TsManagerSettings>(TsGlobalConst.GetSettingsFile(), false, _logicLoader.GetLogicSettingsTypes()); _workers = new List <TsWorker>(); // просматриваем конфигурацию и создаем по рабочему потоку для каждого турникета foreach (AMCSLogicSettings logicSettings in _settings.LogicSettings) { foreach (TsUnitSettings unitSettings in logicSettings.Units) { try { // создаем реализацию логики работы СКУД и инициализируем ее параметры IAMCSLogic logic = _logicLoader.CreateLogic(logicSettings.AcmsName); logic.Settings = logicSettings.LogicSettings; // создаем рабочий поток TsWorker worker = new TsWorker(logic, unitSettings, _eventLink); _eventLink.Post(TsGlobalConst.EventSource, string.Format( "Создан рабочий поток для турникета {0}, СКУД \"{1}\"", unitSettings, logicSettings.AcmsName)); // добавляем его в список _workers.Add(worker); } catch (Exception e) { string checkPoint = string.Format( "Создание рабочего потока для турникета {0}, СКУД \"{1}\"", unitSettings, logicSettings.AcmsName); _eventLink.Post(TsGlobalConst.EventSource, checkPoint, e); } } } }
/// <summary> /// Захват устройства /// </summary> private void CaptureDevice() { if (_client != null && _device != null) { // устройство уже захвачено return; } // подключаемся к диспетчеру устройств _client = new DeviceManagerClient(_unitSettings.HostOrIp, _unitSettings.Port); _client.Login(); // захватываем турникет _client.Capture(_unitSettings.DeviceId, Timeout.Infinite); _device = (ITurnstileDevice)_client[_unitSettings.DeviceId]; // подключение установлено _eventLink.Post(TsGlobalConst.EventSource, string.Format( "[0] Подключение к диспетчеру устройств установлено", _unitSettings)); }
/// <summary> /// Замена имени хоста или IP-адреса /// </summary> /// <param name="dataStore">Данные канала</param> /// <param name="serverHostNameOrIp">Имя или адрес хоста, переданное с клиента</param> private void ReplaceHostNameOrIp(ChannelDataStore dataStore, string serverHostNameOrIp) { for (int i = 0; i < dataStore.ChannelUris.Length; i++) { if (_eventLink != null) { _eventLink.Post(EventSource, string.Format( "Исходный URI в данных канала связи: {0}", dataStore.ChannelUris[i])); } UriBuilder ub = new UriBuilder(dataStore.ChannelUris[i]); // сравниваем имя хоста в URI канала и то же, переданное с клиента if (string.Compare(ub.Host, serverHostNameOrIp, true) != 0) { // меняем на значение, переданное с клиента ub.Host = serverHostNameOrIp; dataStore.ChannelUris[i] = ub.ToString(); if (_eventLink != null) { _eventLink.Post(EventSource, string.Format( "Хост изменен. Новый URI: {0}", dataStore.ChannelUris[i])); } } } }
private void EnumWorkers(string checkPointId, EnumWorkerDelegate workerDelegate) { foreach (TsWorker worker in _workers) { try { workerDelegate(worker); } catch (Exception e) { _eventLink.Post(TsGlobalConst.EventSource, checkPointId, e); } } }
protected CustomProgressReporter(IEventLink eventLink, Mode mode) { _eventLink = eventLink; _mode = mode; _startTime = DateTime.Now; var message = String.Empty; switch (_mode) { case Mode.Replace: message = _startReplace; break; case Mode.Update: message = _startUpdate; break; default: message = _startDeletion; break; } _eventLink.Post(ConstHelper.EventSource, message); }
/// <summary> /// Добавляет запись в протокол работы приложения /// </summary> /// <param name="message">Текст сообщения</param> /// <param name="type">Тип сообщения</param> public void WriteEntry(string message, EventLogEntryType type) { // конвертируем тип события // тип EventLogEntryType оставлен для обратной совместимости EventType nativeEventType = EventType.Undefined; switch (type) { case EventLogEntryType.Error: nativeEventType = EventType.Error; break; case EventLogEntryType.Information: nativeEventType = EventType.Information; break; case EventLogEntryType.Warning: nativeEventType = EventType.Warning; break; } _eventLink.Post(EventSource, nativeEventType, message); }