Exemplo n.º 1
0
        // будет выглядеть как от него - Реальный посыльный стирается
        // ответ получить посыльному не возможно
        // можно добавить в сообщение поле отправить ответ по адресу

        public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение)
        {
            // без проверки на входящие объекты // это экземпляры типа
            foreach (var Связь in СписокКомуОтдать.Список)
            {
                //((Связь)Связь).ПередайСообщение(сообщение);
            }
        }
Exemplo n.º 2
0
        public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение)
        {
            string строка = (Строка)сообщение;

            for (int i = 0; i < строка.Length; i++)
            {
                ОтослатьСообщениеВсемИсходящим(строка[i].ToString());
            }
        }
Exemplo n.º 3
0
        public override void ПолучиСообщение(Связь связь, АМОбъект сообщение)
        {
            string строка = (СтрокаЮникода)сообщение;

            for (int i = 0; i < строка.Length; i++)
            {
                ОтослатьСообщениеВсемИсходящим(строка[i].ToString());
            }
        }
Exemplo n.º 4
0
        // будет выглядеть как от него - Реальный посыльный стирается
        // ответ получить посыльному не возможно
        // можно добавить в сообщение поле отправить ответ по адресу
        public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение)
        {
            // без проверки на входящие объекты // это экземпляры типа
            var сооб = сообщение as Сообщение;

            сооб.ОтКого = СобственныйАдресПримитива;
            ((Связь)сооб.Кому.АдресВКуче()).ПередайСообщение(сооб);

            //ОтослатьСообщениеВсемИсходящим(сооб);
        }
Exemplo n.º 5
0
        //это реакция на сообщение
        public virtual void ПолучиСообщение(Связь связь, АМОбъект сообщение) // получи, возьми это команда снаружи
        {                                                                    //возможно это единственная команда
            // есть ожидаемый список сообщений
            // поиск реакции соответсвующий этому набору данных
            // если реакций много уточнение у пославшего какую именно реакцию требуется выполнить
            // запуск этой реакции
            var сооб = сообщение as Сообщение;

            //распознование сообщения это могут быть данные или команды из утверденного сценария связи ( сначала согласование типа протокола, потом пароли, потом обмен данными и командами)
        }
Exemplo n.º 6
0
        public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение)
        {
            // считает такты
            текущий++;
            ОтослатьСообщениеВсемИсходящим(текущий);

            if (текущий == 10)
            {
                СброситьСчетчик();
            }
        }
Exemplo n.º 7
0
        public override void ПолучиСообщение(Связь связь, АМОбъект сообщение)   // это вариант с подпиской связь это представитель некоторой удалееной активности можно общаться с образом Активности
        {
            var индексСвязи = ((АдресВАктивности)связь.СобственныйАдресПримитива).номер;

            _Слогаемое[индексСвязи] = (ЦелоеЧисло)сообщение;

            if (_Слогаемое[0] != null && _Слогаемое[1] != null)
            {
                Сумма.Значение = _Слогаемое[0].Значение + _Слогаемое[0].Значение; // автоматическое срабатывание
                ОтослатьСообщениеВсемИсходящим(Сумма);
            }
        }
Exemplo n.º 8
0
        // активность имеет свйоства группы - выполняет роль регистратора-диспетчера
        // это для связывания с другими активностями , только этот метод должен быть виден , можно унаследоватся от группы
        // нужен спицифический собственный Адрес , чтобы запускать этот метод вместо индексера Группы
        //
        public Адрес ДобавьСвязь(Связь описание) //это = получи адрес у регистратора , активность отличается от регистратора тем что соханяет порты и самми связи
        {
            описание.однаяАктивность = this;
            var адресВГруппе     = СписокСвязей.Добавить(описание);
            var адресВАктивности = new АдресВАктивности()
            {
                номер = ((АдресВГруппе)адресВГруппе).НомерВГруппе, АдресАктивностиВКуче = this, АдресРОдительскойАктивности = this.СобственныйАдресПримитива
            };

            описание.АдресСобственный = адресВАктивности;
            return(адресВАктивности);
        }
Exemplo n.º 9
0
        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).Значение));
        }
Exemplo n.º 10
0
        // добавить исходящие
        public override void ПолучиСообщение(Связь связь, АМОбъект сообщение)
        {
            var сообщВнутр = сообщение as Сообщение;
            int последний  = СписокКомуОтдать.Список.Count;

            var адресСвязи = ((АдресВАктивности)связь.СобственныйАдресПримитива).номер;

            //Исключение эффекта эха
            for (int i = 0; i < адресСвязи; i++)
            {
                ((Связь)СписокКомуОтдать.Список[i]).ПередайСообщение(сообщВнутр);
            }
            for (int i = адресСвязи + 1; i < последний; i++)
            {
                ((Связь)СписокКомуОтдать.Список[i]).ПередайСообщение(сообщВнутр);
            }
        }
