// будет выглядеть как от него - Реальный посыльный стирается // ответ получить посыльному не возможно // можно добавить в сообщение поле отправить ответ по адресу public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение) { // без проверки на входящие объекты // это экземпляры типа foreach (var Связь in СписокКомуОтдать.Список) { //((Связь)Связь).ПередайСообщение(сообщение); } }
public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение) { string строка = (Строка)сообщение; for (int i = 0; i < строка.Length; i++) { ОтослатьСообщениеВсемИсходящим(строка[i].ToString()); } }
public override void ПолучиСообщение(Связь связь, АМОбъект сообщение) { string строка = (СтрокаЮникода)сообщение; for (int i = 0; i < строка.Length; i++) { ОтослатьСообщениеВсемИсходящим(строка[i].ToString()); } }
// будет выглядеть как от него - Реальный посыльный стирается // ответ получить посыльному не возможно // можно добавить в сообщение поле отправить ответ по адресу public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение) { // без проверки на входящие объекты // это экземпляры типа var сооб = сообщение as Сообщение; сооб.ОтКого = СобственныйАдресПримитива; ((Связь)сооб.Кому.АдресВКуче()).ПередайСообщение(сооб); //ОтослатьСообщениеВсемИсходящим(сооб); }
//это реакция на сообщение public virtual void ПолучиСообщение(Связь связь, АМОбъект сообщение) // получи, возьми это команда снаружи { //возможно это единственная команда // есть ожидаемый список сообщений // поиск реакции соответсвующий этому набору данных // если реакций много уточнение у пославшего какую именно реакцию требуется выполнить // запуск этой реакции var сооб = сообщение as Сообщение; //распознование сообщения это могут быть данные или команды из утверденного сценария связи ( сначала согласование типа протокола, потом пароли, потом обмен данными и командами) }
public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение) { // считает такты текущий++; ОтослатьСообщениеВсемИсходящим(текущий); if (текущий == 10) { СброситьСчетчик(); } }
public override void ПолучиСообщение(Связь связь, АМОбъект сообщение) // это вариант с подпиской связь это представитель некоторой удалееной активности можно общаться с образом Активности { var индексСвязи = ((АдресВАктивности)связь.СобственныйАдресПримитива).номер; _Слогаемое[индексСвязи] = (ЦелоеЧисло)сообщение; if (_Слогаемое[0] != null && _Слогаемое[1] != null) { Сумма.Значение = _Слогаемое[0].Значение + _Слогаемое[0].Значение; // автоматическое срабатывание ОтослатьСообщениеВсемИсходящим(Сумма); } }
// активность имеет свйоства группы - выполняет роль регистратора-диспетчера // это для связывания с другими активностями , только этот метод должен быть виден , можно унаследоватся от группы // нужен спицифический собственный Адрес , чтобы запускать этот метод вместо индексера Группы // public Адрес ДобавьСвязь(Связь описание) //это = получи адрес у регистратора , активность отличается от регистратора тем что соханяет порты и самми связи { описание.однаяАктивность = this; var адресВГруппе = СписокСвязей.Добавить(описание); var адресВАктивности = new АдресВАктивности() { номер = ((АдресВГруппе)адресВГруппе).НомерВГруппе, АдресАктивностиВКуче = this, АдресРОдительскойАктивности = this.СобственныйАдресПримитива }; описание.АдресСобственный = адресВАктивности; return(адресВАктивности); }
public ЦелоеЧисло Сложи(Адрес АдресСлогаемого1, Адрес АдресСлогаемого2) // услуга -- нет смысла хранить ни слогаемые ни сумму есть проблема с параллельным выполнением надо делать временные связи { var связь = new Связь() { АдресУдаленнойСвязи = АдресСлогаемого1 }; var слог1 = (ЦелоеЧисло)связь.ПередайКоманду(new Команда("ДайЗначение")); связь.АдресУдаленнойСвязи = АдресСлогаемого2; var слог2 = (ЦелоеЧисло)связь.ПередайКоманду(new Команда("ДайЗначение")); return(new ЦелоеЧисло(слог1.Значение + слог2.Значение)); ДайСвязьПоНомеру(0).АдресУдаленнойСвязи = АдресСлогаемого1; ДайСвязьПоНомеру(1).АдресУдаленнойСвязи = АдресСлогаемого2; return(new ЦелоеЧисло(Слогаемое(0).Значение + Слогаемое(1).Значение)); }
// добавить исходящие public override void ПолучиСообщение(Связь связь, АМОбъект сообщение) { var сообщВнутр = сообщение as Сообщение; int последний = СписокКомуОтдать.Список.Count; var адресСвязи = ((АдресВАктивности)связь.СобственныйАдресПримитива).номер; //Исключение эффекта эха for (int i = 0; i < адресСвязи; i++) { ((Связь)СписокКомуОтдать.Список[i]).ПередайСообщение(сообщВнутр); } for (int i = адресСвязи + 1; i < последний; i++) { ((Связь)СписокКомуОтдать.Список[i]).ПередайСообщение(сообщВнутр); } }
// public static void СоздайОдностороннююСвязьВПамяти(Адрес АдресИсходящаяАктивность, Адрес адресВходящаяАктивность) { var исходящаяАктивность = (Активность)АдресИсходящаяАктивность.АдресВКуче(); var входящаяАктивность = (Активность)адресВходящаяАктивность.АдресВКуче(); // в исходящей создается клиент var связьВисходящей = new Связь() { ТипСвязи = "исходящая", ИмяСвязи = "передатчик", }; var адресВИсходящей = исходящаяАктивность.ДобавьСвязь(связьВисходящей); // это относительныйАдрес связи относительно активности // созлается сервер var связьВоВходящей = new Связь() { ИмяСвязи = "приемник", ТипСвязи = "входящая", АдресУдаленнойСвязи = адресВИсходящей }; var адресВоВходящей = входящаяАктивность.ДобавьСвязь(связьВоВходящей); связьВисходящей.АдресУдаленнойСвязи = адресВоВходящей; }
public Адрес Восстановить(Связь связь) { var адрес = (Адрес)связь.Канал.ДайВходящееСообщение(); // может быть замкнутый цикл Адрес конечныйАдрес; if (!(адрес is АдресАбсолютный)) { конечныйАдрес = new АдресАбсолютный() { АдресРегистратора = связь.АдресУдаленнойСвязи, АдресОтносительный = адрес }; } else { конечныйАдрес = адрес; } //возможно нужно вставлять копию связи целиком // если активность становиться посредником, то адрес регистратора будет собственый локальный адрес активности return(конечныйАдрес); }
private int разрешенныйОтступ; //= Разрешенная пауза не сбрасывает счетчик, пока не поступит это количество пустых тактов // так можно реализовать отслеживание перестановки букв public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение) // это сообщение посылает либо активность представляющая ее части, либо пустой такт { var поступившаяАктивность = сообщение as Активность; // если поступившая есть в списке и она еще неприходила if (СписокАктивностей.Contains(поступившаяАктивность)) { if (!ПришедшиеАктивности.Contains(поступившаяАктивность)) // если она ранее не приходила { ПришедшиеАктивности.Add(поступившаяАктивность); if (ПришедшиеАктивности.Count == СписокОтКогоПолучить.Список.Count) { ОтослатьСообщениеВсемИсходящим("все пришли"); ПришедшиеАктивности.Clear(); } } else // если уже ранее приходила //если придет два раза "русская" (дребезг) { //если текущий пауза меньше разрешенной // вариант 1 устранение дребезга = "одна или несколько одинаковвых слов //ничего не делать //вариант 2 точное совпадение, не допускаются повторы ПришедшиеАктивности.Clear(); } } else //если пришла неподходящая активность - пустой такт { //если текущий пауза меньше разрешенной ПришедшиеАктивности.Clear(); } //if (поступившаяАктивность != null) //если это не пустой такт //{ //} }
// // процессор сразу уходит из активности // public override void ПолучиСообщение(Связь связь, АМОбъект сообщение) { }
public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение) { string строка = (Строка)сообщение; ОтослатьСообщениеВсемИсходящим(строка[номерСимвола].ToString()); }
public override void ПолучиСообщение(Связь связь, АМОбъект сообщение) { var сообщ = new Сообщение(); ДобавитьСообщение(сообщ); }
// // процессор сразу уходит из активности // public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение) { }
public virtual АМОбъект ПолучиСообщениеСОтветом(Связь связь, АМОбъект сообщение) { return(null); }
public ЦелоеЧисло СложитьУдаленно(Связь Процессор) { // передать команду с указанием адресов return(null); }
public override void ПолучиСообщение(Связь связь, АМОбъект сообщение) { string строка = (СтрокаЮникода)сообщение; ОтослатьСообщениеВсемИсходящим(строка[номерСимвола].ToString()); }
public virtual ПримитивИлиАдрес ПолучиСообщениеСОтветом(Связь связь, ПримитивИлиАдрес сообщение) { return(null); }
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 можно предположить что набираемый список именно этот } }
public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение) { var сообщ = new Сообщение(); ДобавитьСообщение(сообщ); }