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(); }
// 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(); }
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; }
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; } } }
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)); }