private object ЦиклАктивности() // активная активность - { while (Активен) { while (СписокСообщений.Count != 0) { var сообщение = СписокСообщений.Dequeue(); ОбработайСообщение(сообщение); } // вариант один поток на все связи foreach (Связь связь in СписокСвязей) { связь.ЦиклОбработкиВходящих();// запускается обработка входящих без "ожидания приема" правда //либо логика здесь // проверяется входящий буфер if (связь.Канал.ДоступноБайт() > 0) { связь.МетодПриемаСообщения();// запустить метод приема сообщения //или сразу выполнить var сообщ = new Сообщение(); ОбработайСообщение(сообщ); } } // если это источник то входящих сообщений не бывает if (СписокКомуОтдать.Список.Count == 0) { // отослать сообщение настройщику о простое - поиск потребителей, или // поиск цели существования, я должен выполнить свое предназначение, свою цель // отослать широковещательное сообщение, должен быть в списке исходящих, широковещательная активность это на самом деле ОбщаяАктиность, где СписокИсходящих = Списку Входящих ОтошлиСообщения("внутренние сообщения"); // может быть команда ПолучитьСообщение } Thread.Sleep(ВремяОжидания); // срабатывает после отправки всех сообщений } return(null); }
void ДобавитьСообщение(Сообщение сообщение) { СписокСообщений.Enqueue(сообщение); }
public virtual void ОбработайСообщение(Сообщение сообщение) { }
public override void ПолучиСообщение(Связь связь, АМОбъект сообщение) { var сообщ = new Сообщение(); ДобавитьСообщение(сообщ); }
public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение) { var сообщ = new Сообщение(); ДобавитьСообщение(сообщ); }