示例#1
0
        public void LogFileImport(FileInfo fileInfo, DateTime startDate, DateTime endDate, string status, Hand lastImportedHand)
        {
            using (SqlCeConnection conn = new SqlCeConnection(Helper.ConnectionString))
            using (SqlCeCommand comm = new SqlCeCommand())
            {
                conn.Open();
                comm.Connection = conn;
                comm.CommandType = System.Data.CommandType.Text;

                const string SqlCommandString =
                    "insert  into [LogFiles] (FileName, StartDate, EndDate, Status, LastHandId, LastHandDate ) Values ( '{0}', '{1}', '{2}', '{3}', '{4}', '{5}' )";

                comm.CommandText =
                    string.Format(
                        SqlCommandString,
                        fileInfo.Name,
                        startDate.ToString("yyyy/MM/dd HH:mm:ss.fff"),
                        endDate.ToString("yyyy/MM/dd HH:mm:ss.fff"),
                        status,
                        lastImportedHand.HandId,
                        lastImportedHand.Time.ToString("yyyy/MM/dd HH:mm:ss.fff"));

                comm.ExecuteNonQuery();
            }
        }
示例#2
0
        public void SaveHandsSqlCommandTest()
        {
            var hands = new List<Hand>();

            Hand hand =
                new Hand
                    {
                        BigBlind = 1,
                        ButtonPosition = 2,
                        FlopCard1 = "As",
                        FlopCard2 = "Js",
                        FlopCard3 = "Th",
                        HandId = "4545454",
                        RiverCard = "2s",
                        Time = new DateTime(2000, 1, 1),
                        TurnCard = "7s",
                        Players = new List<HandPlayer>()
                    };

            HandPlayer player =
                new HandPlayer
                    {
                        ActionFlop = "action Flop",
                        ActionPreflop = "action Preflop",
                        ActionRiver = "action River",
                        ActionTurn = "action Turn",
                        Card1Str = "2a",
                        Card2Str = "3c",
                        MyMoneyAddedInPot = 2,
                        MyMoneyCollected = 1,
                        PaidFlop = 0.5m,
                        PaidPreflop = 0.6m,
                        PaidRiver = 0.7m,
                        PaidTurn = 0.8m,
                        SeatNumber = 4,
                        Player = "player1",
                        Stack = 6.52m
                    };

            hand.Players.Add(player);
            hands.Add(hand);

            new Hands().SaveHandsSqlCommand(hands);

            using (trackDBEntities2 t = new trackDBEntities2())
            {
                Assert.AreEqual(t.Hands.Count(), 1);
                Assert.AreEqual(t.Hands.First().BB, 1);
                Assert.AreEqual(t.Hands.First().PositionButton, 2);
                Assert.AreEqual(t.Hands.First().Id, "4545454");
                Assert.AreEqual(t.Hands.First().Time, new DateTime(2000, 1, 1));
                Assert.AreEqual(t.Hands.First().Position, 4);
                Assert.AreEqual(t.Hands.First().Stack, 6.52m);
            }
        }
示例#3
0
        private static void SetAction(Match match, Hand hand, string step)
        {
            string action = match.Groups[2].Value;
            string playername = match.Groups[1].Value;

            string amount = action == "raises" ? match.Groups[5].Value : match.Groups[3].Value;
            string actionAndAmount = action + " (" + amount + ")";

            switch (step)
            {
                case "preflop":
                    hand[playername].ActionPreflop +=
                        string.IsNullOrEmpty(hand[playername].ActionPreflop) ? actionAndAmount : "," + actionAndAmount;
                    break;
                case "flop":
                    hand[playername].ActionFlop +=
                        string.IsNullOrEmpty(hand[playername].ActionFlop) ? actionAndAmount : "," + actionAndAmount;
                    break;
                case "turn":
                    hand[playername].ActionTurn +=
                        string.IsNullOrEmpty(hand[playername].ActionTurn) ? actionAndAmount : "," + actionAndAmount;
                    break;
                case "river":
                    hand[playername].ActionRiver +=
                        string.IsNullOrEmpty(hand[playername].ActionRiver) ? actionAndAmount : "," + actionAndAmount;
                    break;
            }

            if (action == "checks")
                return;

            if (action == "collected")
            {
                hand[playername].MyMoneyCollected = decimal.Parse(match.Groups[3].Value);
                return;
            }

            decimal f = 0;
            if (action != "raises")
            {
                if (match.Groups[3].Value != string.Empty)
                    f = decimal.Parse(match.Groups[3].Value);
                switch (step)
                {
                    case "preflop":
                        hand[playername].PaidPreflop += f;
                        break;
                    case "flop":
                        hand[playername].PaidFlop += f;
                        break;
                    case "turn":
                        hand[playername].PaidTurn += f;
                        break;
                    case "river":
                        hand[playername].PaidRiver += f;
                        break;
                }
            }
            else
            {
                f = decimal.Parse(match.Groups[5].Value);

                switch (step)
                {
                    case "preflop":
                        hand[playername].PaidPreflop = f;
                        break;
                    case "flop":
                        hand[playername].PaidFlop = f;
                        break;
                    case "turn":
                        hand[playername].PaidTurn = f;
                        break;
                    case "river":
                        hand[playername].PaidRiver = f;
                        break;
                }
            }
        }
