Exemplo n.º 1
0
        // 创建 SELECT 命令
        protected override CommandDefine ParseSelectCommand <T>(DbQueryableInfo_Select <T> qQuery, int indent = 0)
        {
            // 说明:
            // 1.OFFSET 前必须要有 'ORDER BY',即 'Skip' 子句前必须使用 'OrderBy' 子句
            // 2.在有统计函数的<MAX,MIN...>情况下,如果有 'Distinct' 'GroupBy' 'Skip' 'Take' 子句,则需要使用嵌套查询
            // 3.'Any' 子句将翻译成 IF EXISTS...
            // 4.分组再分页时需要使用嵌套查询,此时子查询不需要 'OrderBy' 子句,但最外层则需要
            // 5.'Skip' 'Take' 子句视为语义结束符,在其之后的子句将使用嵌套查询

            bool willNest      = qQuery.HaveDistinct || qQuery.GroupBy != null || qQuery.Skip > 0 || qQuery.Take > 0;
            bool useStatis     = qQuery.Statis != null;
            bool groupByPaging = qQuery.GroupBy != null && qQuery.Skip > 0;          // 分组分页
            bool useOrderBy    = (!useStatis || qQuery.Skip > 0) && !qQuery.HaveAny; // 没有统计函数或者使用 'Skip' 子句,则解析OrderBy

            ExpressionVisitorBase visitor = null;
            TableAliasCache       aliases = this.PrepareAlias <T>(qQuery);
            string statName = string.Empty;

            CommandDefine_Select sc = new CommandDefine_Select(this.EscCharLeft, this.EscCharRight, aliases);
            SqlBuilder           jf = sc.JoinFragment;
            SqlBuilder           wf = sc.WhereFragment;

            if (groupByPaging)
            {
                indent = indent + 1;
            }
            jf.Indent = indent;

            #region 嵌套查询

            if (useStatis && willNest)
            {
                // SELECT
                jf.Append("SELECT ");
                jf.AppendNewLine();

                // SELECT COUNT(1)
                visitor = new StatisExpressionVisitor(this, aliases, qQuery.Statis, qQuery.GroupBy, "t0");
                visitor.Write(jf);
                statName = (visitor as StatisExpressionVisitor).ColumnName;
                sc.AddNavigation(visitor.Navigations);

                // SELECT COUNT(1) FROM
                jf.AppendNewLine();
                jf.Append("FROM ( ");

                indent   += 1;
                jf.Indent = indent;
            }

            #endregion

            // SELECT 子句
            if (jf.Indent > 0)
            {
                jf.AppendNewLine();
            }

            if (qQuery.HaveAny)
            {
                jf.Append("IF EXISTS(");
                indent   += 1;
                jf.Indent = indent;
                jf.AppendNewLine();
            }

            jf.Append("SELECT ");

            if (useStatis && !willNest)
            {
                // 如果有统计函数,并且不是嵌套的话,则直接使用SELECT <MAX,MIN...>,不需要解析选择的字段
                jf.AppendNewLine();
                visitor = new StatisExpressionVisitor(this, aliases, qQuery.Statis, qQuery.GroupBy);
                visitor.Write(jf);
                sc.AddNavigation(visitor.Navigations);
            }
            else
            {
                // DISTINCT 子句
                if (qQuery.HaveDistinct)
                {
                    jf.Append("DISTINCT ");
                }

                // TOP 子句
                if (qQuery.Take > 0 && qQuery.Skip == 0)
                {
                    jf.AppendFormat("TOP({0})", qQuery.Take);
                }

                // Any
                if (qQuery.HaveAny)
                {
                    jf.Append("TOP 1 1");
                }

                #region  择字段

                if (!qQuery.HaveAny)
                {
                    // SELECT 范围
                    visitor = new ColumnExpressionVisitor(this, aliases, qQuery.Expression, qQuery.GroupBy);
                    visitor.Write(jf);

                    sc.Columns        = (visitor as ColumnExpressionVisitor).Columns;
                    sc.NavDescriptors = (visitor as ColumnExpressionVisitor).NavDescriptors;
                    sc.AddNavigation(visitor.Navigations);

                    // 如果有统计,选择列中还要追加统计的列
                    if (useStatis && willNest)
                    {
                        string columnName = statName;
                        if (!string.IsNullOrEmpty(columnName) && !sc.Columns.ContainsKey(columnName))
                        {
                            if (sc.Columns.Count > 0)
                            {
                                jf.Append(",");
                            }
                            visitor = new ColumnExpressionVisitor(this, aliases, qQuery.Statis, qQuery.GroupBy, true);
                            visitor.Write(jf);

                            sc.Columns.Add(columnName, new Column {
                                Name = columnName, Duplicate = 1
                            });
                            sc.AddNavigation(visitor.Navigations);
                        }
                    }

                    // 如果分组后再分页,此时需要在原先的选择字段上再加上 'OrderBy' 子句指定的字段,外层的分页时需要用到这些排序字段
                    if (qQuery.OrderBy.Count > 0 && useOrderBy && groupByPaging)
                    {
                        if (sc.Columns.Count > 0)
                        {
                            jf.Append(",");
                        }
                        for (int i = 0; i < qQuery.OrderBy.Count; i++)
                        {
                            visitor = new ColumnExpressionVisitor(this, aliases, qQuery.OrderBy[i], qQuery.GroupBy, true);
                            visitor.Write(jf);

                            sc.AddNavigation(visitor.Navigations);
                            if (i < qQuery.OrderBy.Count - 1)
                            {
                                jf.AppendNewLine(",");
                            }
                        }
                    }
                }

                #endregion
            }

            // FROM 子句
            jf.AppendNewLine();
            jf.Append("FROM ");
            if (qQuery.Subquery != null)
            {
                // 子查询
                jf.Append("(");
                CommandDefine define = this.ParseSelectCommand <T>(qQuery.Subquery as DbQueryableInfo_Select <T>, indent + 1);
                jf.Append(define.CommandText);
                jf.AppendNewLine();
                jf.Append(")");
            }
            else
            {
                jf.AppendMember(TypeRuntimeInfoCache.GetRuntimeInfo(qQuery.FromType).TableName);
            }
            jf.Append(" t0 ");
            if (!string.IsNullOrEmpty(DbQueryProvider.NOLOCK))
            {
                jf.Append(DbQueryProvider.NOLOCK);
            }

            // LEFT<INNER> JOIN 子句
            visitor = new JoinExpressionVisitor(this, aliases, qQuery.Join);
            visitor.Write(jf);

            wf.Indent = jf.Indent;

            // WHERE 子句
            visitor = new WhereExpressionVisitor(this, aliases, qQuery.Where);
            visitor.Write(wf);
            sc.AddNavigation(visitor.Navigations);

            // GROUP BY 子句
            visitor = new GroupByExpressionVisitor(this, aliases, qQuery.GroupBy);
            visitor.Write(wf);
            sc.AddNavigation(visitor.Navigations);

            // HAVING 子句
            visitor = new HavingExpressionVisitor(this, aliases, qQuery.Having, qQuery.GroupBy);
            visitor.Write(wf);
            sc.AddNavigation(visitor.Navigations);

            // ORDER 子句
            if (qQuery.OrderBy.Count > 0 && useOrderBy && !groupByPaging)
            {
                visitor = new OrderByExpressionVisitor(this, aliases, qQuery.OrderBy, qQuery.GroupBy);
                visitor.Write(wf);
                sc.AddNavigation(visitor.Navigations);
            }

            #region 分页查询

            if (qQuery.Skip > 0 && !groupByPaging)
            {
                if (qQuery.OrderBy.Count == 0)
                {
                    throw new XfwException("The method 'OrderBy' must be called before the method 'Skip'.");
                }
                wf.AppendNewLine();
                wf.Append("OFFSET ");
                wf.Append(qQuery.Skip);
                wf.Append(" ROWS");

                if (qQuery.Take > 0)
                {
                    wf.Append(" FETCH NEXT ");
                    wf.Append(qQuery.Take);
                    wf.Append(" ROWS ONLY ");
                }
            }

            #endregion

            #region 嵌套查询

            if (useStatis && willNest)
            {
                string inner = sc.CommandText;
                indent   -= 1;
                jf.Indent = indent;
                jf.AppendNewLine();
                jf.Append(" ) t0");
            }

            #endregion

            #region 分组分页

            if (groupByPaging)
            {
                SqlBuilder builder = new SqlBuilder(this.EscCharLeft, this.EscCharRight);

                // SELECT
                int index = -1;
                builder.Append("SELECT ");
                foreach (var kvp in sc.Columns)
                {
                    index += 1;
                    builder.AppendNewLine();
                    builder.AppendMember("t0", kvp.Key);
                    if (index < sc.Columns.Count - 1)
                    {
                        builder.Append(",");
                    }
                }

                builder.AppendNewLine();
                builder.Append("FROM ( ");

                string inner = sc.CommandText;
                //jf.Replace(Environment.NewLine, Environment.NewLine + SqlBuilder.TAB);
                jf.Insert(0, builder);


                indent   -= 1;
                jf.Indent = indent;
                jf.AppendNewLine();
                jf.Append(" ) t0");

                // 排序
                if (qQuery.OrderBy.Count > 0 && useOrderBy)
                {
                    visitor = new OrderByExpressionVisitor(this, aliases, qQuery.OrderBy, null, "t0");
                    visitor.Write(jf);
                }

                // 分页
                if (qQuery.Skip > 0)
                {
                    jf.AppendNewLine();
                    jf.Append("OFFSET ");
                    jf.Append(qQuery.Skip);
                    jf.Append(" ROWS");

                    if (qQuery.Take > 0)
                    {
                        jf.Append(" FETCH NEXT ");
                        jf.Append(qQuery.Take);
                        jf.Append(" ROWS ONLY ");
                    }
                }
            }

            #endregion

            // 'Any' 子句
            if (qQuery.HaveAny)
            {
                string inner = sc.CommandText;
                indent   -= 1;
                jf.Indent = indent;
                jf.AppendNewLine();
                jf.Append(") SELECT 1 ELSE SELECT 0");
            }

            // UNION 子句
            if (qQuery.Union != null && qQuery.Union.Count > 0)
            {
                string inner = sc.CommandText;
                for (int index = 0; index < qQuery.Union.Count; index++)
                {
                    jf.AppendNewLine();
                    jf.AppendNewLine("UNION ALL");
                    CommandDefine define = this.ParseSelectCommand <T>(qQuery.Union[index] as DbQueryableInfo_Select <T>);
                    jf.Append(define.CommandText);
                }
            }

            return(sc);
        }
