вторник, 10 мая 2022 г.

Класс для логирования программы (RichTextBox), версия 2

Первая версия класса расположена по web-ссылке: RichTextBox_LoggedClass

Во вторую версию одноименного класса добавлено:

1. Логирование отладочного текста (*.log_dbg), по умолчанию оранжевого цвета (*.col_dbg). При логировании строки в компоненте RichTextBox не используется (timestamp( )) в начале добавляемого текста и не используются символы перевода строки ("\r\n") в конце текста.

2. Добавление текста в компонент RichTextBox выполнена через *.InvokeRequired, позволяющего работать из другого потока;

3. Также пространство имен в классе "Framework". Исключено имя разрабатываемого проекта (projectname.Framework);
Остальные методы работы остались без изменений:

Пример использования класса:
---------------------
...
using Framework;
...
class Class_Name {
    RichTextBoxLogClass log;
    public Class_Name() {
        log = new RichTextBoxLogClass(rtbLog);
    }
    
    ...
    public void button_click(...) {
        log.log_msg("Начало выполнения операции.");
        log.log_err("Ошибка выполнения операции");
        log.log_tx("ASCII CMD SEND TEXT");
        log.log_rx("ASCII CMD RECIVED TEXT");
        log.log_tx(new byte [] {0x01, 0x20, 0x44, 0x55});
        log.log_rx(new byte [] {0x01, 0x20, 0x44, 0x55});
        log.log_dbg("dbg chars " + BitConverter.ToString(new byte[] {0x01, 0x02, 0x03 }).Replace("-", " ");   
    }
}

Настраиваемые параметры:
------------------------
    log.col_msg - цвет текста сообщения, по умолчанию, Color.Gray;
    log.col_err - цвет текста сообщения об ошибке, по умолчанию, Color.Black;
    log.col_tx - цвет текста отправляемых данных, по умолчанию, Color.Red;
    log.col_rx - цвет текста принимаемых данных, по умолчанию, Color.Blue;
    log.log_dbg - цвет текста отладочного сообщения, по умолчанию, Color.Orange;
    log.timestampFormat - формат вывода времени, например, "HH:mm:ss.ff";
    log.bytes_in_line - количество байт в строке, например, 16;
    log.hex_to_ascii_space - расст между hex и ascii строк, напр. 8;

среда, 4 мая 2022 г.

Сохранение настроек программы в xml-файл

        ...
        string param1;
        string param2;
        string param3;
        bool flag1;
        ...

static class SaveAppSetting
{

    public static string fname_xml = @"\appSetting.xml";
    
    static XmlDocument doc;
    
    static public void LoadXmlAppSetting()
    {
        if (System.IO.File.Exists(fname_xml))
        {
            doc = new XmlDocument();
        
    doc.Load(fname_xml);
        
        
    param1 = getStringValue("/setting/equipment/param1");
            param2 = getStringValue("/setting/equipment/param2");
            param3 = getStringValue("/setting/equipment/param3");
         
            flag1 = getBoolValue("/setting/dbg/log_7e1_codeString");
        }
    }

    static public void SaveXmlAppSetting()
    {
        string xml_content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
                             "<setting>";
        xml_content += "<equipment>";
        xml_content += "<
param1>" + param1 + "</param1>";
        xml_content += "<param2>" + param2 + "</param2>";
        xml_content += "<param3>" + param3 + "</param3>";

        xml_content += "<flag1>" + flag1.ToString() + "</flag1>";
        xml_content += "</equipment>";

        xml_content += "</setting>";
        try
        {
            doc = new XmlDocument();
            doc.LoadXml(xml_content);
            doc.Save(fname_xml);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    static private string getStringValue(string xml_path, string default_value = "-")
    {
        string ret_value = "";
        try
        {
            ret_value = doc.SelectSingleNode(xml_path).InnerText.Trim();
        }
        catch
        {
            ret_value = default_value;
        }
          
        return ret_value;
    }
    
    static private bool getBoolValue(string xml_path, bool default_value = false)
    {
        bool ret_value = false;
        
        try
        {
            ret_value = Convert.ToBoolean(doc.SelectSingleNode(xml_path).
                                                                 InnerText.Trim());
        }
        catch
        {
            ret_value = default_value;
        }
        
        return ret_value;
    }
}

Docker. Первые контейнеры

Источник:  php.dragomano.ru Структура каталогов: ~/develop/web/project/                  nginx/      - сервис web-сервера                php...