Files
mtapi/MTApiService/MtExpert.cs
T
2014-10-31 09:05:52 +02:00

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
}
}