public void Post([FromBody] TransactionStruct value) { transQueue.Enqueue(value); if (pool == null) { pool = new Semaphore(1, 1); } if (mineThread == null || !mineThread.IsAlive) { mineThread = new Thread(DoMining); mineThread.Start(); } }
private void DoMining() { pool.WaitOne(); RestClient client = new RestClient(url); while (transQueue.Count > 0) { TransactionStruct inTrx = transQueue.Dequeue(); if (minUtils.ValidateTransaction(inTrx.sender, inTrx.receiver, inTrx.amount)) { RestRequest req = new RestRequest("api/Bank/GetBalance/" + inTrx.sender); IRestResponse resp = client.Get(req); float senderBalance = float.Parse(resp.Content); if (senderBalance >= inTrx.amount) { //insert transaction details Block newBlock = new Block(); newBlock.Amount = inTrx.amount; newBlock.SenderID = Convert.ToUInt32(inTrx.sender); newBlock.RecepientID = Convert.ToUInt32(inTrx.receiver); newBlock.Hash = ""; //get last block req = new RestRequest("api/Bank/GetLastBlock"); resp = client.Get(req); Block lastBlock = JsonConvert.DeserializeObject <Block>(resp.Content); newBlock.PrevHash = lastBlock.Hash; newBlock = minUtils.GenerateHash(newBlock);//create valid hash and add it to new block req = new RestRequest("api/Bank/SubmitBlock"); req.AddJsonBody(newBlock); client.Post(req);//send off } } } pool.Release(); }
public TransactionStatusStruct UpBalance(TransactionStruct uBalance) { TransactionStatusStruct status = new TransactionStatusStruct(); try { DateTime now = DateTime.Now; MySqlConnection connection = new MySqlConnection(ConnectionString); connection.Open(); MySqlCommand com = new MySqlCommand("select * from api_access where bundleID=sha1(@bundleID)", connection); //com.parameters.addwithvalue("@transactionid", ubalance.transactionid); com.Parameters.AddWithValue("@bundleID", uBalance.bundleID); //com.ExecuteNonQuery(); MySqlDataReader reader = com.ExecuteReader(); if (reader.HasRows) { connection.Close(); connection.Open(); com.CommandText = "select * from income_transaction where transactionID = @transactionID"; com.Parameters.AddWithValue("@transactionID", uBalance.transactionID); reader = com.ExecuteReader(); if (reader.HasRows == false) { connection.Close(); connection.Open(); com.CommandText = "insert into income_transaction (transactionID,userID,bundleID,amount,cdate,smartPayDate) values (@transactionID,@userID,sha1(@bundleID),@amount,@dateTimeNow,@smartPayDate)"; com.Parameters.AddWithValue("@userID", uBalance.userID); com.Parameters.AddWithValue("@amount", uBalance.amount); com.Parameters.AddWithValue("@dateTimeNow", now); com.Parameters.AddWithValue("@smartPayDate", uBalance.transactionDate); //com.ExecuteNonQuery(); com.ExecuteNonQuery(); //update users_balance set earningValue = earningValue + (select price from earnings_tariff where earningstpid = (select atypeID from announcement where announcementId=@advertID) ), udate=now() where userId=@userID and udate<DATE_FORMAT(now(), '%Y-%m-%d') connection.Close(); connection.Open(); com.CommandText = "update users_balance set balanceValue = balanceValue + @amount, cdate=@dateTimeNow where userID=@userID "; communication.sendNotificationAsync("Mədaxil", "Online odəmə sistemi ilə balansiniz artırldı", uBalance.userID); communication.sendPushNotificationAsync("Mədaxil", "Online odəmə sistemi ilə balansiniz artırldı", uBalance.userID); com.ExecuteNonQuery(); connection.Close(); //update users_balance set earningValue = earningValue + (select price from earnings_tariff where earningstpid = (select atypeID from announcement where announcementId=@advertID) ), udate=now() where userId=@userID and udate<DATE_FORMAT(now(), '%Y-%m-%d') status.response = "0"; status.transactionID = uBalance.transactionID; return(status); } status.transactionID = uBalance.transactionID; status.response = "2"; return(status); } status.transactionID = uBalance.transactionID; status.response = "3"; return(status); } catch (Exception ex) { status.response = $"Internal error: {ex.Message}"; return(status); } }
public TransactionStatusStruct UpBalance([FromBody] TransactionStruct obj) { PaymentInsert insert = new PaymentInsert(Configuration, _hostingEnvironment); return(insert.UpBalance(obj)); }