using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NiApiLib;

namespace NiRobot
{
    class NI
    {
        static void Main(string[] args)
        {
            Connection c = new Connection();
            c.Connect();
            Console.ReadLine();
            c.Disconnect();
        }
    }

    class Connection
    {
        NiApiLib.SrvrSession Session = new NiApiLib.SrvrSessionClass();
        NiApiLib.Transaction Trans = new NiApiLib.TransactionClass();
        NiApiLib.DataRow row = new NiApiLib.DataRowClass();
        public void Connect()
        {
            Session.HostAddr = "nidemo.mfd.ru";
            Session.HostPort = 2900;
            Session.Name = "AFedin";
            Session.Password = "12345";
            Session.CatalogName = "catalog.xml";
            Session.OnLogin += new _ISrvrSessionEvents_OnLoginEventHandler(Session_OnLogin);
            Session.Connect();
        }

        public void Disconnect()
        {
            Console.WriteLine("[System] Соединение разорвано");
            Session.Disconnect();
        }
        void Session_OnLogin(int LoginResult)
        {
            if (LoginResult == 0)
            {
                Trans.Open(Session, "ORDER", ETableType.tabAdrr); // Открываем транзакцию
                Console.WriteLine("[System] Транзакция открыта");
                row.Structure = Trans.Structure; //интерфейс для работы с описанием форматов транзакций.
                object ACCOUNT = "I_ACCOUNT";
                row.set_Item(ref ACCOUNT, "S01-00000F00"); // Номер счета
                object BUYSELL = "I_BUYSELL";
                row.set_Item(ref BUYSELL, "B");  // Направление: B = Покупка, S = Продажа
                object MKTLIMIT = "I_MKTLIMIT";
                row.set_Item(ref MKTLIMIT, "L"); // Тип: M = рыночная, L = лимитированная
                object SPLITFLAG = "I_SPLITFLAG";
                row.set_Item(ref SPLITFLAG, "S"); // Условие исполнения: S = разрешить по разным ценам, О = запретить по разным ценам
                object IMMCANCEL = "I_IMMCANCEL";
                row.set_Item(ref IMMCANCEL, " "); // Исполнение остатка: " "(пробел) = поставить в очередь, W = снять остаток, N = немедленно или отклонить
                object PRICEYIELDENTERTYPE = "I_PRICEYIELDENTERTYPE";
                row.set_Item(ref PRICEYIELDENTERTYPE, "P"); // Признак ввода значения цены: P = цена, Y = доходность, W = средневзвешенная цена
                object SECBOARD = "I_SECBOARD";
                row.set_Item(ref SECBOARD, "EQBR"); // Рынок (EQBR, MAIN…)
                object SECCODE = "I_SECCODE";
                row.set_Item(ref SECCODE, "LKOH"); // Код инструмента
                object PRICE = "I_PRICE";
                row.set_Item(ref PRICE, "1630"); // Цена
                object QUANTITY = "I_QUANTITY";
                row.set_Item(ref QUANTITY, "1"); // Количество
                object BROKERREF = "I_BROKERREF";
                row.set_Item(ref BROKERREF, "te/"); // Идентификатор клиента
                object USE_MARGIN = "I_USE_MARGIN";
                row.set_Item(ref USE_MARGIN, "119"); // Использовать маржу: 118 = использовать, 119 - не использовать.
                Trans.Execute(row); // Отправляем запрос на выполнение транзакции
                Console.WriteLine("[System] Выставление заявки");
            }
            else { Console.WriteLine("[System] Ошибка соединения"); }
        }
    }
}
