private object _быстрыйАдрес; // это может быть адрес в памяти - Постоянный КАНАЛ public object ПолучитьБыстрыйАдрес() { if (_быстрыйАдрес == null) { _быстрыйАдрес = АдресОбъекта.АдресВКучеПамяти(); } return(_быстрыйАдрес); }
public static void ДобавитьПоле(Адрес адресКласса, ГруппаОбъектов поле) { var класс = (ГруппаОбъектов)адресКласса.АдресВКучеПамяти(); // проверить что класс это класс // что поле это поле ((ГруппаОбъектов)класс[2]).Добавить(поле); }
public override АМОбъект АдресВКучеПамяти() { if (АдресАктивностиВКуче == null) { АдресАктивностиВКуче = (Активность)АдресРОдительскойАктивности.АдресВКучеПамяти(); } var адресВКуче = АдресАктивностиВКуче.ДайСвязьПоНомеру(номер); return(адресВКуче); }
public АдресУРегистратора ПолучиАдресУРегистратора(Адрес адресРегистратора) // запускается только при создании новой связи перенести в сам регистратор { var регистратор = ( егистраторАдресов)адресРегистратора.АдресВКучеПамяти(); Пароль = Guid.NewGuid(); АдресСобственный = регистратор.ЗарегистрируйНаСвободныйАдрес(this, Пароль); return(СвойАдресУРегистратора); //СловарьСобственныхАдресовУРегистраторов[регистратор] = адрес; // плодить адреса у связи не стоит, многосвязей может быть у активности //СписокСобственныхАдресов.Add(адрес); // можно просмотреть все адреса и сравнить регистраторв }
//сообщения от объектов прямой связи // Адрес Объекта прямой связи изменился, необходимо внести изменения в существующую связь //объект переехал public void ИзменитьАдресПрямойСвязи(Адрес старыйАдрес, Адрес новыйАдрес) { var стараяСвязь = ПрямыеСвязи.Find(связь => связь.АдресОбъекта == старыйАдрес); if (стараяСвязь != null) { стараяСвязь.АдресОбъекта = новыйАдрес; } else //ошибка - несущесствующаясвязь { //передатьсообщение объекту по старому адресу удалить обратную связь dynamic объектПоСтаромуАдресу = старыйАдрес.АдресВКучеПамяти(); объектПоСтаромуАдресу.УдалитьСвязьИзСпискаОбратныхСвязей(СобственныйАдрес); } }
// public static void СоздайОдностороннююСвязьВПамяти(Адрес АдресИсходящаяАктивность, Адрес адресВходящаяАктивность) { var исходящаяАктивность = (Активность)АдресИсходящаяАктивность.АдресВКучеПамяти(); var входящаяАктивность = (Активность)адресВходящаяАктивность.АдресВКучеПамяти(); // в исходящей создается клиент var связьВисходящей = new Связь() { ТипСвязи = "исходящая", ИмяСвязи = "передатчик", }; var адресВИсходящей = исходящаяАктивность.ДобавьСвязь(связьВисходящей); // это относительныйАдрес связи относительно активности // созлается сервер var связьВоВходящей = new Связь() { ИмяСвязи = "приемник", ТипСвязи = "входящая", АдресУдаленнойСвязи = адресВИсходящей }; var адресВоВходящей = входящаяАктивность.ДобавьСвязь(связьВоВходящей); связьВисходящей.АдресУдаленнойСвязи = адресВоВходящей; }