示例#1
0
 public DB_AGIN_Baccarat_Check(DB_AGIN_Baccarat baccarat, int subLMax, int freqMin, KeyValuePair <int, int>[] totalLMin)
 {
     Baccarat  = baccarat;
     SubLMax   = subLMax;
     FreqMin   = freqMin;
     TotalLMin = totalLMin;
 }
示例#2
0
        public static DB_AGIN_Baccarat ExtractObj(int coordinateX, int coordinateY, string fileName, AGIN_3840x2160_Baccarat_TblLevel1 dataAnalysis, DateTime createdOn, long createdBy, DateTime lastModifiedOn, long lastModifiedBy)
        {
            DB_AGIN_Baccarat baccarat = new DB_AGIN_Baccarat();

            baccarat.Id           = 0;
            baccarat.CoordinateX  = coordinateX;
            baccarat.CoordinateY  = coordinateY;
            baccarat.FileNames    = string.Format(";{0};", fileName);
            baccarat.DataAnalysis = new DB_AGIN_Baccarat_Tbl();
            for (int x = 0; x < dataAnalysis.Cells.Length; x++)
            {
                baccarat.DataAnalysis.Cells.Add(new List <DB_AGIN_Baccarat_Cell>());
                for (int y = 0; y < dataAnalysis.Cells[x].Length; y++)
                {
                    baccarat.DataAnalysis.Cells[x].Add(new DB_AGIN_Baccarat_Cell());
                    baccarat.DataAnalysis.Cells[x][y].CoordinateX = x;
                    baccarat.DataAnalysis.Cells[x][y].CoordinateY = y;
                    baccarat.DataAnalysis.Cells[x][y].PercentB    = dataAnalysis.Cells[x][y].PercentB;
                    baccarat.DataAnalysis.Cells[x][y].PercentG    = dataAnalysis.Cells[x][y].PercentG;
                    baccarat.DataAnalysis.Cells[x][y].PercentR    = dataAnalysis.Cells[x][y].PercentR;
                    baccarat.DataAnalysis.Cells[x][y].Matches     = dataAnalysis.Cells[x][y].Matches;
                    baccarat.DataAnalysis.Cells[x][y].CircleFsLen = dataAnalysis.Cells[x][y].CircleFsLen;
                }
            }
            baccarat.DataAnalysis.UpdTotal();
            baccarat.CreatedOn      = createdOn;
            baccarat.CreatedBy      = createdBy;
            baccarat.LastModifiedOn = lastModifiedOn;
            baccarat.LastModifiedBy = lastModifiedBy;
            return(baccarat);
        }
示例#3
0
        public DB_AGIN_Baccarat_Check(DB_AGIN_Baccarat baccarat, dynamic config)
        {
            Baccarat = baccarat;
            SubLMax  = (int)JsonHelper.GetElBySelector(config, "freq-l-sub-max").Value;
            FreqMin  = (int)JsonHelper.GetElBySelector(config, "freq-n-min").Value;
            var freq_l_min = JsonHelper.GetElBySelector(config, "freq-l-min");

            TotalLMin = new KeyValuePair <int, int> [freq_l_min.Count];
            for (int i = 0; i < TotalLMin.Length; i++)
            {
                var freq_l = JsonHelper.GetElBySelector(freq_l_min, string.Format("[{0}]", i));
                TotalLMin[i] = new KeyValuePair <int, int>((int)JsonHelper.GetElBySelector(freq_l, "freq-l").Value, (int)JsonHelper.GetElBySelector(freq_l, "total-notify").Value);
            }
        }
示例#4
0
        public DB_AGIN_Baccarat Clone()
        {
            DB_AGIN_Baccarat baccarat = new DB_AGIN_Baccarat();

            baccarat.Id             = Id;
            baccarat.CoordinateX    = CoordinateX;
            baccarat.CoordinateY    = CoordinateY;
            baccarat.FileNames      = FileNames;
            baccarat.DataAnalysis   = DataAnalysis.Clone();
            baccarat.CreatedOn      = CreatedOn;
            baccarat.CreatedBy      = CreatedBy;
            baccarat.LastModifiedOn = LastModifiedOn;
            baccarat.LastModifiedBy = LastModifiedBy;
            return(baccarat);
        }
