public override bool ПопробоватьДобавить(object объект) { if (объект == null) { if (ТекущаяГруппа == null) { return(false); } ИсходящийШаблон.ПопробоватьДобавить(ТекущаяГруппа); ТекущаяГруппа = null; return(true); } //var ассСимвол = (Символ) объект; //ассСимвол.АссоциированныеОбъекты.Add(this); if (ТекущаяГруппа == null) { ТекущаяГруппа = new ИменованнаяГруппа2() { ИмяГруппы = ИмяШаблона, ШаблонГруппы = this }; } ТекущаяГруппа.Add(объект); // отправить объект транзитом для частных случаев ТранзитныйШаблон.ПопробоватьДобавить(объект); return(true); }
public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение) { // если сообщение просто символ или адрес объекта if (Множество.Contains(сообщение)) { return; } Множество.Add(сообщение); // если получаются сообщения интерактивно по одному символу var объект = сообщение; if (объект == null) // сигнал завершения { if (_режимДобавления) { //событие добавлен новый список объектов МножествоСписков.Add(ТекущийОбъектСписок); //если список отсортирован, можно вставить в нужное место ОтослатьСообщениеВсемИсходящим(ТекущийОбъектСписок); // отправиться только адрес } else { // у нас есть список подходящих, объект с совпадающей длиной и есть совпадение ( в отсортированном должен быть первым элементом) var длинаОбъекта = ТекущийОбъектСписок.Count; var номерПодходящего = -1; for (int i = 0; i < СписокПодходящихОбъектов.Count; i++) { if (длинаОбъекта == СписокПодходящихОбъектов[i].Count) { номерПодходящего = i; ТекущийОбъектСписок = СписокПодходящихОбъектов[i]; // событие найден подходящий объект - т.е. список реакций не пустой ОтослатьСообщениеВсемИсходящим(СписокПодходящихОбъектов[i]); break; // обнулить все и выйти } } if (номерПодходящего == -1) //все подходящие длиннее { МножествоСписков.Add(ТекущийОбъектСписок); //если список отсортирован, можно вставить в нужное место //событие добавлен новый список объектов ОтослатьСообщениеВсемИсходящим(ТекущийОбъектСписок); } } _режимДобавления = false; ТекущийИндекс = 0; СписокПодходящихОбъектов = null; ТекущийОбъектСписок = null; return; } if (ТекущийИндекс == 0) { СписокПодходящихОбъектов = МножествоСписков; ТекущийОбъектСписок = new ИменованнаяГруппа2() { ИмяГруппы = "Имя Этого Словаря" }; } ТекущийОбъектСписок.Add(объект); if (!_режимДобавления) { СписокПодходящихОбъектов = НайтиПодходящиеПоТекущемуИндексу(объект); if (СписокПодходящихОбъектов.Count == 0) //нет ни одного подхлдящего - сброс поиска { _режимДобавления = true; //повторить поиск для нуля Это для поиска подстроки } // посыл промежуточных результатов ОтослатьСообщениеВсемИсходящим(СписокПодходящихОбъектов);// если режим добавления запрещен и подходящий только 1 можно предположить что набираемый список именно этот } }