Ejemplo n.º 1
0
        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());
            }
        }
    private recorder_CAMS GetCamPlayerByID(string CamID)
    {
        recorder_CAMS camData = null;

        foreach (recorder_CAMS _camData in RECORDER_CAMS)
        {
            if (_camData.camName.Equals(CamID))
            {
                //EVENT_LOG.WriteEntry("VLC find cam - " + CamID);
                camData = _camData;
            }
            ;
        }

        return(camData);
    }
    private void Process(HttpListenerContext context)
    {
        context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
        context.Response.Headers.Add("Access-Control-Allow-Methods", "POST, GET");
        context.Response.StatusCode = (int)HttpStatusCode.NotFound;

        string filename     = context.Request.Url.AbsolutePath;
        string localpath    = context.Request.Url.LocalPath;
        string query        = context.Request.Url.Query;
        string pathandquery = context.Request.Url.PathAndQuery;

        if (localpath.IndexOf("camcommand") != -1)
        {
            string _cam    = "";
            string _action = "";
            string _uid    = "";

            string[] commands = query.Split('&');

            foreach (string command in commands)
            {
                if (command.IndexOf("cam") != -1)
                {
                    _cam = command.Substring(command.IndexOf("cam") + 4);
                }
                else if (command.IndexOf("action") != -1)
                {
                    _action = command.Substring(command.IndexOf("action") + 7);
                }
                else if (command.IndexOf("uid") != -1)
                {
                    _uid = command.Substring(command.IndexOf("uid") + 4);
                }
            }

            EVENT_LOG.WriteEntry("Cam action - " + _action);

            if (_action.Equals(CAM_FUNC_REC))
            {
                try
                {
                    var destination = Path.Combine(REC_FOLDER, "Rec_" + _uid + ".mpg");
                    EVENT_LOG.WriteEntry("Cam - " + _cam);
                    recorder_CAMS camData = GetCamPlayerByID(_cam);
                    EVENT_LOG.WriteEntry("camData - " + camData);

                    if (camData != null)
                    {
                        CameraJSONAnswer reply = new CameraJSONAnswer();
                        reply.CamID     = _cam;
                        reply.CamAction = _action;

                        EVENT_LOG.WriteEntry("Cam action - " + destination);
                        if (camData.CamClient.cam_online())
                        {
                            camData.CamClient.rec(_uid);
                            camData.nowRec = destination;
                            context.Response.ContentType = "application/json";
                            reply.CamStatus = "Camera - Online, start recording stream to file";
                        }
                        else
                        {
                            reply.CamStatus = "Camera - OffLine, please check camera connection";
                        }
                        byte[] bytes = System.Text.Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(reply, Formatting.Indented));
                        context.Response.StatusCode = (int)HttpStatusCode.OK;
                        context.Response.OutputStream.Write(bytes, 0, bytes.Length);
                    }
                }
                catch (Exception ex)
                {
                    EVENT_LOG.WriteEntry("Ошибка VLC - " + ex.ToString());
                }
            }
            else if (_action.Equals(CAM_FUNC_STOP))
            {
                recorder_CAMS camData = GetCamPlayerByID(_cam);
                camData.CamClient.stop_rec(_uid);
                context.Response.StatusCode = (int)HttpStatusCode.OK;
            }
            else
            {
                context.Response.StatusCode = (int)HttpStatusCode.NotFound;
            }

            context.Response.OutputStream.Close();
        }
        else if (localpath.IndexOf("servercommand") != -1)
        {
            string[] commands = query.Split('&');

            foreach (string command in commands)
            {
                if (command.IndexOf("status") != -1)
                {
                    context.Response.StatusCode = (int)HttpStatusCode.OK;
                }
            }

            context.Response.OutputStream.Close();
        }
        else
        {
            filename = filename.Substring(1);

            if (string.IsNullOrEmpty(filename))
            {
                foreach (string indexFile in _indexFiles)
                {
                    if (File.Exists(Path.Combine(CURRENT_INT_DIR, indexFile)))
                    {
                        filename = indexFile;
                        break;
                    }
                }
            }
            filename = Path.Combine(CURRENT_INT_DIR, filename);
            if (File.Exists(filename))
            {
                try
                {
                    context.Response.StatusCode = (int)HttpStatusCode.OK;

                    Stream input = new FileStream(filename, FileMode.Open);

                    //Adding permanent http response headers
                    string mime;
                    context.Response.ContentType     = _mimeTypeMappings.TryGetValue(Path.GetExtension(filename), out mime) ? mime : "application/octet-stream";
                    context.Response.ContentLength64 = input.Length;
                    context.Response.AddHeader("Date", DateTime.Now.ToString("r"));
                    context.Response.AddHeader("Last-Modified", File.GetLastWriteTime(filename).ToString("r"));

                    byte[] buffer = new byte[1024 * 16];
                    int    nbytes;
                    while ((nbytes = input.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        context.Response.OutputStream.Write(buffer, 0, nbytes);
                    }
                    input.Close();

                    //context.Response.OutputStream.Flush();
                    context.Response.OutputStream.FlushAsync();
                }
                catch (Exception ex)
                {
                    EVENT_LOG.WriteEntry("Error read input - " + ex.ToString());
                    context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                }
            }
        };
    }