private void CreateRecData()
        {
            RecorderSetup RecSetup = new RecorderSetup();

            RecSetup.recorderURL        = "";
            RecSetup.recorderURLPort    = 8085;
            RecSetup.recorderLogin      = "******";
            RecSetup.recorderPassword   = "******";
            RecSetup.recorderArchiveDir = @"F:\cam_arch";

            File.WriteAllText(@RECORDER_DATA_FILE, JsonConvert.SerializeObject(RecSetup, Formatting.Indented));
        }
    private void Initialize(int port, RecorderSetup RECORDER_DATA, recorder_CAMS[] RECORDER_CAMS, EventLog EVENT_LOG, string CURRENT_DIR, string CURRENT_INT_DIR)
    {
        this.CURRENT_DIR     = CURRENT_DIR;
        this.CURRENT_INT_DIR = CURRENT_INT_DIR;
        this.EVENT_LOG       = EVENT_LOG;
        this.RECORDER_CAMS   = RECORDER_CAMS;
        this.REC_FOLDER      = RECORDER_DATA.recorderArchiveDir;
        this.RECORDER_LIBDIR = new DirectoryInfo(Path.Combine(CURRENT_DIR, "libvlc", IntPtr.Size == 4 ? "win-x86" : "win-x64"));

        this._port = port;

        _serverThread = new Thread(this.Listen);
        _serverThread.Start();
    }
        private void GetData()
        {
            try
            {
                CamsSetup[] cams = ST.GetCamsArray();
                RECORDER_DATA = ST.GetRecorderSetup();

                string log = "";
                log += "------------------------------------------\n";
                log += "данные регистратора\n";
                log += "------------------------------------------\n";
                log += "Архив - " + RECORDER_DATA.recorderArchiveDir + "\n";
                log += "Адрес веб сервера - " + RECORDER_DATA.recorderURL + "\n";
                log += "Порт веб сервера - " + RECORDER_DATA.recorderURLPort + "\n";

                if (cams.Length > 0)
                {
                    log += "------------------------------------------\n";
                    log += "данные по камерам\n";
                    log += "------------------------------------------\n";

                    foreach (CamsSetup cam in cams)
                    {
                        log += "Камера - " + cam.CamName + ", адрес: " + cam.CamIP + ", идентификатор: " + cam.CamID + "\nОписание: " + cam.CamDescription + "\n\n";
                    }
                }

                EVENT_LOG.WriteEntry(log);

                RECORDER_CAMS = new recorder_CAMS[cams.Length];
                for (int i = 0; i < cams.Length; i++)
                {
                    recorder_CAMS _cam = new recorder_CAMS();
                    _cam.camName        = cams[i].CamName;
                    _cam.camIP          = cams[i].CamIP;
                    _cam.camDescription = cams[i].CamDescription;
                    _cam.camLogin       = cams[i].CamLogin;
                    _cam.camPassword    = cams[i].CamPassword;
                    Uri    URL_data      = new Uri(cams[i].CamIP);
                    string camIPwithAuth = URL_data.Scheme + "://" + _cam.camLogin + ":" + _cam.camPassword + "@" + URL_data.Host + URL_data.PathAndQuery;
                    _cam.CamClient   = new rtsp_client(camIPwithAuth, 0, RECORDER_DATA.recorderArchiveDir, EVENT_LOG, cams[i].CamName, cams[i].camAutoRecconect);
                    RECORDER_CAMS[i] = _cam;
                }
            }
            catch (Exception ex)
            {
                EVENT_LOG.WriteEntry("Ошибка чтения настроек - " + ex.ToString());
            }
        }
    public SimpleHTTPServer(RecorderSetup RECORDER_DATA, recorder_CAMS[] RECORDER_CAMS, EventLog EVENT_LOG, string CURRENT_DIR, string CURRENT_INT_DIR)
    {
        int port = RECORDER_DATA.recorderURLPort;

        if (port <= 0)
        {
            //get an empty port
            TcpListener l = new TcpListener(IPAddress.Loopback, 0);
            l.Start();
            port = ((IPEndPoint)l.LocalEndpoint).Port;
            l.Stop();
            EVENT_LOG.WriteEntry("Не удалось получить порт - " + RECORDER_DATA.recorderURLPort + ", использован порт - " + port);
        }

        this.Initialize(port, RECORDER_DATA, RECORDER_CAMS, EVENT_LOG, CURRENT_DIR, CURRENT_INT_DIR);
    }
        //Приватные функции

        /*private void DB_insert_RecorderSetup(string Recorder_Data, bool async = false)
         * {
         *  var Collection = DB.GetCollection<BsonDocument>("RecorderSetup");
         *  var doc = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(Recorder_Data);
         *  if (async)
         *  {
         *      Collection.InsertOneAsync(doc);
         *  }
         *  else
         *  {
         *      Collection.InsertOne(doc);
         *  }
         * }
         * private void DB_insert_CameraSetup(string Cam_Data, bool async = false)
         * {
         *  var Collection = DB.GetCollection<BsonDocument>("CamsSetup");
         *  var doc = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(Cam_Data);
         *  if (async)
         *  {
         *      Collection.InsertOneAsync(doc);
         *  }
         *  else
         *  {
         *      Collection.InsertOne(doc);
         *  }
         * }*/
        private bool RecDataChecked()
        {
            bool   check = false;
            string json  = File.ReadAllText(RECORDER_DATA_FILE);

            try
            {
                RecorderSetup RecSetup = JsonConvert.DeserializeObject <RecorderSetup>(json);
                if (RecSetup.recorderURLPort != null && !RecSetup.recorderArchiveDir.Equals(""))
                {
                    check = true;
                }
            }
            catch (Exception Error)
            {
                //TODO log
            }

            return(check);
        }
        static void Main(string[] args)
        {
            db = new LiteDatabase(@PROGRAM_DIR + @"\data.dat");
            IEnumerable <string> collections = db.GetCollectionNames();
            int c = collections.Count();

            if (c == 0)
            {
                var _RecorderSetup = db.GetCollection <RecorderSetup>("RecorderSetup");
                // Create unique index in SetupName field
                _RecorderSetup.EnsureIndex(x => x.SetupName, true);

                var set_recorderURL = new RecorderSetup
                {
                    SetupName      = "recorderURL",
                    SetupValstring = ""
                };
                _RecorderSetup.Insert(set_recorderURL);
                var set_recorderURLPort = new RecorderSetup
                {
                    SetupName   = "recorderURLPort",
                    SetupValint = 8085
                };
                _RecorderSetup.Insert(set_recorderURLPort);
                var set_recorderLogin = new RecorderSetup
                {
                    SetupName      = "recorderLogin",
                    SetupValstring = "admin"
                };
                _RecorderSetup.Insert(set_recorderLogin);
                var set_recorderPassword = new RecorderSetup
                {
                    SetupName      = "recorderPassword",
                    SetupValstring = ""
                };
                _RecorderSetup.Insert(set_recorderPassword);
                var set_recorderArchiveDir = new RecorderSetup
                {
                    SetupName      = "recorderArchiveDir",
                    SetupValstring = @"F:\cam_arch"
                };
                _RecorderSetup.Insert(set_recorderArchiveDir);

                //Потом удалить нахуй!!! только для теста
                var _CamsSetup = db.GetCollection <CamsSetup>("CamsSetup");
                // Create unique index in SetupName field
                _CamsSetup.EnsureIndex(x => x.CamID, true);
                var set_Cam = new CamsSetup
                {
                    CamID            = Guid.NewGuid().ToString(),
                    CamName          = "Camera1",
                    CamIP            = "rtsp://192.168.1.16",
                    CamDescription   = "Camera1 - подвал",
                    CamLogin         = "******",
                    CamPassword      = "******",
                    camAutoRecconect = false
                };
                _CamsSetup.Insert(set_Cam);
                set_Cam = new CamsSetup
                {
                    CamID            = Guid.NewGuid().ToString(),
                    CamName          = "Camera2",
                    CamIP            = "rtsp://192.168.1.17",
                    CamDescription   = "Camera2 - подвал",
                    CamLogin         = "******",
                    CamPassword      = "******",
                    camAutoRecconect = true
                };
                _CamsSetup.Insert(set_Cam);
                //Потом удалить нахуй!!! только для теста
            }
            else
            {
                Console.WriteLine("Данные регистратора");
                Console.WriteLine("----------------------------------------------------------");
                var RecorderSetup = db.GetCollection <RecorderSetup>("RecorderSetup");
                var query         = RecorderSetup.FindAll();
                foreach (var setup in query)
                {
                    switch (setup.SetupName)
                    {
                    case "recorderURL":
                        Console.WriteLine("recorderURL - " + setup.SetupValstring);
                        break;

                    case "recorderURLPort":
                        Console.WriteLine("recorderURLPort - " + setup.SetupValint);
                        break;

                    case "recorderLogin":
                        Console.WriteLine("recorderLogin - " + setup.SetupValstring);
                        break;

                    case "recorderPassword":
                        Console.WriteLine("recorderPassword - " + setup.SetupValstring);
                        break;

                    case "recorderArchiveDir":
                        Console.WriteLine("recorderArchiveDir - " + setup.SetupValstring);
                        break;

                    default:
                        break;
                    }
                }

                Console.WriteLine("----------------------------------------------------------");
                Console.WriteLine("Данные камер");
                Console.WriteLine("----------------------------------------------------------");
                var CamsSetup = db.GetCollection <CamsSetup>("CamsSetup");
                var cam_query = CamsSetup.FindAll();
                int i         = 0;

                foreach (var _cam in cam_query)
                {
                    Console.WriteLine("Камера " + (i + 1));
                    Console.WriteLine("CamUID - " + _cam.CamID);
                    Console.WriteLine("CamName - " + _cam.CamName);
                    Console.WriteLine("CamIP - " + _cam.CamIP);
                    Console.WriteLine("CamDescription - " + _cam.CamDescription);
                    Console.WriteLine("CamLogin - " + _cam.CamLogin);
                    Console.WriteLine("CamPassword - " + _cam.CamPassword);
                    Console.WriteLine("camAutoRecconect - " + _cam.camAutoRecconect);
                    Console.WriteLine("----------------------------------------------------------");
                    i++;
                }
            }

            String readline = null;

            while (readline == null)
            {
                readline = Console.ReadLine();
                if (readline == null)
                {
                    Thread.Sleep(500);
                }
            }
        }