Exemplo n.º 2
0
        /*
         * public static void initVLC()
         * {
         *  if (Environment.Is64BitOperatingSystem)
         *  {
         *      // Set libvlc.dll and libvlccore.dll directory path
         *      VlcContext.LibVlcDllsPath = @"VLC\";
         *
         *      // Set the vlc plugins directory path
         *      VlcContext.LibVlcPluginsPath = @"VLC\plugins";
         *  }
         *  else
         *  {
         *      // Set libvlc.dll and libvlccore.dll directory path
         *      VlcContext.LibVlcDllsPath = @"VLC\";
         *
         *      // Set the vlc plugins directory path
         *      VlcContext.LibVlcPluginsPath = @"VLC\plugins";
         *  }
         *
         *  // Ignore the VLC configuration file
         *  VlcContext.StartupOptions.IgnoreConfig = true;
         #if DEBUG
         *  // Enable file based logging
         *  VlcContext.StartupOptions.LogOptions.LogInFile = true;
         *
         *  // Shows the VLC log console (in addition to the applications window)
         *  VlcContext.StartupOptions.LogOptions.ShowLoggerConsole = true;
         #else
         *  VlcContext.StartupOptions.LogOptions.ShowLoggerConsole = false;
         *  VlcContext.StartupOptions.LogOptions.LogInFile = false;
         #endif
         *  // Set the log level for the VLC instance
         *  VlcContext.StartupOptions.LogOptions.Verbosity = VlcLogVerbosities.Debug;
         *  VlcContext.StartupOptions.AddOption("--ffmpeg-hw");
         *  // Disable showing the movie file name as an overlay
         *  VlcContext.StartupOptions.AddOption("--no-video-title-show");
         *  VlcContext.StartupOptions.AddOption("--rtsp-tcp");
         *  VlcContext.StartupOptions.AddOption("--rtsp-mcast");
         *  // VlcContext.StartupOptions.AddOption("--rtsp-host=192.168.10.35");
         *  // VlcContext.StartupOptions.AddOption("--sap-addr=192.168.10.35");
         *  VlcContext.StartupOptions.AddOption("--rtsp-port=8554");
         *  VlcContext.StartupOptions.AddOption("--rtp-client-port=8554");
         *  VlcContext.StartupOptions.AddOption("--sout-rtp-rtcp-mux");
         *  VlcContext.StartupOptions.AddOption("--rtsp-wmserver");
         *
         *
         *  VlcContext.StartupOptions.AddOption("--file-caching=18000");
         *  VlcContext.StartupOptions.AddOption("--sout-rtp-caching=18000");
         *  VlcContext.StartupOptions.AddOption("--sout-rtp-port=8554");
         *  VlcContext.StartupOptions.AddOption("--sout-rtp-proto=tcp");
         *  VlcContext.StartupOptions.AddOption("--network-caching=1000");
         *
         *  VlcContext.StartupOptions.AddOption("--vout-filter=wall");
         *  VlcContext.StartupOptions.AddOption("--wall-cols=2");
         *  VlcContext.StartupOptions.AddOption("--wall-rows=2");
         *
         *  // Pauses the playback of a movie on the last frame
         *  VlcContext.StartupOptions.AddOption("--play-and-pause");
         *  VlcContext.CloseAll();
         *  // Initialize the VlcContext
         *  VlcContext.Initialize();
         * }
         */

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            bool login = true;

            Rows       = new List <CsvRow>();
            RowsSend   = new List <CsvRow>();
            Fonts      = ExCss.ReadFile(@"Asset\Fonts\font-awesome.min.css");
            Timethread = new Thread(CheckTimeFunctionThread);
            Timethread.IsBackground = true;
            listSerialPort          = new List <SerialPort>();
            QueueCMD   = new Queue <string>();
            m_bInitSDK = CHCNetSDK.NET_DVR_Init();
            if (m_bInitSDK == false)
            {
                MessageBox.Show("NET_DVR_Init error!");
                return;
            }
            if (!File.Exists(_FILE_CSV_COMMAND))
            {
                File.Create(_FILE_CSV_COMMAND);
            }
            if (!File.Exists(_FILE_Send_COMMAND))
            {
                File.Create(_FILE_Send_COMMAND);
            }
            //  initVLC();
            DefineCommand = CommandDefine.Read(_FILE_DEFINE_COMMAND);
            setting       = Config.Read(_FILE_Config);
            if (!Directory.Exists("Data"))
            {
                DirectoryInfo di = Directory.CreateDirectory("Data");
                di.Attributes = FileAttributes.Directory | FileAttributes.Hidden;
            }
            if (!Directory.Exists(setting.Folder))
            {
                Directory.CreateDirectory(setting.Folder);
            }
            curDate = DateTime.Now;
            Timethread.Start();
            curFolder = System.IO.Path.Combine(setting.Folder, this.curDate.ToString("dd-MM-yyyy"));
            if (!Directory.Exists(curFolder))
            {
                Directory.CreateDirectory(curFolder);
            }
            DataUser = Users.read(@"Data\User.mtc");
            if (DataUser == null)
            {
                DataUser = new Users();
                User root = new User("root", 1);
                root.Pass     = "******".toMD5();
                root.type     = 0;
                root.FullName = "Root";
                DataUser.Add(root);
                Users.write(_FILE_User_Data, DataUser);
            }
            DataCamera             = Cameras.Read(_FILE_Camera_Data);
            DataPreset             = Presets.Read(_FILE_PRESET_DATA);
            DataAlarm              = Alarms.Read(_FILE_Alarm_Data);
            this.checkFile         = new Thread(checkFileFunctionThread);
            checkFile.IsBackground = true;
            this.checkFile.Start();