示例#5
0
        private void InitAGINs()
        {
            LatestAGINs = new List <DB_AGIN_Baccarat>();
            SQLiteCommand cmd = ConnHelper.ConnDb.CreateCommand();

            try
            {
                #region SQLiteCommand: Initialize
                #region cmd.CommandText = string.Format(@"")
                cmd.CommandText = string.Format(@"
SELECT A.*
FROM AGIN A
WHERE Id IN (SELECT MAX(Id) FROM AGIN GROUP BY CoordinateX, CoordinateY)");
                #endregion
                cmd.CommandType    = CommandType.Text;
                cmd.CommandTimeout = CONFIG_CONN_TIMEOUT;
                #endregion
                #region SQLiteCommand: Parameters
                #endregion
                #region SQLiteCommand: Connection
                DataSet ds = ConnHelper.ExecCmd(cmd);
                #endregion
                #region For: Retrieve
                DataTable     dt   = ds.Tables[0];
                List <string> cols = ToCols(dt);
                foreach (DataRow dr in dt.Rows)
                {
                    LatestAGINs.Add(DB_AGIN_Baccarat.ExtractDB(dr, cols));
                }
                #endregion
                #region For: Clean
                dt.Clear();
                ds.Clear();
                dt.Dispose();
                ds.Dispose();
                #endregion
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("{0}{1}", ex.Message, ex.StackTrace), ex);
            }
            finally
            {
                cmd.Dispose();
            }
        }
示例#6
0
 public DB_AGIN_Baccarat_Check(DB_AGIN_Baccarat baccarat)
 {
     Baccarat  = baccarat;
     SubLMax   = 9;
     FreqMin   = 3;
     TotalLMin = new KeyValuePair <int, int>[9] {
         new KeyValuePair <int, int>(1, 12), // max: 16
         new KeyValuePair <int, int>(2, 11), // max: 15
         new KeyValuePair <int, int>(3, 15), // max: 19
         new KeyValuePair <int, int>(4, 16), // max: 19 (20)
         new KeyValuePair <int, int>(5, 17), // max: 21
         new KeyValuePair <int, int>(6, 18), // max: 21
         new KeyValuePair <int, int>(7, 21), // max: 23
         new KeyValuePair <int, int>(8, 24), // max: 25
         new KeyValuePair <int, int>(9, 27)
     };
 }
示例#7
0
        public static DB_AGIN_Baccarat ExtractDB(DataRow dr, List <string> cols)
        {
            DB_AGIN_Baccarat baccarat = new DB_AGIN_Baccarat();

            if (cols.Contains("Id") && DBNull.Value != dr["Id"])
            {
                baccarat.Id = (long)dr["Id"];
            }
            if (cols.Contains("CoordinateX") && DBNull.Value != dr["CoordinateX"])
            {
                baccarat.CoordinateX = (int)dr["CoordinateX"];
            }
            if (cols.Contains("CoordinateY") && DBNull.Value != dr["CoordinateY"])
            {
                baccarat.CoordinateY = (int)dr["CoordinateY"];
            }
            if (cols.Contains("FileNames") && DBNull.Value != dr["FileNames"])
            {
                baccarat.FileNames = (string)dr["FileNames"];
            }
            if (cols.Contains("DataAnalysis") && DBNull.Value != dr["DataAnalysis"])
            {
                baccarat.DataAnalysis = JsonConvert.DeserializeObject <DB_AGIN_Baccarat_Tbl>((string)dr["DataAnalysis"]);
            }
            if (cols.Contains("CreatedOn") && DBNull.Value != dr["CreatedOn"])
            {
                baccarat.CreatedOn = (DateTime)dr["CreatedOn"];
            }
            if (cols.Contains("CreatedBy") && DBNull.Value != dr["CreatedBy"])
            {
                baccarat.CreatedBy = (long)dr["CreatedBy"];
            }
            if (cols.Contains("LastModifiedOn") && DBNull.Value != dr["LastModifiedOn"])
            {
                baccarat.LastModifiedOn = (DateTime)dr["LastModifiedOn"];
            }
            if (cols.Contains("LastModifiedBy") && DBNull.Value != dr["LastModifiedBy"])
            {
                baccarat.LastModifiedBy = (long)dr["LastModifiedBy"];
            }
            return(baccarat);
        }
