public Структура(Структура structure) { foreach (КлючИЗначение keyValue in structure) { Вставить((string)keyValue.Ключ, keyValue.Значение); } }
public TCPСоединение ПередатьДанные(string Хост, int Порт, Структура стрДанные) { TCPСоединение Соединение = null; try { Соединение = TCPСоединение.Новый(Хост, Порт); Соединение.ТаймаутОтправки = 5000; Соединение.ОтправитьДвоичныеДанныеАсинхронно(СтруктуруВДвоичныеДанные(стрДанные)); return(Соединение); } catch (Exception e) { Сообщить(ОписаниеОшибки(e)); if (Соединение == Неопределено) { Сообщить(ИмяМодуля + ": Хост недоступен: " + Хост + ":" + Порт); } else { Соединение.Закрыть(); Соединение = null; } } return(Соединение); // ПередатьДанные() }
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(знСтруктура); }
public Структура ИмяЗначение(string Имя = "", string Значение = "") { return(Структура.Новый("Имя, Значение", Имя, Значение)); }
/// <summary> /// Создает структуру по фиксированной структуре /// </summary> /// <param name="fixedStruct">Исходная структура</param> //[ScriptConstructor(Name = "Из фиксированной структуры")] public static Структура Новый(Структура fixedStruct) { return(new Структура(fixedStruct)); }