public virtual ПримитивИлиАдрес ПередайСообщениеСОтветом(ПримитивИлиАдрес сообщение) //это поток активности , ответ не предполагется { try { if (Канал.СоединениеУстановлено) { var сообщение2 = сообщение as Сообщение; var команда = new Команда("Сообщение", сообщение2) { НомерКоманды = new ЦелоеЧисло() { Значение = 0 } }; // если поток не занят , то установить что поток занят - одновременно получать и передавать команды нельзя, лучше сделать два встречных соединения Канал.ПередайИсходящееСообщение(команда); var ответ = Канал.ДайВходящее(); return(ответ); } } catch (Exception) { Канал.СоединениеУстановлено = false; // //Старт();// не все регистрацию нужно исключить } return(new Пустота()); }
void ПередачаОтвета() { var ответ = new Команда("ОтветНаКоманду", ТекущийНомерКоманды, езультатТекущейКоманды); Канал.ПередайИсходящееСообщение(ответ); состояниеПриема = "ожидание приема"; }
public ПримитивИлиАдрес ПередайКоманду(Команда команда) { var номерКоманды = new ЦелоеЧисло(0); var ком2 = new Команда("Команда", номерКоманды, команда); Канал.ПередайИсходящееСообщение(ком2); //здесь должно быть ДайВходящееСПрерыванием var команда2 = (Команда)Канал.ДайВходящее(); var номерКоманды2 = команда2.Параметры[0]; // номер команды на которую дается ответ var ответ = команда.Параметры[1]; return(ответ); }
public virtual void ПередайСообщение(ПримитивИлиАдрес сообщение) //это поток активности , ответ не предполагется { try { //если отправлять сообщения разрешено,то // перед запуском отправки нужно проверить занато соединение или нет, можно отдать эту логику активности if (Канал.СоединениеУстановлено) { var команда = new Команда("Сообщение", сообщение) { НомерКоманды = new ЦелоеЧисло(0) }; // если поток не занят , то установить что поток занят - одновременно получать и передавать команды нельзя, лучше сделать два встречных соединения Канал.ПередайИсходящееСообщение(команда); //перейти в ожидание ответа //var ответ = Канал.ДайВходящееСообщение();// отвкт Пустота как подтверждение } } catch (Exception) { Канал.СоединениеУстановлено = false; // } }
public ПримитивИлиАдрес ОбработатьКомаду(Команда команда) // позволяет удалить обработчики команд "Дай/НаЗначение", но затрудняет запуск команд { return(ЦелоеНаДиске.ВыполнитьКоманду(команда)); // тупо все пересылается }
public virtual АМОбъект ВыполнитьКоманду(Команда команда) { var реакция = еакцииНаКоманды.Find(реакц => реакц.Имя.Значение == команда.Имя.Значение); return(реакция.Выполнить(this, команда)); // выполнение на конкретном экземпляре }
public MethodInfo Инструкция; // сдесь может быть объект типа Действие, хотя Действие это описние действия - рецепт, действием рецепт становиться в момент выполнения и до пояления результата public АМОбъект Выполнить(object объект, Команда команда) { //проверка что данные команды совпадает с описнием или без этого return(( АМОбъект)Инструкция.Invoke(объект, команда.Параметры.Список.ToArray())); }