示例#1
0
        public virtual ПримитивИлиАдрес ПередайСообщениеСОтветом(ПримитивИлиАдрес сообщение) //это поток активности , ответ не предполагется
        {
            try
            {
                if (Канал.СоединениеУстановлено)
                {
                    var сообщение2 = сообщение as Сообщение;
                    var команда    = new Команда("Сообщение", сообщение2)
                    {
                        НомерКоманды = new ЦелоеЧисло()
                        {
                            Значение = 0
                        }
                    };
                    // если поток не занят , то установить что поток занят - одновременно получать и передавать команды нельзя, лучше сделать два встречных соединения
                    Канал.ПередайИсходящееСообщение(команда);

                    var ответ = Канал.ДайВходящее();
                    return(ответ);
                }
            }
            catch (Exception)
            {
                Канал.СоединениеУстановлено = false; //
                //Старт();// не все регистрацию нужно исключить
            }
            return(new Пустота());
        }
示例#2
0
        void ПередачаОтвета()
        {
            var ответ = new Команда("ОтветНаКоманду", ТекущийНомерКоманды, езультатТекущейКоманды);

            Канал.ПередайИсходящееСообщение(ответ);
            состояниеПриема = "ожидание приема";
        }
示例#3
0
        public ПримитивИлиАдрес ПередайКоманду(Команда команда)
        {
            var номерКоманды = new ЦелоеЧисло(0);
            var ком2         = new Команда("Команда", номерКоманды, команда);

            Канал.ПередайИсходящееСообщение(ком2);
            //здесь должно быть ДайВходящееСПрерыванием

            var команда2      = (Команда)Канал.ДайВходящее();
            var номерКоманды2 = команда2.Параметры[0]; // номер команды на которую дается ответ
            var ответ         = команда.Параметры[1];

            return(ответ);
        }
示例#4
0
        public virtual void ПередайСообщение(ПримитивИлиАдрес сообщение) //это поток активности , ответ не предполагется
        {
            try
            {
                //если отправлять сообщения разрешено,то
                // перед запуском отправки нужно проверить занато соединение или нет, можно отдать эту логику активности

                if (Канал.СоединениеУстановлено)
                {
                    var команда = new Команда("Сообщение", сообщение)
                    {
                        НомерКоманды = new ЦелоеЧисло(0)
                    };
                    // если поток не занят , то установить что поток занят - одновременно получать и передавать команды нельзя, лучше сделать два встречных соединения
                    Канал.ПередайИсходящееСообщение(команда);
                    //перейти в ожидание ответа
                    //var ответ = Канал.ДайВходящееСообщение();// отвкт Пустота как подтверждение
                }
            }
            catch (Exception)
            {
                Канал.СоединениеУстановлено = false; //
            }
        }
示例#5
0
 public ПримитивИлиАдрес ОбработатьКомаду(Команда команда) // позволяет удалить обработчики команд "Дай/НаЗначение", но затрудняет запуск команд
 {
     return(ЦелоеНаДиске.ВыполнитьКоманду(команда));       // тупо все пересылается
 }
示例#6
0
        public virtual АМОбъект ВыполнитьКоманду(Команда команда)
        {
            var реакция = еакцииНаКоманды.Find(реакц => реакц.Имя.Значение == команда.Имя.Значение);

            return(реакция.Выполнить(this, команда)); // выполнение на конкретном экземпляре
        }
示例#7
0
        public MethodInfo Инструкция; // сдесь может быть объект типа Действие, хотя Действие это описние действия - рецепт, действием рецепт становиться в момент выполнения и до пояления результата

        public АМОбъект Выполнить(object объект, Команда команда)
        {
            //проверка что данные команды совпадает с описнием или без этого
            return(( АМОбъект)Инструкция.Invoke(объект, команда.Параметры.Список.ToArray()));
        }