//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
// 
using System;
using System.Runtime.InteropServices;

namespace Bench
{
	/// <summary>
	/// Podsumowanie dla UnmanagedTcpTest.
	/// </summary>
	class UnmanagedNetworking
	{
		[DllImport("UnmanagedNetworking.dll")]
		public static extern void SynchTcpTest(string server, int port, int nPackets, int packetSize);
		[DllImport("UnmanagedNetworking.dll")]
		public static extern void SynchUdpTest(string server, int port, int nPackets, int packetSize);
		[DllImport("UnmanagedNetworking.dll")]
		public static extern int Start();
		[DllImport("UnmanagedNetworking.dll")]
		public static extern int TransmitByteCount();
		[DllImport("UnmanagedNetworking.dll")]
		public static extern int ReceivedByteCount();
		[DllImport("UnmanagedNetworking.dll")]
		public static extern double Elapsed();
		[DllImport("UnmanagedNetworking.dll")]
		public static extern void Stop();
	}

	public class UnmanagedTcpTest : NetworkTest
	{
		public UnmanagedTcpTest(string server, int port, int numberOfPackets, int packetSize) :
			base(server, port, numberOfPackets, packetSize)
		{
			UnmanagedNetworking.SynchTcpTest(Server, Port, NumberOfPackets, PacketSize);
		}
		public override void Start()
		{
			// Wykonanie testu
			StartCounters();
			int startTime = Environment.TickCount;
			
			UnmanagedNetworking.Start();

			int endTime = Environment.TickCount;
			StopCounters();

			TransmitByteCount = UnmanagedNetworking.TransmitByteCount();
			ReceivedByteCount = UnmanagedNetworking.ReceivedByteCount();
			Elapsed = (float)UnmanagedNetworking.Elapsed();

			UnmanagedNetworking.Stop();
		}
	}
}
