/// <summary> /// Запустить работу канала связи /// </summary> public override void Start() { // создание UDP-клиента и соединения UdpClient udpClient = new UdpClient(settings.LocalUdpPort); WriteToLog(string.Format(Localization.UseRussian ? "{0} Локальный UDP-порт {1} открыт" : "{0} Local UDP port {1} is open", CommUtils.GetNowDT(), settings.LocalUdpPort)); terminated = false; udpConn = new UdpConnection(udpClient, settings.LocalUdpPort, settings.RemoteUdpPort); // установка соединения всем КП на линии связи foreach (KPLogic kpLogic in kpList) { kpLogic.Connection = udpConn; } // запуск приёма данных в режиме ведомого if (settings.Behavior == OperatingBehaviors.Slave) { WriteToLog(string.Format(Localization.UseRussian ? "{0} Запуск приёма данных по UDP на порту {1}" : "{0} Start receiving data via UDP on port {1}", CommUtils.GetNowDT(), settings.LocalUdpPort)); StartUdpReceive(); } }
/// <summary> /// Конструктор /// </summary> public CommUdpLogic() : base() { settings = new Settings(); udpConn = null; kpCallNumDict = new Dictionary <string, KPLogic>(); }
/// <summary> /// Инициализировать канал связи /// </summary> public override void Init(SortedList <string, string> commCnlParams, List <KPLogic> kpList) { // вызов метода базового класса base.Init(commCnlParams, kpList); // инициализация настроек канала связи settings.Init(commCnlParams); // создание клиента и соединения UdpClient udpClient = new UdpClient(settings.LocalUdpPort); udpConn = new UdpConnection(udpClient, settings.LocalUdpPort, settings.RemoteUdpPort); foreach (KPLogic kpLogic in kpList) { // добавление КП в словарь по позывным string callNum = kpLogic.CallNum; if (!string.IsNullOrEmpty(callNum) && !kpCallNumDict.ContainsKey(callNum)) { kpCallNumDict.Add(callNum, kpLogic); } // установка соединения всем КП на линии связи kpLogic.Connection = udpConn; } // проверка поддержки режима работы канала связи подключенными КП CheckBehaviorSupport(); }
/// <summary> /// Выполнить действия после сеанса опроса КП или отправки команды /// </summary> public override void AfterSession(KPLogic kpLogic) { // очистка буфера неполностью считанной датаграммы, если сеанс опроса КП завершён с ошибкой if (kpLogic.WorkState == KPLogic.WorkStates.Error && Behavior == OperatingBehaviors.Master) { UdpConnection udpConn = kpLogic.Connection as UdpConnection; if (udpConn != null && udpConn.Connected) { udpConn.ClearDatagramBuffer(); } } }
/// <summary> /// Инициализировать канал связи /// </summary> public override void Init(SortedList<string, string> commCnlParams, List<KPLogic> kpList) { // вызов метода базового класса base.Init(commCnlParams, kpList); // инициализация настроек канала связи settings.Init(commCnlParams); // создание клиента и соединения UdpClient udpClient = new UdpClient(settings.LocalUdpPort); udpConn = new UdpConnection(udpClient, settings.LocalUdpPort, settings.RemoteUdpPort); foreach (KPLogic kpLogic in kpList) { // добавление КП в словарь по позывным string callNum = kpLogic.CallNum; if (!string.IsNullOrEmpty(callNum) && !kpCallNumDict.ContainsKey(callNum)) kpCallNumDict.Add(callNum, kpLogic); // установка соединения всем КП на линии связи kpLogic.Connection = udpConn; } // проверка поддержки режима работы канала связи подключенными КП CheckBehaviorSupport(); }
/// <summary> /// Конструктор /// </summary> public CommUdpLogic() : base() { settings = new Settings(); udpConn = null; kpCallNumDict = new Dictionary<string, KPLogic>(); }