示例#4
0
 private bool ParseTurnTitle(Hand hand, string line)
 {
     Match matchT = _regexParseTurnTitle.Match(line);
     if (matchT.Success)
     {
         log(line);
         hand.TurnCard = matchT.Groups[4].Value;
         return false;
     }
     return true;
 }
示例#5
0
        private bool ParseTurn(Hand hand, string line)
        {
            Match match = _regexParseTurn.Match(line);

            if (match.Success)
            {
                log(line);
                string player = match.Groups[1].Value;
                string action = match.Groups[2].Value;
                     SetAction(match, hand, "turn");
                return false;
            }
            return true;
        }
示例#6
0
 private bool ParseTable(Hand hand, string line)
 {
     Match match = _regexParseTable.Match(line);
     if (match.Success)
     {
         hand.TableName = match.Groups[1].Value;
         hand.TypeGame = match.Groups[2].Value;
         hand.ButtonPosition = int.Parse(match.Groups[3].Value);
         log(line);
         return false;
     }
     return true;
 }
示例#7
0
 private bool ParseSummaryTitle(Hand hand, string line)
 {
     if (_regexParseSummaryTitle.Match(line).Success)
     {
         log(line);
         return false;
     }
     return true;
 }
示例#8
0
 private bool ParseAnteBlinds(Hand hand, string line)
 {
     Match match = _regexParseAnteBlinds.Match(line);
     if (match.Success)
     {
         log(line);
         return false;
     }
     return true;
 }
示例#9
0
        private bool ParseShowDown(Hand hand, string line)
        {
            Match matchSD1 = _regexParseShowDown1.Match(line);
            if (matchSD1.Success)
            {
                hand[matchSD1.Groups[1].Value].Card1Str = matchSD1.Groups[3].Value;
                hand[matchSD1.Groups[1].Value].Card2Str = matchSD1.Groups[4].Value;

                log(line);
                return false;
            }

            Match match = _regexParseShowDown2.Match(line);
            if (match.Success)
            {
                //if (m.Groups[1].Value == me)
                //{
                hand[match.Groups[1].Value].MyMoneyCollected = decimal.Parse(match.Groups[2].Value);
                    log(line);
                //}
                return false;
            }
            return true;
        }
示例#10
0
        private bool ParseSeats(Hand hand, string line)
        {
            Match match = _regexParseSeats.Match(line);
            if (match.Success)
            {
                log(line);

                hand.Players.Add(
                    new HandPlayer
                    {
                        Player = match.Groups[2].Value,
                        SeatNumber = int.Parse(match.Groups[1].Value),
                        Stack = decimal.Parse(match.Groups[3].Value)
                    });

                string stack = match.Groups[3].Value;
                return false;
            }

            return true;
        }
示例#11
0
 private bool ParseRiverTitle(Hand hand, string line)
 {
     Match matchR = _regexParseRiverTitle.Match(line);
     if (matchR.Success)
     {
         log(line);
         hand.RiverCard = matchR.Groups[5].Value;
         return false;
     }
     return true;
 }
示例#12
0
        private bool ParsePostsBlind(Hand hand, string line)
        {
            Match match = _regexParsePostsBlind.Match(line);
            if (match.Success)
            {
                log(line);

                hand[match.Groups[1].Value].ActionBlind = line.Replace(match.Groups[1].Value, "").TrimStart();

                if (match.Groups[4].Value != string.Empty)
                {
                    hand[match.Groups[1].Value].PaidPreflop = decimal.Parse(match.Groups[4].Value);
                }
                return false;
            }
            return true;
        }