示例#8
0
        public void Analysis2_AGIN()
        {
            List <DB_AGIN_Baccarat> agins = new List <DB_AGIN_Baccarat>();
            SQLiteCommand           cmd   = ConnHelper.ConnDb.CreateCommand();

            try
            {
                #region SQLiteCommand: Initialize
                #region cmd.CommandText = string.Format(@"")
                cmd.CommandText = string.Format(@"
SELECT ASUM.* FROM AGIN_SUMMARY ASUM WHERE ASUM.Id > 8281 ORDER BY ASUM.Id ASC");
                #endregion
                cmd.CommandType    = CommandType.Text;
                cmd.CommandTimeout = CONFIG_CONN_TIMEOUT;
                #endregion
                #region SQLiteCommand: Parameters
                #endregion
                #region SQLiteCommand: Connection
                DataSet ds = ConnHelper.ExecCmd(cmd);
                #endregion
                #region For: Retrieve
                DataTable     dt   = ds.Tables[0];
                List <string> cols = ToCols(dt);
                foreach (DataRow dr in dt.Rows)
                {
                    agins.Add(DB_AGIN_Baccarat.ExtractDB(dr, cols));
                }
                #endregion
                #region For: Clean
                dt.Clear();
                ds.Clear();
                dt.Dispose();
                ds.Dispose();
                #endregion
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("{0}{1}", ex.Message, ex.StackTrace), ex);
            }
            finally
            {
                cmd.Dispose();
            }
            int order_min = 1, idx = 1;
            List <List <object> > lst_vals = new List <List <object> >();
            string cmd_text = string.Format(@"INSERT INTO AGIN_RESULT2 (SubId, LatestOrder, NumCircleRed, NumCircleBlue, Matches) VALUES (?, ?, ?, ?, ?)");
            foreach (DB_AGIN_Baccarat agin in agins)
            {
                agin.DataAnalysis.UpdCoordinate();
                int order = order_min - 1;
                while (agin.DataAnalysis.LatestOrder > order++)
                {
                    List <DB_AGIN_Baccarat_Cell> cells = new List <DB_AGIN_Baccarat_Cell>();
                    agin.DataAnalysis.Cells.ForEach(x => {
                        cells.AddRange(x.Where(y => order + 1 > y.Order));
                    });
                    cells = cells.OrderBy(x => x.Order).ToList();
                    lst_vals.Add(new List <object>()
                    {
                        agin.Id, order,
                        cells.Count(x => x.Matches.Contains("circle-red")),
                        cells.Count(x => x.Matches.Contains("circle-blue")),
                        string.Format(";{0};", string.Join(";", cells[cells.Count - 1].Matches))
                    });
                }
                System.Threading.Thread.Sleep(0);
                System.Windows.Forms.Application.DoEvents();
                Console.Clear();
                Console.WriteLine(string.Format("Information\t:: {0:P}", (double)idx++ / agins.Count));
            }
            ConnHelper.ExecNonQueryCmdOptimizeMany(lst_vals, cmd_text);
        }
示例#9
0
        public void Analysis1_AGIN()
        {
            List <DB_AGIN_Baccarat> agins = new List <DB_AGIN_Baccarat>();
            SQLiteCommand           cmd   = ConnHelper.ConnDb.CreateCommand();

            try
            {
                #region SQLiteCommand: Initialize
                #region cmd.CommandText = string.Format(@"")
                cmd.CommandText = string.Format(@"
SELECT ASUM.* FROM AGIN_SUMMARY ASUM WHERE ASUM.Id > 8281 ORDER BY ASUM.Id ASC");
                #endregion
                cmd.CommandType    = CommandType.Text;
                cmd.CommandTimeout = CONFIG_CONN_TIMEOUT;
                #endregion
                #region SQLiteCommand: Parameters
                #endregion
                #region SQLiteCommand: Connection
                DataSet ds = ConnHelper.ExecCmd(cmd);
                #endregion
                #region For: Retrieve
                DataTable     dt   = ds.Tables[0];
                List <string> cols = ToCols(dt);
                foreach (DataRow dr in dt.Rows)
                {
                    agins.Add(DB_AGIN_Baccarat.ExtractDB(dr, cols));
                }
                #endregion
                #region For: Clean
                dt.Clear();
                ds.Clear();
                dt.Dispose();
                ds.Dispose();
                #endregion
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("{0}{1}", ex.Message, ex.StackTrace), ex);
            }
            finally
            {
                cmd.Dispose();
            }
            int idx = 1;
            List <List <object> > lst_vals = new List <List <object> >();
            string cmd_text = string.Format(@"INSERT INTO AGIN_RESULT1 (SubId, LatestOrder, FreqN, FreqL, FreqLSub, FreqColors) VALUES (?, ?, ?, ?, ?, ?)");
            foreach (DB_AGIN_Baccarat agin in agins)
            {
                agin.DataAnalysis.UpdCoordinate();
                int order = 0;
                while (agin.DataAnalysis.LatestOrder > order++)
                {
                    DB_AGIN_Baccarat_Check baccarat_check = new DB_AGIN_Baccarat_Check(agin, 10, 1, new KeyValuePair <int, int>[10] {
                        new KeyValuePair <int, int>(1, 1),
                        new KeyValuePair <int, int>(2, 6),
                        new KeyValuePair <int, int>(3, 9),
                        new KeyValuePair <int, int>(4, 12),
                        new KeyValuePair <int, int>(5, 15),
                        new KeyValuePair <int, int>(6, 18),
                        new KeyValuePair <int, int>(7, 21),
                        new KeyValuePair <int, int>(8, 24),
                        new KeyValuePair <int, int>(9, 27),
                        new KeyValuePair <int, int>(10, 30)
                    });
                    baccarat_check.Search(order).ForEach(x => {
                        lst_vals.Add(new List <object>()
                        {
                            agin.Id, order, x.NFreq, x.CellsFreq.Count, x.CellsSub.Count, x.ColorsFreq
                        });
                    });
                }
                System.Threading.Thread.Sleep(0);
                System.Windows.Forms.Application.DoEvents();
                Console.Clear();
                Console.WriteLine(string.Format("Information\t:: {0:P}", (double)idx++ / agins.Count));
            }
            ConnHelper.ExecNonQueryCmdOptimizeMany(lst_vals, cmd_text);
        }