#if DEBUG
            if (DataCamera.Count == 0)
            {
                Camera camera = new Camera("192.168.10.199");
                camera.name    = "Camera Demo";
                camera.channel = 1;
                camera.port    = 8000;
                camera.admin   = "admin";
                camera.pass    = "******";
                camera.icon    = "fa-video-camera";
                DataCamera.Add(camera);
            }

            if (DataUser.Datas.Count < 2)
            {
                User root = new User("admin", 2);
                root.Pass     = "******".toMD5();
                root.type     = 1;
                root.FullName = "Admin";
                DataUser.Add(root);

                User root2 = new User("htdm", 3);
                root2.Pass     = "******".toMD5();
                root2.type     = 2;
                root2.FullName = "Camera";
                DataUser.Add(root2);
                Users.write(_FILE_User_Data, DataUser);
            }
#endif
            var listCom = getListCOM();
            if (listCom.Length > 0)
            {
                foreach (string i in listCom)
                {
                    try
                    {
                        SerialPort serialPort = new SerialPort();
                        serialPort = new SerialPort();
                        serialPort.openCOM(i, BAUDRATE, DATABITS, StopBits.One);
                        serialPort.DataReceived += serialPort_DataReceived;
                        serialPort.sendCommand("#0$");
                        listSerialPort.Add(serialPort);
                    }
                    catch (Exception)
                    {
                    }
                }
            }
            Map = Map.Read(_FILE_Map_Data);
            for (int i = 0; i != e.Args.Length; i += 2)
            {
                if (e.Args[i] == "-u")
                {
                    string hash = e.Args[i + 1];
                    User   u    = App.DataUser.Login(hash);
                    if (u != null)
                    {
                        login    = false;
                        App.User = u;
                    }
                }
                else if (e.Args[i] == "-mode")
                {
                    Mode = (Camera_Final.Mode) int.Parse(e.Args[i + 1]);
                }
            }
            if (login)
            {
                this.MainWindow = new Login();
            }
            else
            {
                this.MainWindow = new MainWindow();
            }
            this.MainWindow.Show();
        }