コード例 #1
0
        private static void CleanTaskDatabase()
        {
            IEnumerable <ResponseTipTask> enumerator = dbContext.ResponseTipTasks.AsEnumerable();

            foreach (ResponseTipTask task in enumerator)
            {
                if (task != null)
                {
                    if (task.twitterUserNameSelected == null)
                    {
                        dbContext.ResponseTipTasks.Remove(task);
                        string line = "Deleted Task" + ": " + task.ResponseTipTaskID + "    " + task.twitterUserNameSelected;
                        backendLogger.LogLine(line, Logger.log_types.MESSAGE_LOG);
                    }
                    else if (!BtcHandlingClass.IsAddressValidAndMine(task.BitcoinPublicAdress))
                    {
                        dbContext.ResponseTipTasks.Remove(task);
                        backendLogger.LogLine("Deleted Task" + ": " + task.ResponseTipTaskID + " because bitcoin address " + task.BitcoinPublicAdress + " is not valid or mine", Logger.log_types.WARNING_LOG);
                    }
                    else
                    {
                        //                        string line = "Task" + ": " + task.ResponseTipTaskID + "    " + task.twitterUserNameSelected;
                        //                        backendLogger.LogLine(line, Logger.log_types.MESSAGE_LOG);
                    }
                }
            }
            dbContext.SaveChanges();
        }
コード例 #2
0
        //        private static responseTipTaskContext responseTipDatabase = new responseTipTaskContext();



        static void Main(string[] args)
        {
            string directoryPath = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()));

            backendLogger.SetPath(directoryPath);

            Startup.Configuration();

            backendLogger.LogLine("Backend_main configured...continuing", Logger.log_types.MESSAGE_LOG);

            arbiterFinder = new ArbiterFinder(dbContext);

            //      CleanTaskDatabase();

            //            decimal dollarPrice=externalAPIs.CallForBitcoinAverageDollarPrice();

            StateUpdateManager responseTipStateUpdateManager = new StateUpdateManager(typeof(TaskStatusesEnum));
            int responseTipStatesToUpdate = 0;

            StateUpdateManager textAnswerValidationUpdateManager = new StateUpdateManager(typeof(ArbiterTaskStatusesEnum));
            int textAnswerValidationStatesToUpdate = 0;

            while (true)//infinite loop
            {
                if (BtcHandlingClass.IsNextBlock())
                {
                    backendLogger.LogLine("New Block", Logger.log_types.MESSAGE_LOG);
                    responseTipStateUpdateManager.NewBlock();
                }

                BtcHandlingClass.UpdateKeyPool(ConfigurationManager.AppSettings["Bitcoin_WalletPassword"]);

                responseTipStatesToUpdate = responseTipStateUpdateManager.StatesToUpdateNow();
                responseTipStatePusherCycle(responseTipStatesToUpdate);

                textAnswerValidationStatesToUpdate = textAnswerValidationUpdateManager.StatesToUpdateNow();
                textAnswerValidationStatePusherCycle(textAnswerValidationStatesToUpdate);


                //reloads data from database
                var context = ((IObjectContextAdapter)dbContext).ObjectContext;

                /*                var refreshableObjects = (from entry in context.ObjectStateManager.GetObjectStateEntries(
                 *                                                         EntityState.Added
                 | EntityState.Deleted
                 | EntityState.Modified
                 | EntityState.Unchanged)
                 |                                        where entry.EntityKey != null
                 |                                        select entry.Entity).ToList();
                 */
                var refreshableObjects = dbContext.ChangeTracker.Entries().Select(c => c.Entity).ToList();
                context.Refresh(RefreshMode.StoreWins, refreshableObjects);
            }

            dbContext.TextAnswerValidationTasks.Load();


//            dbContext.Dispose();
//          dbContext = new ApplicationDbContext();
        }
コード例 #3
0
        public static void TaskQuestionAskedExpired(ResponseTipTask task)
        {
            decimal addressBalance = BtcHandling.BtcHandlingClass.CheckAdressBalance(task.BitcoinPublicAdress);

            BtcHandlingClass.SendFromAndToAddress(task.BitcoinPublicAdress, task.BitcoinReturnPublicAddress, addressBalance, ConfigurationManager.AppSettings["Bitcoin_WalletPassword"]);
            task.taskStatus = TaskStatusesEnum.responseTip_closed;
        }
コード例 #4
0
        public static void TaskNotPaid(ResponseTipTask task)
        {
            //            backendLogger.LogLine(""+task.ResponseTipTaskID, Logger.log_types.MESSAGE_LOG);
            decimal addressBalance = BtcHandling.BtcHandlingClass.CheckAdressBalance(task.BitcoinPublicAdress);

            if (addressBalance == task.BitcoinPrice)
            {
                task.taskStatus = TaskStatusesEnum.responseTip_paid;
            }
            else if (addressBalance > task.BitcoinPrice + BtcHandlingClass.UpdateEstimatedTxFee()) //if amount higher than neccessary and difference higher than txfee --return it to return address
            {
                BtcHandlingClass.SendFromAndToAddress(task.BitcoinPublicAdress, task.BitcoinReturnPublicAddress, addressBalance - task.BitcoinPrice, ConfigurationManager.AppSettings["Bitcoin_WalletPassword"]);
                task.taskStatus = TaskStatusesEnum.responseTip_paid;
            }
            else if (addressBalance > task.BitcoinPrice) //if amount higher than neccessary but difference lower than txfee --let it be
            {
                task.taskStatus = TaskStatusesEnum.responseTip_paid;
            }
            else if (addressBalance < task.BitcoinPrice) // if its lower then check if not expired
            {
                TimeSpan timeElapsedFromCreation = DateTime.Now.Subtract(task.timeCreated);
                if (timeElapsedFromCreation.TotalDays > taskNotPaidExpirationTime)
                {
                    task.taskStatus = TaskStatusesEnum.responseTip_notPaid_expired;
                }
            }
        }
コード例 #5
0
        public ActionResult Create([Bind(Include = "ResponseTipTaskID,question,twitterUserNameWritten,BitcoinReturnPublicAddress,DollarPrice,isQuestionPublic,ArbiterCount")] ResponseTipTask responseTipTask)
        {
            responseTipTask.BitcoinPublicAdress = BtcHandlingClass.GetNewBtcAdress();
            responseTipTask.BitcoinPrice        = responseTipTask.DollarPrice / externalAPIs.UpdateBitcoinAverageDollarPrice();
            decimal estimatedTxFee = BtcHandlingClass.UpdateEstimatedTxFee();

            responseTipTask.BitcoinPrice += estimatedTxFee;
            ModelState.Clear();
            TryValidateModel(responseTipTask);

            if (ModelState.IsValid)
            {
                responseTipTask.taskStatus = TaskStatusesEnum.responseTip_created;
                responseTipTask.userName   = User.Identity.GetUserId();

                responseTipTask.timeCreated       = DateTime.Now;
                responseTipTask.timeQuestionAsked = DateTime.MinValue;
                db.ResponseTipTasks.Add(responseTipTask);
                db.SaveChanges();
                return(RedirectToAction("FindUser", new { id = responseTipTask.ResponseTipTaskID }));
            }
            return(View(responseTipTask));
        }