예제 #1
0
 private object _быстрыйАдрес; // это может быть адрес в памяти - Постоянный КАНАЛ
 public object ПолучитьБыстрыйАдрес()
 {
     if (_быстрыйАдрес == null)
     {
         _быстрыйАдрес = АдресОбъекта.АдресВКучеПамяти();
     }
     return(_быстрыйАдрес);
 }
예제 #2
0
        public static void ДобавитьПоле(Адрес адресКласса, ГруппаОбъектов поле)
        {
            var класс = (ГруппаОбъектов)адресКласса.АдресВКучеПамяти();

            // проверить что класс это класс
            // что поле это поле
            ((ГруппаОбъектов)класс[2]).Добавить(поле);
        }
예제 #3
0
        public override АМОбъект АдресВКучеПамяти()
        {
            if (АдресАктивностиВКуче == null)
            {
                АдресАктивностиВКуче = (Активность)АдресРОдительскойАктивности.АдресВКучеПамяти();
            }
            var адресВКуче = АдресАктивностиВКуче.ДайСвязьПоНомеру(номер);

            return(адресВКуче);
        }
예제 #4
0
        public АдресУРегистратора ПолучиАдресУРегистратора(Адрес адресРегистратора) // запускается только при создании новой связи перенести в сам регистратор
        {
            var регистратор = ( егистраторАдресов)адресРегистратора.АдресВКучеПамяти();

            Пароль           = Guid.NewGuid();
            АдресСобственный = регистратор.ЗарегистрируйНаСвободныйАдрес(this, Пароль);
            return(СвойАдресУРегистратора);

            //СловарьСобственныхАдресовУРегистраторов[регистратор] = адрес; // плодить адреса у связи не стоит, многосвязей может быть у активности
            //СписокСобственныхАдресов.Add(адрес); // можно просмотреть все адреса и сравнить регистраторв
        }
예제 #5
0
        //сообщения от объектов прямой связи
        // Адрес Объекта прямой связи изменился, необходимо внести изменения в существующую связь
        //объект переехал
        public void ИзменитьАдресПрямойСвязи(Адрес старыйАдрес, Адрес новыйАдрес)
        {
            var стараяСвязь = ПрямыеСвязи.Find(связь => связь.АдресОбъекта == старыйАдрес);

            if (стараяСвязь != null)
            {
                стараяСвязь.АдресОбъекта = новыйАдрес;
            }
            else //ошибка - несущесствующаясвязь
            {
                //передатьсообщение объекту по старому адресу  удалить обратную связь
                dynamic объектПоСтаромуАдресу = старыйАдрес.АдресВКучеПамяти();
                объектПоСтаромуАдресу.УдалитьСвязьИзСпискаОбратныхСвязей(СобственныйАдрес);
            }
        }
예제 #6
0
        //
        public static void СоздайОдностороннююСвязьВПамяти(Адрес АдресИсходящаяАктивность, Адрес адресВходящаяАктивность)
        {
            var исходящаяАктивность = (Активность)АдресИсходящаяАктивность.АдресВКучеПамяти();
            var входящаяАктивность  = (Активность)адресВходящаяАктивность.АдресВКучеПамяти();

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

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

            связьВисходящей.АдресУдаленнойСвязи = адресВоВходящей;
        }