using System; using System.Collections.Generic; using System.Text; namespace HandRecorderPS.parser { class PartyParser : Parser { // PROPERTIES private Dictionary __getData; public Dictionary _getData { get { return __getData; } set { __getData = value; } } private Dictionary> __getPlayers; public Dictionary> _getPlayers { get { return __getPlayers; } } private string __getHero; public string _getHero { get { return __getHero; } } private string __getHeroCards; public string _getHeroCards { get { return __getHeroCards; } } private int __getTotalPlayers; public int _getTotalPlayers { get { return __getTotalPlayers; } } private string __history; public string _history { get { return __history; } } // METHODS private void getData(string history) { // INTO CONFIGFILE string __handid = @"\*{5} Hand History for Game \d+ \*{5}"; string __offerer = ""; string[] __gametype = new string[] { @"Hold\'em[^\n]*Trny:\d+", @"NL Hold\'em[^\n]*Trny:\d+", @"PL Hold\'em[^\n]*Trny:\d+", @"(.*)\sTexas\sHold\'em\s-\s[^\n]*?,\s\d\d:\d\d:\d\d\s", @"\$(\d+) NL Hold\'em - [^\n]*?, \d\d:\d\d:\d\d ", @"\$(\d+) PL Hold\'em - [^\n]*?, \d\d:\d\d:\d\d " }; string[] __moneysymbol = new string[] { "T", "T", "T", "$", "$", "$" }; string[] __gametitle = new string[] { "Texas Hold'em Tournament", "NL Texas Hold'em Tournament", "PL Texas Hold'em Tournament", "Texas Holdem", "NL Texas Holdem", "PL Texas Holdem" }; string[] __gamedisplay = new string[] { "Limit", "NL", "PL", "Limit", "NL", "PL" }; string[] __gamemethod = new string[] { "Tourney", "Tourney", "Tourney", "Ring", "Ring", "Ring" }; string __tourneylevel = @"Level:\d+ Blinds[ ]*?\((\d+)\/(\d+)\)"; string __ringlimit = @"(.*?)\s(Texas\sHold\'em\s-\s|NL\sHolde\'em|PL\sHold\'em)"; string __smallblind = @"posts\ssmall\sblind\s\[\$(.*)\]"; string __bigblind = @"posts\sbig\sblind\s\[\$(.*)\]"; string __cap = "4"; Dictionary gamedata = new Dictionary(); if (Regex.IsMatch(history, __handid)) { gamedata.Add("HandId", Regex.Match(history, __handid).Groups[1].ToString()); gamedata.Add("Site", __offerer); gamedata.Add("Cap", __cap); } for (int i = 0; i < __gametype.Length; i++) { if (Regex.IsMatch(history, __gametype[i])) { gamedata.Add("MoneySymbol", __moneysymbol[i]); gamedata.Add("GameTitle", __gametitle[i]); gamedata.Add("GameDisplay", __gamedisplay[i]); gamedata.Add("GameMethod", __gamemethod[i]); } } if (gamedata["GameMethod"].ToString() == "Tourney") { gamedata.Add("TourneyLevel", Regex.Match(history, __tourneylevel).Groups[1].ToString()); gamedata.Add("BlindSmall", Regex.Match(history, __tourneylevel).Groups[2].ToString()); gamedata.Add("BlindBig", Regex.Match(history, __tourneylevel).Groups[3].ToString()); } else if (gamedata["GameMethod"].ToString() == "Ring") { string RingLimit = Regex.Match(history, __ringlimit).Groups[1].ToString(); RingLimit = Regex.Replace(RingLimit, @"\$", @""); gamedata.Add("Limit", RingLimit); if (gamedata["GameDisplay"].ToString() == "Limit") { string[] spLimit = RingLimit.Split('/'); gamedata.Add("SmallBlind", Regex.Match(history, __smallblind).Groups[1].ToString()); gamedata.Add("BigBlind", Regex.Match(history, __bigblind).Groups[1].ToString()); gamedata.Add("SmallBet", spLimit[0]); gamedata.Add("BigBet", spLimit[1]); } else if (gamedata["GameDisplay"].ToString() == "NL") { gamedata.Add("SmallBlind", Regex.Match(history, __smallblind).Groups[1].ToString()); gamedata.Add("BigBlind", Regex.Match(history, __bigblind).Groups[1].ToString()); } else if (gamedata["GameDisplay"].ToString() == "PL") { gamedata.Add("SmallBlind", Regex.Match(history, __smallblind).Groups[1].ToString()); gamedata.Add("BigBlind", Regex.Match(history, __bigblind).Groups[1].ToString()); } } __getData = gamedata; } private void getPlayers(string history) { // INTO CONFIGFILE string __stacks = @"Seat\s(\d+):\s(\w+)\s\(\s\$(.+)\s\)"; string __button = @"Seat\s(\d+)\sis\sthe\sbutton"; string __totalplayers = @"Total\snumber\sof\splayers\s:\s(\d+).*?"; string __sitoutsearch = @"(\S+) is sitting out."; string __sitoutplayerA = @"Seat \d+: "; string __sitoutplayerE = @" \(.*?\)"; string __buttontitle = "Button"; string __herodata = @"Dealt to (\w+) \[ (\d|T|J|Q|K|A)(c|d|h|s)\s(\d|T|J|Q|K|A)(c|d|h|s)\s\]"; int __cardpockets = 2; Regex rx; MatchCollection mc; Dictionary> players = new Dictionary>(); int ButtonSeat = 0; if (Regex.IsMatch(history, __totalplayers)) ButtonSeat = Convert.ToInt16(Regex.Match(history, __button).Groups[1].ToString()); int SitoutPlayers = 0; rx = new Regex(__sitoutsearch); mc = rx.Matches(history); foreach (Match mtch in mc) { if (Regex.IsMatch(history, __sitoutplayerA + mtch.Groups[1].ToString() + __sitoutplayerE)) { SitoutPlayers++; } } int TotalPlayers = 0; if (Regex.IsMatch(history, __totalplayers)) TotalPlayers = Convert.ToInt16(Regex.Match(history, __totalplayers).Groups[1].ToString()) - SitoutPlayers; Stack seats; seats = getSeats(TotalPlayers); // hero erkennen string HeroName = ""; if (Regex.IsMatch(history, __herodata)) { HeroName = Regex.Match(history, __herodata).Groups[1].ToString(); } int i = 0; int pSeat = 0; rx = new Regex(__stacks); mc = rx.Matches(history); foreach (Match mtch in mc) { players.Add(i, new Dictionary()); players[i].Add("PlayerSeatNumber", mtch.Groups[1].ToString()); players[i].Add("PlayerName", mtch.Groups[2].ToString()); players[i].Add("PlayerStack", mtch.Groups[3].ToString()); pSeat = Convert.ToInt16(players[i]["PlayerSeatNumber"].ToString()); if (pSeat == ButtonSeat) { players[i].Add("PlayerSeatTitle", __buttontitle); } else if ((pSeat > ButtonSeat) && (pSeat < ButtonSeat + 2) && (i <= TotalPlayers)) { players[i].Add("PlayerSeatTitle", seats.Pop().ToString()); } i++; } // benennt die restlichen positionen i = 0; pSeat = 0; int x = 1; while (seats.Count > 0) { pSeat = Convert.ToInt16(players[i]["PlayerSeatNumber"]); if ((pSeat == x) && (pSeat != ButtonSeat)) { players[i].Add("PlayerSeatTitle", seats.Pop().ToString()); i = 0; x++; } else if (i == (TotalPlayers - 1)) { i = 0; x++; } else { i++; } } __getTotalPlayers = TotalPlayers; __getHero = HeroName; __getPlayers = players; } private Stack getSeats(int TotalPlayers) { string[] SeatTitleList; if (TotalPlayers == 10) { SeatTitleList = new string[] { "CO", "MP3", "MP2", "MP1", "UTG+2", "UTG+1", "UTG", "BB", "SB" }; } else if (TotalPlayers == 9) { SeatTitleList = new string[] { "CO", "MP3", "MP2", "MP1", "UTG+2", "UTG+1", "BB", "SB" }; } else if (TotalPlayers == 8) { SeatTitleList = new string[] { "CO", "MP3", "MP2", "MP1", "UTG+2", "BB", "SB" }; } else if (TotalPlayers == 7) { SeatTitleList = new string[] { "CO", "MP3", "MP2", "MP1", "BB", "SB" }; } else if (TotalPlayers == 6) { SeatTitleList = new string[] { "CO", "MP3", "MP2", "BB", "SB" }; } else if (TotalPlayers == 5) { SeatTitleList = new string[] { "CO", "MP3", "BB", "SB" }; } else if (TotalPlayers == 4) { SeatTitleList = new string[] { "CO", "BB", "SB" }; } else if (TotalPlayers == 3) { SeatTitleList = new string[] { "BB", "SB" }; } else if (TotalPlayers == 2) { SeatTitleList = new string[] { "BB" }; } else { SeatTitleList = new string[0]; } return arrToStack(SeatTitleList); } private void getRounds(string history) { // INTO CONFIGFILE string __actions = @"\*\* Dealing down cards \*\*(.*)\*\* Dealing Flop \*\*\s+\[(.+?)\](.*)\*\* Dealing Turn \*\*\s+\[(.+?)\](.*)\*\* Dealing River \*\*\s+\[(.+?)\](.*)"; string[] __cleanM = new string[] { @"\>You\shave\soptions[^\n]*\n" }; string[] __cleanR = new string[] { @"" }; string __showncards = @"(\w+)\s+(shows|doesn\'t show)\s+\[\s+(\d|T|J|Q|K|A)(c|d|h|s),\s+(\d|T|J|Q|K|A)(c|d|h|s)\s+\](.+)\."; int __cardcount = 2; string __winner_alt = @"(\w+)\s+wins\s+\$(.+)"; string __winner = @"(\w+)\s+wins\s+\$(.+)\s+from\s+(the\s+)*(\w+)\s+pot"; string __winner_check = @"(\w+)\s+wins"; string __heroalias = "HERO"; string __heroaliason = "1"; // cleanup for (int i = 0; i < __cleanM.Length; i++) { history = Regex.Replace(history, __cleanM[i], __cleanR[i]); } for (int i = 0, j = 0; i < __getTotalPlayers; i++) { if (__getPlayers[i]["PlayerName"].ToString() == __getHero) { __getPlayers[i].Add("PlayerAlias", __heroalias); __getPlayers[i].Add("PlayerAliasOn", __heroaliason); } if (Regex.IsMatch(history, __showncards)) { if (__getPlayers[i]["PlayerName"].ToString() == Regex.Match(history, __showncards).Groups[1].ToString()) { // GEZEIGTE KARTEN DER ANDEREN SPIELER!!!!!!!!!! } } history = Regex.Replace(history, __getPlayers[i]["PlayerName"].ToString(), __getPlayers[i]["PlayerSeatTitle"].ToString()); } if (Regex.IsMatch(history, __actions)) { } __history = history; } private Stack arrToStack(string[] myStr) { Stack myStack = new Stack(); if (myStr.Length > 0) { foreach (string sStr in myStr) { myStack.Push(sStr); } } return myStack; } } }