示例#10
0
        public void HdlAGIN(string name)
        {
            try
            {
                string file_path = Path.Combine(CONFIG_DAFANBA_DIR_PRINT, name);
                if (File.Exists(file_path))
                {
                    AGIN_3840x2160_Baccarat agin_3840x2160_baccarat = null;
                    ImageHelper.AnalysisImg_AGIN_3840x2160(file_path, out agin_3840x2160_baccarat);

                    List <DB_AGIN_Baccarat> agins_img = DB_AGIN_Baccarat.ExtractImg(agin_3840x2160_baccarat, name, DateTime.Now, 0, DateTime.Now, 0);
                    foreach (DB_AGIN_Baccarat agin_img in agins_img)
                    {
                        DB_AGIN_Baccarat agin_latest = LatestAGINs.Where(x => x.CoordinateX == agin_img.CoordinateX && x.CoordinateY == agin_img.CoordinateY).FirstOrDefault();
                        #region For: Save/Clean baccarat
                        if (!new int[3] {
                            0, 203, 204
                        }.Contains(agin_img.DataAnalysis.TotalInvalid))
                        {
                            agin_img.SaveDbTrack(ConnHelper);
                        }
                        if (0 != agin_img.DataAnalysis.TotalInvalid)
                        {
                            continue;
                        }
                        agin_img.Id = 0;
                        agin_img.DataAnalysis.DelEmpty();
                        #endregion
                        #region For: Merge baccarat
                        bool merged = false;
                        if (null != agin_latest)
                        {
                            int dist = DB_AGIN_Baccarat_Tbl.DistMerge(
                                agin_latest.DataAnalysis, agin_img.DataAnalysis,
                                DB_AGIN_Baccarat_Tbl.DistMax(agin_latest.DataAnalysis, agin_img.DataAnalysis));
                            if (-1 != dist)
                            {
                                DB_AGIN_Baccarat_Tbl.ExecMerge(agin_latest.DataAnalysis, agin_img.DataAnalysis, dist);
                                agin_latest.FileNames      = Regex.Replace(agin_latest.FileNames + agin_img.FileNames, @"(;;)", ";");
                                agin_latest.LastModifiedOn = agin_img.LastModifiedOn;
                                agin_latest.LastModifiedBy = agin_img.LastModifiedBy;
                                merged = true;
                            }
                        }
                        #endregion
                        #region For: Add baccarat
                        if (!merged)
                        {
                            if (null != agin_latest)
                            {
                                LatestAGINs.Remove(agin_latest);
                            }
                            LatestAGINs.Add(agin_img);
                            agin_latest = LatestAGINs.Single(x => x.CoordinateX == agin_img.CoordinateX && x.CoordinateY == agin_img.CoordinateY);
                        }
                        #endregion
                        #region For: Order baccarat
                        agin_latest.DataAnalysis.UpdOrder(
                            agin_latest.DataAnalysis.LatestOrder, agin_latest.DataAnalysis.LatestOrderCircle,
                            agin_latest.DataAnalysis.LatestOrderX, agin_latest.DataAnalysis.LatestOrderY,
                            agin_latest.DataAnalysis.LatestOrderXR, agin_latest.DataAnalysis.LatestOrderYR);
                        #endregion
                        #region For: Save baccarat
                        agin_latest.SaveDb(ConnHelper);
                        #endregion
                        #region For: Alert via pattern(s)
                        #region For: Baccarat pattern
                        IEnumerable <DB_AGIN_Baccarat_Check_RstItem> pattern = agin_latest.ChkPattern(CONFIG_DAFANBA_ALERT_BACCARAT_PATTERN);
                        foreach (DB_AGIN_Baccarat_Check_RstItem item in pattern)
                        {
                            AlertBaccaratPattern(agin_latest.CoordinateX, agin_latest.CoordinateY, item.NFreq, item.CellsFreq.Count, item.CellsSub.Count, item.ColorsFreq, file_path);
                        }
                        #endregion
                        #endregion
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("{0}{1}", ex.Message, ex.StackTrace), ex);
            }
        }