Exemplo n.º 11
0
        //
        public static void СоздайОдностороннююСвязьВПамяти(Адрес АдресИсходящаяАктивность, Адрес адресВходящаяАктивность)
        {
            var исходящаяАктивность = (Активность)АдресИсходящаяАктивность.АдресВКуче();
            var входящаяАктивность  = (Активность)адресВходящаяАктивность.АдресВКуче();

            // в исходящей создается клиент
            var связьВисходящей = new Связь()
            {
                ТипСвязи = "исходящая", ИмяСвязи = "передатчик",
            };
            var адресВИсходящей = исходящаяАктивность.ДобавьСвязь(связьВисходящей);  // это относительныйАдрес связи относительно активности

            // созлается сервер
            var связьВоВходящей = new Связь()
            {
                ИмяСвязи = "приемник", ТипСвязи = "входящая", АдресУдаленнойСвязи = адресВИсходящей
            };
            var адресВоВходящей = входящаяАктивность.ДобавьСвязь(связьВоВходящей);

            связьВисходящей.АдресУдаленнойСвязи = адресВоВходящей;
        }
Exemplo n.º 12
0
        public Адрес Восстановить(Связь связь)
        {
            var   адрес = (Адрес)связь.Канал.ДайВходящееСообщение(); // может быть замкнутый цикл
            Адрес конечныйАдрес;

            if (!(адрес is АдресАбсолютный))
            {
                конечныйАдрес = new АдресАбсолютный()
                {
                    АдресРегистратора  = связь.АдресУдаленнойСвязи,
                    АдресОтносительный = адрес
                };
            }
            else
            {
                конечныйАдрес = адрес;
            }
            //возможно нужно вставлять копию связи целиком
            // если активность становиться посредником, то адрес регистратора будет собственый локальный адрес активности

            return(конечныйАдрес);
        }
Exemplo n.º 13
0
        private int разрешенныйОтступ;                                                //= Разрешенная пауза не сбрасывает счетчик, пока не поступит это количество пустых тактов
        // так можно реализовать отслеживание перестановки букв
        public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение) // это сообщение посылает либо активность представляющая ее части, либо пустой такт
        {
            var поступившаяАктивность = сообщение as Активность;

            // если поступившая есть в списке и она еще неприходила
            if (СписокАктивностей.Contains(поступившаяАктивность))
            {
                if (!ПришедшиеАктивности.Contains(поступившаяАктивность)) // если она ранее не приходила
                {
                    ПришедшиеАктивности.Add(поступившаяАктивность);
                    if (ПришедшиеАктивности.Count == СписокОтКогоПолучить.Список.Count)
                    {
                        ОтослатьСообщениеВсемИсходящим("все пришли");
                        ПришедшиеАктивности.Clear();
                    }
                }
                else // если уже ранее приходила //если придет два раза "русская" (дребезг)
                {
                    //если текущий пауза меньше разрешенной
                    // вариант 1 устранение дребезга = "одна  или несколько одинаковвых слов
                    //ничего не делать

                    //вариант 2 точное совпадение, не допускаются повторы
                    ПришедшиеАктивности.Clear();
                }
            }
            else //если пришла неподходящая активность - пустой такт
            {
                //если текущий пауза меньше разрешенной
                ПришедшиеАктивности.Clear();
            }

            //if (поступившаяАктивность != null) //если это не пустой такт
            //{

            //}
        }
Exemplo n.º 14
0
 //
 // процессор сразу уходит из активности
 //
 public override void ПолучиСообщение(Связь связь, АМОбъект сообщение)
 {
 }
Exemplo n.º 15
0
        public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение)
        {
            string строка = (Строка)сообщение;

            ОтослатьСообщениеВсемИсходящим(строка[номерСимвола].ToString());
        }
Exemplo n.º 16
0
        public override void ПолучиСообщение(Связь связь, АМОбъект сообщение)
        {
            var сообщ = new Сообщение();

            ДобавитьСообщение(сообщ);
        }
Exemplo n.º 17
0
 //
 // процессор сразу уходит из активности
 //
 public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение)
 {
 }
Exemplo n.º 18
0
 public virtual АМОбъект ПолучиСообщениеСОтветом(Связь связь, АМОбъект сообщение)
 {
     return(null);
 }
Exemplo n.º 19
0
 public ЦелоеЧисло СложитьУдаленно(Связь Процессор)
 {
     // передать команду с указанием адресов
     return(null);
 }
Exemplo n.º 20
0
        public override void ПолучиСообщение(Связь связь, АМОбъект сообщение)
        {
            string строка = (СтрокаЮникода)сообщение;

            ОтослатьСообщениеВсемИсходящим(строка[номерСимвола].ToString());
        }
Exemplo n.º 21
0
 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 можно предположить что набираемый список именно этот
            }
        }
Exemplo n.º 23
0
        public override void ПолучиСообщение(Связь связь, ПримитивИлиАдрес сообщение)
        {
            var сообщ = new Сообщение();

            ДобавитьСообщение(сообщ);
        }