Exemplo n.º 1
0
        async Task <RescueTicket> CreateAsync(string user, RescueMode mode)
        {
            RescueTicket rescueTicket = null;

            using (DB db = await DB.CreateAsync(dbUrl))
            {
                var sb = new StringBuilder();
                foreach (var b in BitConverter.GetBytes(DateTime.Now.Ticks))
                {
                    sb.Append(b.ToString("X2"));
                }

                bool duplicate;
                int  tryCount = 0;
                do
                {
                    duplicate    = false;
                    rescueTicket = new RescueTicket
                    {
                        mode    = mode,
                        user_id = user,
                        id      = "ST-" + sb + StringExt.RandomSecureString(13),
                        code    = StringExt.RandomString(4, "0123456789")
                    };
                    try
                    {
                        if (!await rescueTicket.SaveAsync(db))
                        {
                            rescueTicket = null;
                        }
                    }
                    catch (MySql.Data.MySqlClient.MySqlException e)
                    {
                        rescueTicket = null;
                        // if the ticketId is already taken, try another
                        duplicate = (e.Number == 1062);
                        tryCount++;
                    }
                }while (duplicate && (tryCount < 10));
                if (rescueTicket == null)
                {
                    throw new Exception("Ticket create fails. Impossible generate a ticketId");
                }
            }
            return(rescueTicket);
        }
Exemplo n.º 2
0
 public async Task <RescueTicket> CreateRescueAsync(string user, RescueMode mode)
 {
     return(await CreateAsync(user, mode));
 }