示例#13
0
        private bool ParseHeader(Hand hand, string line)
        {
            if (_regexParseHeader0.Match(line).Success)
            {
                throw new FormatException("this is not a cashgame file");
            }

            Match match = _regexParseHeader.Match(line);
            if (match.Success)
            {
                if (match.Groups[1].Value != "CashGame")
                {
                    throw new FormatException("this is not a cashgame file");
                }

                log(line);

                string gameType = match.Groups[1].Value;
                string handId = match.Groups[2].Value;
                string typeDetails = match.Groups[3].Value;
                string bigBlind = match.Groups[4].Value;

                string gameDatetime = match.Groups[5].Value;

                hand.Time = DateTime.ParseExact(
                    gameDatetime,
                    "yyyy/MM/dd HH:mm:ss UTC",
                    CultureInfo.InvariantCulture);

                hand.BigBlind = float.Parse(bigBlind,
                    CultureInfo.InvariantCulture);
                hand.HandId = handId;
                return false;
            }
            return true;
        }
示例#14
0
        private bool ParseFlopTitle(Hand hand, string line)
        {
            Match matchPF = _regexParseFlopTitle.Match(line);
            if (matchPF.Success)
            {
                log(line);
                hand.FlopCard1 = matchPF.Groups[1].Value;
                hand.FlopCard2 = matchPF.Groups[2].Value;
                hand.FlopCard3 = matchPF.Groups[3].Value;

                return false;
            }
            return true;
        }
示例#15
0
        private bool ParseDealtToMe(Hand hand, string line)
        {
            Match match = _regexParseDealtToMe.Match(line);
            if (match.Success)
            {
                log(line);

                string card1 = match.Groups[2].Value;
                string card2 = match.Groups[3].Value;

                hand[match.Groups[1].Value].Card1Str = card1;
                hand[match.Groups[1].Value].Card2Str = card2;
                return false;
            }
            return true;
        }
示例#16
0
 public NewFileProcessedEventArgs(string newFile, int nbHands, Hand lastHand)
 {
     _newFile = newFile;
     _lastHand = lastHand;
     _nbHands = nbHands;
 }
示例#17
0
        private bool ParseSummary(Hand hand, string line)
        {
            Match match = _regexParseSummary.Match(line);
            if (match.Success)
            {
                log(line);
                string player = match.Groups[1].Value;
                string action = match.Groups[2].Value;
                return false;
            }

            match = _regexParseSummary2.Match(line);
            if (match.Success)
            {
                log(line);
                string player = match.Groups[1].Value;
                string action = match.Groups[2].Value;
                return false;
            }

            return true;
        }
示例#18
0
        private IList<Hand> GetHandsFromFile(string filePath, DateTime lastImport)
        {
            IList<Hand> hands = new List<Hand>();
            using (var streamReader =
                new StreamReader(
                    new FileStream(
                        filePath,
                        FileMode.Open, FileAccess.Read, FileShare.Read),
                    Encoding.UTF8))
            {
                int stepNumber = 0;

                // hand initialization
                var hand = new Hand { Players = new List<HandPlayer>() };

                string line = streamReader.ReadLine();

                while (streamReader.Peek() >= 0)
                {
                    // Each step returns:
                    // false, if the line processed matches the step, meaning the next line can be processed by the same step
                    // true, if the line processed doesn't match, meaning the next step must process the same line
                    bool expressionNotFoundGoToFollowingStepWithTheSameLine = _executeStep[stepNumber](hand, line);
                    // next step
                    if (expressionNotFoundGoToFollowingStepWithTheSameLine)
                    {

                        if (stepNumber != _executeStep.Count() - 1)
                        {
                            stepNumber++;
                        }
                        // last step:
                        else
                        {
                            // add the hand to Hands
                            if (hand.Time.Ticks > lastImport.Ticks)
                            {
                                hands.Add(hand);
                            }
                            // reinitialize a new hand
                            // starting on the first step
                            hand = new Hand { Players = new List<HandPlayer>() };
                            stepNumber = 0;
                        }
                    }
                    // next line
                    else
                    {
                        line = streamReader.ReadLine();
                    }
                }

                if (hand.Time.Ticks > lastImport.Ticks)
                {
                    hands.Add(hand);
                }
            }
            return hands;
        }