public override АМОбъект ВыполнитьКоманду(Команда команда) { //добавить команду в очередь, если очередь есть if (клиент == null || !клиент.Connected) { var рез = УстановитьСвязь(); // если связь установить не удалось if (рез == false) { return(new СтрокаЮникода("сервер не доступен")); // или запуск метода обработки } } var команда2 = new Команда("ПередайКомандуОбъекту", команда); // команда серверу это связь на стороне приемника команда.СохранисьВ(поток); var результат = АМОбъект.Создать(поток); if (!СохранятьСвязь) { клиент.Close(); клиент = null; } return(результат); }
public АМОбъект Выполнить(Команда команда) // схоже с получи сообщение в активности { ПолучитьКопию(); var рез = АдресВКучеКопияУдаленногоОбъекта.ВыполнитьКоманду(команда); // если это группаадресов, а адреса эти в другом удалееном хранилище, то потребуются запросы // адреса получаемые надо модифицировать добавляя текущий адрес объекта // команда "дайобъектПоиндексу (10)" копия содержит адрес в удалееном хранилище // или в момент получения группы по команде ДайОбъект return(рез); }
public ГруппаОбъектов СписокКоманд() // надо заменить на группу (группу адресов или закрытую группу, группа адресов требует повторных запросов, добавить генерик группу (типизированную) { var команда = new Команда() { Имя = new СтрокаЮникода() { Значение = "ДайКоманды" } }; return((ГруппаОбъектов)Выполнить(команда)); }
// только для хранителя копий (добавить еще версию, время обновления, способ обновления, тип хранителя, степень риска, список рисков // для контроля ресурсов нужно добавить размеры входного и исходящего буфера (для целого цисла нет смысла в большом буфере) // спиок команд к заместителю должен совпадать со списком команд к самому объекту // сценарий его восстановления // востанавливается адрес удаленный , возможно копия , если сервер или сервера не доступен // устаналивается связь ТСП // передается команда ДайОбъектПоИндексу, получается группа адресов // в этой группе ищется адрес по индексу (поиск может проводиться и на сервере надо особо указывать) // получается адрес объекта , снова Команда ДайОбъектПоИндексу // получается конечный объект (например Целое), можно и не получать копию объекта Это всего лишь кэш, где можно получить его значение (возможно устаревшее) // посылается команда к объекту ДайЗначение (хотя Целое это уже примитив) // каждый раз Получая команду от внешнего по отношению к заместителю объекта ДайЗначение надо проходить всю процедуру заново, получать целое и уже его возвращать // здесь адрес уже нужен в форме команды, тогда можно указать последовательность действий, чтобы не скачивать группу адресов // заместитеь можно использовать как шлюз ко всем удаленным объектам с одним IP // т.е. это доступ к целой группе например по индексу и копияудаленного объекта все время разная // правда адреса у всех объектов разные и тогда смысла в адресе нет // это команды к заместителю, хотя можно обратиться к копииУдаленногоОбъекта, к кому напрвлять команды зависит от спосба хранения копии // 1 способ полностью скачать объект и команды к копии, // 2 не качать объект, переправлять все команды к удаленному объекту public АМОбъект Выполнить(Команда команда) { var команда2 = new Команда() { Имя = new СтрокаЮникода() { Значение = "ВыполниКоманду" } }; команда2.Параметры[0] = команда; var рез = ТспСвязь.ВыполнитьКоманду(команда2); //для return(рез); }
// только для хранителя копий (добавить еще версию, время обновления, способ обновления, тип хранителя, степень риска, список рисков // для контроля ресурсов нужно добавить размеры входного и исходящего буфера (для целого цисла нет смысла в большом буфере) // спиок команд к заместителю должен совпадать со списком команд к самому объекту // сценарий его восстановления // востанавливается адрес удаленный , возможно копия , если сервер или сервера не доступен // устаналивается связь ТСП // передается команда ДайОбъектПоИндексу, получается группа адресов // в этой группе ищется адрес по индексу (поиск может проводиться и на сервере надо особо указывать) // получается адрес объекта , снова Команда ДайОбъектПоИндексу // получается конечный объект (например Целое), можно и не получать копию объекта Это всего лишь кэш, где можно получить его значение (возможно устаревшее) // посылается команда к объекту ДайЗначение (хотя Целое это уже примитив) // каждый раз Получая команду от внешнего по отношению к заместителю объекта ДайЗначение надо проходить всю процедуру заново, получать целое и уже его возвращать // здесь адрес уже нужен в форме команды, тогда можно указать последовательность действий, чтобы не скачивать группу адресов // заместитеь можно использовать как шлюз ко всем удаленным объектам с одним IP // т.е. это доступ к целой группе например по индексу и копияудаленного объекта все время разная // правда адреса у всех объектов разные и тогда смысла в адресе нет // это команды к заместителю, хотя можно обратиться к копииУдаленногоОбъекта, к кому напрвлять команды зависит от спосба хранения копии // 1 способ полностью скачать объект и команды к копии, // 2 не качать объект, переправлять все команды к удаленному объекту public ПримитивИлиАдрес Выполнить(Команда команда) { var команда2 = new Команда() { Имя = new Строка() { Значение = "ВыполниКоманду" } }; команда2.Параметры[0] = команда; var рез = ТспСвязь.ВыполнитьКоманду(команда2); //для return(рез); }
public void ПолучитьКопию() { var адрес = new Команда("ДайОбъект", new АдресВХранилище() { НомерВХранилище = 10 }); // команда Хранилищу var команда2 = new Команда("ПередайКомандуОбъекту", ПолныйАдресОбъекта); // команда серверу это связь на стороне приемника var команда = new Команда("ПередатьИПолучить", команда2); // команда ТСПСвязи клиенту это и есть адрес связь на стороне передадчика АдресВКучеКопияУдаленногоОбъекта = ТспСвязь.ВыполнитьКоманду(команда); // создается новый объект и его адрес помещается в поле, старый объект в мусорку var старыйАдресВХрнилище = АдресВХранилище_КопииУдаленногоОбъекта; // что-то надо с ним сделать, пометить на удаление АдресВХранилище_КопииУдаленногоОбъекта = Хранилище.Добавить(АдресВКучеКопияУдаленногоОбъекта); // добавляется в конец, старый адрес забывается АдресВКучеКопияУдаленногоОбъекта = ТспСвязь.ВыполнитьКоманду(new Команда("ДайОбъект")); //это для получения самого объекта примитива группы АдресВКучеКопияУдаленногоОбъекта.СобственныйАдресПримитива = ПолныйАдресОбъекта; // обращение по команде Выполнить(команда) должно содержать // обработка Копии объекта // если Копия это адрес, то его надо дополнить адресом ПолнымАдресомОбъекта }