mirror of
https://github.com/vdemydiuk/mtapi.git
synced 2026-07-28 02:57:56 +00:00
158 lines
4.0 KiB
C#
Executable File
158 lines
4.0 KiB
C#
Executable File
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace MTApiService
|
|
{
|
|
public class MtExpert
|
|
{
|
|
public delegate void MtQuoteHandler(MtExpert expert, MtQuote quote);
|
|
|
|
#region Properties
|
|
private MtQuote _Quote;
|
|
public MtQuote Quote
|
|
{
|
|
get
|
|
{
|
|
lock (_locker)
|
|
{
|
|
return _Quote;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
lock(_locker)
|
|
{
|
|
_Quote = value;
|
|
}
|
|
|
|
if (QuoteChanged != null)
|
|
{
|
|
QuoteChanged(this, value);
|
|
}
|
|
}
|
|
}
|
|
public int Handle { get; private set; }
|
|
|
|
private volatile bool _IsEnable = true;
|
|
public bool IsEnable
|
|
{
|
|
get { return _IsEnable; }
|
|
private set { _IsEnable = value; }
|
|
}
|
|
|
|
private volatile bool _IsCommandExecutor = true;
|
|
public bool IsCommandExecutor
|
|
{
|
|
get { return _IsCommandExecutor; }
|
|
set { _IsCommandExecutor = value; }
|
|
}
|
|
|
|
public ICommandManager CommandManager
|
|
{
|
|
private get
|
|
{
|
|
lock (_locker)
|
|
{
|
|
return mCommandManager;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
lock (_locker)
|
|
{
|
|
mCommandManager = value;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Public Methods
|
|
public MtExpert(int handle, MtQuote quote, IMetaTraderHandler mtHandler)
|
|
{
|
|
Quote = quote;
|
|
Handle = handle;
|
|
mMtHadler = mtHandler;
|
|
}
|
|
|
|
public void Deinit()
|
|
{
|
|
IsEnable = false;
|
|
|
|
if (Deinited != null)
|
|
{
|
|
Deinited(this, EventArgs.Empty);
|
|
}
|
|
}
|
|
|
|
public void SendResponse(MtResponse response)
|
|
{
|
|
MtCommand command = mCommand;
|
|
mCommand = null;
|
|
|
|
ICommandManager commandManager = CommandManager;
|
|
if (commandManager != null)
|
|
{
|
|
commandManager.OnCommandExecuted(this, command, response);
|
|
}
|
|
}
|
|
|
|
public int GetCommandType()
|
|
{
|
|
if (IsCommandExecutor)
|
|
{
|
|
ICommandManager commandManager = CommandManager;
|
|
if (mCommandManager != null)
|
|
{
|
|
mCommand = mCommandManager.DequeueCommand();
|
|
}
|
|
}
|
|
|
|
return mCommand != null ? mCommand.CommandType : 0;
|
|
}
|
|
|
|
public object GetCommandParameter(int index)
|
|
{
|
|
if (mCommand != null && mCommand.Parameters != null
|
|
&& index >= 0 && index < mCommand.Parameters.Count)
|
|
{
|
|
return mCommand.Parameters[index];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
#endregion
|
|
|
|
#region IMtCommandExecutor
|
|
public void NotifyCommandReady()
|
|
{
|
|
SendTickToMetaTrader();
|
|
}
|
|
#endregion
|
|
|
|
|
|
#region Private Methods
|
|
private void SendTickToMetaTrader()
|
|
{
|
|
if (mMtHadler != null)
|
|
{
|
|
mMtHadler.SendTickToMetaTrader(Handle);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Events
|
|
public event EventHandler Deinited;
|
|
public event MtQuoteHandler QuoteChanged;
|
|
#endregion
|
|
|
|
#region Private Fields
|
|
private readonly IMetaTraderHandler mMtHadler;
|
|
private MtCommand mCommand;
|
|
private ICommandManager mCommandManager;
|
|
private readonly object _locker = new object();
|
|
#endregion
|
|
}
|
|
}
|