Beispiel #1
0
 public Структура(Структура structure)
 {
     foreach (КлючИЗначение keyValue in structure)
     {
         Вставить((string)keyValue.Ключ, keyValue.Значение);
     }
 }
Beispiel #2
0
        public TCPСоединение ПередатьДанные(string Хост, int Порт, Структура стрДанные)
        {
            TCPСоединение Соединение = null;

            try
            {
                Соединение = TCPСоединение.Новый(Хост, Порт);
                Соединение.ТаймаутОтправки = 5000;
                Соединение.ОтправитьДвоичныеДанныеАсинхронно(СтруктуруВДвоичныеДанные(стрДанные));
                return(Соединение);
            }
            catch (Exception e)
            {
                Сообщить(ОписаниеОшибки(e));
                if (Соединение == Неопределено)
                {
                    Сообщить(ИмяМодуля + ": Хост недоступен: " + Хост + ":" + Порт);
                }
                else
                {
                    Соединение.Закрыть();
                    Соединение = null;
                }
            }
            return(Соединение); // ПередатьДанные()
        }
Beispiel #3
0
        public object ДвоичныеДанныеВСтруктуру(object Данные, object знСтруктура = null)
        {
            БуферДвоичныхДанных бдДанные;
            long рдДанные;

            if (Данные is ДвоичныеДанные)
            {
                ДвоичныеДанные дд = Данные as ДвоичныеДанные;
                рдДанные = дд.азмер();
                if (рдДанные == 0)
                {
                    return(null);
                }
                бдДанные = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(дд);
            }
            else if (Данные is БуферДвоичныхДанных)
            {
                бдДанные = Данные as БуферДвоичныхДанных;
                рдДанные = бдДанные.азмер;
            }
            else
            {
                return(null);
            }

            var Позиция = 0;

            if (знСтруктура is null)
            {
                знСтруктура = Структура.Новый();
            }

            while (Позиция < рдДанные - 1)
            {
                var рдКлюч     = бдДанные.ПрочитатьЦелое16(Позиция);
                var рдЗначение = бдДанные.ПрочитатьЦелое32(Позиция + 2);

                if (рдКлюч + рдЗначение > рдДанные)  // Это не структура
                {
                    return(null);
                }

                var Ключ      = ПолучитьСтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(бдДанные.Прочитать(Позиция + 6, рдКлюч)));
                var бЗначение = бдДанные.Прочитать(Позиция + 6 + рдКлюч, рдЗначение);
                Позиция = Позиция + 6 + рдКлюч + рдЗначение;

                object Значение;

                var Л = Лев(Ключ, 1);
                if (Л == "*")
                {
                    Ключ     = Сред(Ключ, 2);
                    Значение = ДвоичныеДанныеВСтруктуру(бЗначение, Структура.Новый());
                }
                else if (Л == "&")
                {
                    Ключ     = Сред(Ключ, 2);
                    Значение = ДвоичныеДанныеВСтруктуру(бЗначение, Соответствие.Новый());
                }
                else if (Л == "$")
                {
                    Ключ     = Сред(Ключ, 2);
                    Значение = ДвоичныеДанныеВСтруктуру(бЗначение, Массив.Новый());
                }
                else if (Л == "#")
                {
                    Ключ     = Сред(Ключ, 2);
                    Значение = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(бЗначение);
                }
                else if (Л == "^")
                {
                    Ключ     = Сред(Ключ, 2);
                    Значение = null;
                }
                else
                {
                    Значение = ПолучитьСтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(бЗначение));
                    if (Л == "!")
                    {
                        Ключ     = Сред(Ключ, 2);
                        Значение = Число(Значение);
                    }
                }
                if (Ключ == "")
                {
                    (знСтруктура as Массив).Добавить(Значение);
                }
                else
                {
                    (знСтруктура as Структура).Вставить(Ключ, Значение);
                }
            }
            return(знСтруктура);
        }
Beispiel #4
0
 public Структура ИмяЗначение(string Имя = "", string Значение = "")
 {
     return(Структура.Новый("Имя, Значение", Имя, Значение));
 }
Beispiel #5
0
 /// <summary>
 /// Создает структуру по фиксированной структуре
 /// </summary>
 /// <param name="fixedStruct">Исходная структура</param>
 //[ScriptConstructor(Name = "Из фиксированной структуры")]
 public static Структура Новый(Структура fixedStruct)
 {
     return(new Структура(fixedStruct));
 }