115 lines
4.3 KiB
C#
115 lines
4.3 KiB
C#
using Prism.Commands;
|
|
using Prism.Mvvm;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Input;
|
|
using WolfOfWallStreet.Models;
|
|
using WolfOfWallStreet.Models.OnlinePlus;
|
|
using WolfOfWallStreet.Services;
|
|
using WolfOfWallStreet.Services.Contracts;
|
|
using MessageBox = HandyControl.Controls.MessageBox;
|
|
|
|
namespace WolfOfWallStreet.ViewModels
|
|
{
|
|
public class OnlinePlusControllerViewModel : ViewModelBase
|
|
{
|
|
private readonly IOnlinePlusService _onlinePlusService;
|
|
private readonly SettingsServices _settingsServices;
|
|
public int Stock { get; set; }
|
|
public OnlinePlusOrder OpOrder { get; set; } = new OnlinePlusOrder();
|
|
public bool Ordered = true;
|
|
public ICommand SendOrderCommand { get; set; }
|
|
public ICommand SelectSymbolCommand { get; set; }
|
|
public ICommand StopOrderCommand { get; set; }
|
|
public ICommand ClearOrdersCommand { get; set; }
|
|
|
|
private OnlinePlusSymbol _onlinePlusSymbol;
|
|
public OnlinePlusSymbol OnlinePlusSymbol
|
|
{
|
|
get { return _onlinePlusSymbol; }
|
|
set { SetProperty(ref _onlinePlusSymbol, value); }
|
|
}
|
|
private string _cookies;
|
|
public string Cookies
|
|
{
|
|
get { return _cookies; }
|
|
set { SetProperty(ref _cookies, value , nameof(Cookies)); }
|
|
}
|
|
|
|
private OnlinePlusAccount _account;
|
|
public OnlinePlusAccount Account
|
|
{
|
|
get { return _account; }
|
|
set { SetProperty(ref _account, value, nameof(Account)); }
|
|
}
|
|
|
|
public ObservableCollection<Symbol> Symbols { get; set; } = new ObservableCollection<Symbol>();
|
|
public ObservableCollection<OnlinePlusOrderResult> PlusOrderResults { get; set; } = new ObservableCollection<OnlinePlusOrderResult>();
|
|
public OnlinePlusControllerViewModel(IOnlinePlusService onlinePlusService, SettingsServices settingsServices)
|
|
{
|
|
_onlinePlusService = onlinePlusService;
|
|
_settingsServices = settingsServices;
|
|
_settingsServices.GetSymbols().ForEach(s => Symbols.Add(s));
|
|
|
|
}
|
|
|
|
public override void InitialCommand()
|
|
{
|
|
base.InitialCommand();
|
|
SendOrderCommand = new DelegateCommand(async () =>
|
|
{
|
|
Ordered = true;
|
|
for (int i = 0; i < 7; i++)
|
|
{
|
|
Thread thr = new Thread(Order);
|
|
thr.Start();
|
|
}
|
|
});
|
|
StopOrderCommand = new DelegateCommand(async () => { Ordered = false; });
|
|
SelectSymbolCommand = new DelegateCommand<Symbol>(async (symbol) =>
|
|
{
|
|
OnlinePlusSymbol = await _onlinePlusService.GetSymbolOrderBase(symbol, Stock);
|
|
});
|
|
ClearOrdersCommand = new DelegateCommand(()=>PlusOrderResults.Clear());
|
|
}
|
|
|
|
async void Order()
|
|
{
|
|
while (Ordered)
|
|
{
|
|
try
|
|
{
|
|
OpOrder.Cookies = Cookies;
|
|
if (string.IsNullOrEmpty(OpOrder.Cookies))
|
|
throw new Exception("کوکی های درخواست را وارد کنید");
|
|
OpOrder.orderCount = OnlinePlusSymbol.Quantity;
|
|
OpOrder.orderPrice = OnlinePlusSymbol.symbolinfo.ht;
|
|
OpOrder.isin = OnlinePlusSymbol.symbolinfo.nc;
|
|
OnlinePlusOrderResult res;
|
|
res = await _onlinePlusService.SendOrder(OpOrder);
|
|
if(res!=null)
|
|
Application.Current.Dispatcher.Invoke(() => PlusOrderResults.Add(res));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
MessageBox.Show(e.Message);
|
|
Ordered = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override bool SetProperty<T>(ref T storage, T value, string propertyName = null)
|
|
{
|
|
var flag = base.SetProperty(ref storage, value, propertyName);
|
|
if(propertyName==nameof(Cookies))
|
|
Account = _onlinePlusService.GetAccounTask(Cookies).Result;
|
|
return flag;
|
|
}
|
|
}
|
|
}
|