AlanMoonbase eac4631e12 Implemented First Currency Game - Stock Market
Reworked `GatewayService` To Use New Hub Command Set
Implemented User Directory
Changed Icon On Users Online Tab
2025-06-26 16:14:44 -07:00

178 lines
7.0 KiB
C#

using QtCNETAPI.Services.ApiService;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace qtc_net_client_2.Forms
{
public partial class StockMarketGame : Form
{
private IApiService _apiService;
private int StockPrice = 0;
public StockMarketGame(IApiService apiService)
{
_apiService = apiService;
InitializeComponent();
}
private async void StockMarketGame_Load(object sender, EventArgs e) => await InitializeStockMarketGame();
private async void btnRefresh_Click(object sender, EventArgs e) => await InitializeStockMarketGame();
private async void btnBuy_Click(object sender, EventArgs e)
{
if (nudStockBuySellAmount.Value > 0)
{
nudStockBuySellAmount.Enabled = false;
btnBuy.Enabled = false;
btnSell.Enabled = false;
btnRefresh.Enabled = false;
// buy stock
var amountToBuy = int.Parse(nudStockBuySellAmount.Value.ToString());
var result = await _apiService.BuyStock(amountToBuy);
if (result != null && result.Success && result.Data != null)
{
lblStockCount.Text = $"Your Stock Count - {result.Data.StockAmount}";
_apiService.CurrentUser.StockAmount = result.Data.StockAmount;
_apiService.CurrentUser.CurrencyAmount = result.Data.CurrencyAmount;
Main? mainWindow = (Main?)Application.OpenForms[0];
if (mainWindow != null)
{
if (mainWindow.InvokeRequired)
{
mainWindow.Invoke(mainWindow.RefreshCurrencyCounter);
}
else
{
mainWindow.RefreshCurrencyCounter();
}
}
nudStockBuySellAmount.Enabled = true;
nudStockBuySellAmount.Value = 0;
btnBuy.Enabled = true;
btnSell.Enabled = true;
btnRefresh.Enabled = true;
}
else
{
MessageBox.Show("Buy Failed. Either You Don't Have Enough Q's Or A Server Side Error Occured.", "Oops.", MessageBoxButtons.OK, MessageBoxIcon.Error);
nudStockBuySellAmount.Enabled = true;
nudStockBuySellAmount.Value = 0;
btnBuy.Enabled = true;
btnSell.Enabled = true;
btnRefresh.Enabled = true;
}
}
}
private async void btnSell_Click(object sender, EventArgs e)
{
if(nudStockBuySellAmount.Value > 0)
{
nudStockBuySellAmount.Enabled = false;
btnBuy.Enabled = false;
btnSell.Enabled = false;
btnRefresh.Enabled = false;
// sell stock
var amountToSell = int.Parse(nudStockBuySellAmount.Value.ToString());
var result = await _apiService.SellStock(amountToSell);
if (result != null && result.Success && result.Data != null)
{
lblStockCount.Text = $"Your Stock Count - {result.Data.StockAmount}";
_apiService.CurrentUser.StockAmount = result.Data.StockAmount;
_apiService.CurrentUser.CurrencyAmount = result.Data.CurrencyAmount;
Main? mainWindow = (Main?)Application.OpenForms[0];
if (mainWindow != null)
{
if (mainWindow.InvokeRequired)
{
mainWindow.Invoke(mainWindow.RefreshCurrencyCounter);
}
else
{
mainWindow.RefreshCurrencyCounter();
}
}
nudStockBuySellAmount.Enabled = true;
nudStockBuySellAmount.Value = 0;
btnBuy.Enabled = true;
btnSell.Enabled = true;
btnRefresh.Enabled = true;
} else
{
MessageBox.Show("Sell Failed. Either You Don't Have Enough Stock Or A Server Side Error Occured.", "Oops.", MessageBoxButtons.OK, MessageBoxIcon.Error);
nudStockBuySellAmount.Enabled = true;
nudStockBuySellAmount.Value = 0;
btnBuy.Enabled = true;
btnSell.Enabled = true;
btnRefresh.Enabled = true;
}
}
}
private async Task InitializeStockMarketGame()
{
var currentStockPriceResult = await _apiService.GetCurrentStockPrice();
if (currentStockPriceResult != null && currentStockPriceResult.Success)
{
lblCurrentStockPrice.Text = $"Current Price Per Stock Is {currentStockPriceResult.Data} Q's";
lblStockCount.Text = $"Your Stock Count - {_apiService.CurrentUser.StockAmount}";
switch (currentStockPriceResult.Data)
{
case < 49:
lblMarketStatus.Text = "not good cheif :(";
lblMarketStatus.ForeColor = Color.Red;
break;
case < 99:
lblMarketStatus.Text = "its aight :/";
lblMarketStatus.ForeColor = Color.DarkGreen;
break;
case < 149:
lblMarketStatus.Text = "its good :)";
lblMarketStatus.ForeColor = Color.Green;
break;
case < 199:
lblMarketStatus.Text = "very good :D";
lblMarketStatus.ForeColor = Color.Blue;
break;
case > 200:
lblMarketStatus.Text = "$ AWESOME $";
lblMarketStatus.ForeColor = Color.LightGreen;
break;
default:
lblMarketStatus.Text = "Cannot Determine";
lblMarketStatus.ForeColor = Color.White;
break;
}
nudStockBuySellAmount.Enabled = true;
btnBuy.Enabled = true;
btnSell.Enabled = true;
btnRefresh.Enabled = true;
}
else
{
MessageBox.Show("The Stock Market Endpoint Could Not Be Reached. Please Check Your Internet Connection", "Uh Oh.", MessageBoxButtons.OK, MessageBoxIcon.Error);
Close();
}
}
}
}