Пример #1
0
        }                                      //allows action counter to be persisted

        public GameParser(string line_in, Games g, string streetname, int gameActionCtr, string url, string key, string archivepath, List <Bets> bets)
        {
            //find index of button
            int buttonindex = g.seats.FindIndex(a => a.seatno == g.buttonseat);

            if (line_in.IndexOf(" posts small blind ") > 1)
            {
                for (var i = 0; i < g.seats.Count; i++)
                {
                    int buttonoffset = i <= buttonindex ? buttonindex - i : g.seats.Count() - (i - buttonindex);
                    //Console.WriteLine("Name is {0} and seatindex is {1} and button index is {2} and playercount is {3} and button offset is {4}", g.seats[i].playername, i, buttonindex, g.seats.Count(), buttonoffset);

                    if (buttonoffset <= 1)
                    {
                        //Console.WriteLine("Postion is Late");
                        //todo: assign postion flag
                    }
                    else if (buttonoffset >= (g.seats.Count() - 2))
                    {
                        //Console.WriteLine("Position is Early");
                        //todo: assign postion flag
                    }
                    else
                    {
                        //Console.WriteLine("Position is Middle");
                        //todo: assign postion flag
                    }
                }
            }

            LineParser lp = new LineParser(line_in, streetname, gameActionCtr);

            if (streetname != lp.Streetname)
            {
                bets.Select(u => { u.betsum = 0; return(u); }).ToList();
            }
            Streetname = lp.Streetname;
            int actionFlag = GameActionCtr == lp.GameActionCtr ? 0 : 1;

            GameActionCtr = lp.GameActionCtr;
            Bets b = new Bets();

            if (lp.NewGame == 1)  //start of new game. print Games object from previous game
            {
                //AT THIS POINT ALL GAME DETAILS FROM PREVIOUS GAME ARE IN g
                if (g.gameid != null)
                {
                    ////CosmosDb cosmosDb = new CosmosDb(url, key, g);
                    ////cosmosDb.GetStartedDemo(url, key, g).Wait();
                    ///


                    //using (StreamWriter sw2 = new StreamWriter(archivepath + "JSON\\" + g.gameid + ".json"))
                    //{
                    //    sw2.WriteLine(g);
                    //}

                    //StreamData streamData = new StreamData();
                    ////// cosmosDb.GetStartedDemo(url, key, g).Wait();
                    ////streamData.MainAsync(ga_Payload).Wait();
                    //streamData.MainAsync(g).Wait();

                    WriteOutput writeOutput = new WriteOutput(g, archivepath);

                    //Console.WriteLine(g.ToString());  //WRITE ENTIRE JSON OBJECT AS STRING

                    //MemoryStream ms = new MemoryStream();
                    //DataContractJsonSerializer j = new DataContractJsonSerializer(typeof(Games));
                    //j.WriteObject(ms, g);

                    //ms.Position = 0;
                    //StreamReader str = new StreamReader(ms);
                    //Console.Write("JSON form of Games object: ");
                    //Console.WriteLine(str.ReadToEnd());
                }

                //clear action level vars
                g.actions.Clear();
                g.seats.Clear();
                bets.Clear();

                Streetname    = "Pre-flop";
                GameActionCtr = 0;

                //assign game level vars
                g.gameid    = lp.GameId;
                g.timestamp = lp.TimeStamp;
                g.limits    = lp.Limits;
                g.sitename  = lp.SiteName;

                //TODO: REMOVE AFTER MOVING TO SAME SPOT AS JSON
                //prep output file
                //using (StreamWriter sw3 = new StreamWriter(archivepath + "Text\\" + g.gameid + ".txt"))
                //{
                //    sw3.WriteLine("GameId" + "|" + "Timestamp" + "|" + "SiteName" + "|" + "TableName" + "|" + "Limits" + "|" + "StreetName" + "|" + "GameActionId" + "|" + "Action" + "|" + "Player" + "|" + "Amount");//);

                //}

                ////delete file if it already exists for this game
                //using (StreamWriter sw = new StreamWriter(archivepath + "Verbose\\" + g.gameid + ".txt"))
                //{
                //    sw.WriteLine(line_in);
                //}
            }
            else if (lp.TableName != null)
            {
                g.tablename  = lp.TableName;
                g.buttonseat = lp.ButtonSeat;
            }
            else if (lp.Streetname != "" && lp.Action != null)  //assign Actions values
            {
                if (lp.Action == "SeatInfo")
                {
                    g.Addseats(new Seats {
                        playername = lp.Player, seatno = lp.Seatnumber
                    });
                    b.playername = lp.Player;
                    b.betsum     = 0;
                    bets.Add(b);
                }
                else
                {
                    if (actionFlag == 1)
                    {
                        //write action to output file
                        using (StreamWriter sw3 = new StreamWriter(archivepath + "Text\\" + g.gameid + ".txt", true))
                        {
                            if (lp.Action == "bet" || lp.Action == "blind" || lp.Action == "call" || lp.Action == "raise")
                            {
                                if (lp.Action == "raise")
                                {
                                    decimal raiseamt = lp.Amount - bets.Where(p => p.playername == lp.Player).First().betsum;
                                    bets.Where(p => p.playername == lp.Player).Select(u => { u.betsum = (u.betsum + raiseamt); return(u); }).ToList();
                                    lp.Amount = raiseamt;
                                }
                                else
                                {
                                    bets.Where(p => p.playername == lp.Player).Select(u => { u.betsum = (u.betsum + lp.Amount); return(u); }).ToList();
                                }
                            }

                            //TODO: REPLACE WITH CODE TO DESERIALIZE g (WITH JSON OUTPUT ABOVE)
                            //{
                            //    sw3.WriteLine(g.gameid.ToString() + "|" + g.timestamp.ToString() + "|" + g.sitename + "|" + g.tablename + "|" + g.limits + "|" + lp.Streetname + "|" + lp.GameActionCtr.ToString() + "|" + lp.Action + "|" + lp.Player + "|" + lp.Amount.ToString());//);

                            //    //Added to pass to Azure Event Hub
                            //    ga_payload ga_Payload = new ga_payload();

                            //    ga_Payload.gameid = g.gameid.ToString();
                            //    ga_Payload.timestamp = g.timestamp.ToString();
                            //    ga_Payload.sitename = g.sitename;
                            //    ga_Payload.tablename = g.tablename;
                            //    ga_Payload.limits = g.limits;
                            //    ga_Payload.streetname = lp.Streetname;
                            //    ga_Payload.gameactionid = lp.GameActionCtr;
                            //    ga_Payload.action = lp.Action;
                            //    ga_Payload.player = lp.Player;
                            //    ga_Payload.amount = lp.Amount;

                            //    //StreamData streamData = new StreamData();
                            //    ////// cosmosDb.GetStartedDemo(url, key, g).Wait();
                            //    ////streamData.MainAsync(ga_Payload).Wait();
                            //    //streamData.MainAsync(g).Wait();
                            //}
                        }
                    }

                    g.Addactions(new Actions {
                        GameActionId = lp.GameActionCtr, actor = lp.Player, action = lp.Action, amount = lp.Amount, streetname = lp.Streetname
                    });
                }
            }

            //Console.WriteLine(line_in);  NO NEED TO Write every line
        }