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


//============================================================================
// События _ITableEventsFast аналогичны _ItableEvents с разницей в том,
// что данные передаются через SafeArray, в результате чего отсутствует
// необходимость преобразования типов из IDispatch(весьма тяжелая операция). 
//
// Методы IDataRowSet2 - Получает строки в виде SafeArray.
// По умолчанию скрипт получает только обновления, если вы хотите получать даные
// через getdata, то просто снимите все комментарии. 
//============================================================================
namespace Fast
{
	class Program
	{
		static void Main(string[] args)
		{
			connection c = new connection();
			c.connect();
			Console.ReadLine();
		}
	}
	class connection
	{
	NiApiLib.SrvrSession Session= new NiApiLib.SrvrSessionClass();
	NiApiLib.TableClass tbl = new NiApiLib.TableClass();
	//NiApiLib.Filter filt = new NiApiLib.FilterClass();

	public void connect()
	{
		Session.HostAddr = "online.mfd.ru";
		Session.HostPort = 2700;
		Session.Name = "";
		Session.Password = "";
		Session.CatalogName = "catalog.xml";
		Session.OnLogin += new _ISrvrSessionEvents_OnLoginEventHandler(Session_OnLogin);
		tbl._ITableEventsFast_Event_OnData+=new _ITableEventsFast_OnDataEventHandler(Fast_Event_OnData);
		tbl._ITableEventsFast_Event_OnInsert+=new _ITableEventsFast_OnInsertEventHandler(	tbl__ITableEventsFast_Event_OnInsert);
		Session.Connect();
	}
	
	public void Session_OnLogin(int LoginResult)
	{
		if (LoginResult == 0)
			{
				tbl.Open(Session, "MSS", ETableType.tabNoneAddr); 
				Console.WriteLine("Таблица открыта");
				//filt.Structure = tbl.Structure;
				tbl.SetOnlineUpdates(ESubscribtion.subEnabled);
				//object NAME = "I_NAME";
				//object lkoh = "ЛУКОЙЛ";
				//filt.Add(ref NAME, ECondition.conEqual, ref lkoh);
				//tbl.GetData(filt);
			}
		else
		{
			Console.WriteLine("Ошибка подключения");
		}
	}
	
	public void Fast_Event_OnData(int Code, object DataRowSet, string TableName)
	{
        foreach (string[] s in (string[])DataRowSet)
        {
            foreach (string ss in s)
            {

            }
        }
		for (var i = 1; i <= 200; i++)
		{
			for (var j = 1; j <= 5; j++)
			{
				var test = (((string[,])DataRowSet).GetValue(i, j));
				Console.Write(test);
				Console.Write(" ");
			}
			Console.WriteLine();
		}
	}

	public void tbl__ITableEventsFast_Event_OnInsert(object datarow, string tablename)
	{
		for (var j = 1; j <= 5; j++)
			{
				var test = (((string[])datarow).GetValue(j));
				Console.Write(test);
				Console.Write(" ");
			}
			Console.WriteLine();
	}
}
}