using System;
using System.Runtime.InteropServices;
namespace elbenchcs
{
public class Win32Interop
{
[DllImport("msvcrt.dll")]
public static extern int _kbhit();
[DllImport("winmm.dll", EntryPoint = "timeGetTime")]
public static extern uint timeGetTime();
}
///
/// Summary description for Class1.
///
public class elbenchcs
{
public int numMessagesReceived = 0;
public int m_testSpecialCases = 0;
///
/// The main entry point for the application.
///
[STAThread]
public static void Main(string[] args)
{
int receiveMode = 0;
int testSpecialCases = 0;
if (args.Length > 0)
{
receiveMode = Convert.ToInt32(args[0]);
}
if (args.Length > 1)
{
testSpecialCases = Convert.ToInt32(args[1]);
}
elbenchcs e = new elbenchcs();
e.Run(receiveMode, testSpecialCases);
}
public void Run(int receiveMode, int testSpecialCases)
{
VHMsg.Client vhmsg;
using (vhmsg = new VHMsg.Client())
{
vhmsg.OpenConnection();
Console.WriteLine("VHMSG_SERVER: {0}", vhmsg.Server);
Console.WriteLine("VHMSG_SCOPE: {0}", vhmsg.Scope);
int NUM_MESSAGES = 20000;
m_testSpecialCases = testSpecialCases;
if (receiveMode == 1)
{
vhmsg.MessageEvent += new VHMsg.Client.MessageEventHandler(MessageAction);
vhmsg.SubscribeMessage("elbench");
Console.WriteLine("Receive Mode");
if (testSpecialCases == 1)
{
Console.WriteLine("Testing special case messages");
while (Win32Interop._kbhit() == 0)
{
}
}
else
{
uint timeBefore = 0;
uint timeAfter;
while (Win32Interop._kbhit() == 0)
{
// we've received our first message
if (numMessagesReceived > 0 && timeBefore == 0)
{
timeBefore = Win32Interop.timeGetTime();
}
if (numMessagesReceived >= NUM_MESSAGES)
{
timeAfter = Win32Interop.timeGetTime();
Console.WriteLine("Time to receive {0} messages: {1}", NUM_MESSAGES, timeAfter - timeBefore);
numMessagesReceived = 0;
timeBefore = 0;
}
}
}
}
else
{
Console.WriteLine("Send Mode");
if (testSpecialCases == 1)
{
Console.WriteLine("Testing special case messages");
string s;
s = "Test Message: 'Single-Quote'";
Console.WriteLine("Sending " + s);
vhmsg.SendMessage("elbench " + s);
s = "Test Message: \"Double-Quote\"";
Console.WriteLine("Sending " + s);
vhmsg.SendMessage("elbench " + s);
s = "Test Message: [Bracket]";
Console.WriteLine("Sending " + s);
vhmsg.SendMessage("elbench " + s);
s = "Test Message: {Brace}";
Console.WriteLine("Sending " + s);
vhmsg.SendMessage("elbench " + s);
s = "Test Message: \\Backslash\\";
Console.WriteLine("Sending " + s);
vhmsg.SendMessage("elbench " + s);
s = "Test Message: /Slash/";
Console.WriteLine("Sending " + s);
vhmsg.SendMessage("elbench " + s);
s = "Test Message: (Parenthesis)";
Console.WriteLine("Sending " + s);
vhmsg.SendMessage("elbench " + s);
s = "Test Message: ";
Console.WriteLine("Sending " + s);
vhmsg.SendMessage("elbench " + s);
s = "Test Message: `Dunno what these are called`";
Console.WriteLine("Sending " + s);
vhmsg.SendMessage("elbench " + s);
s = "Test Message: \"~!@#$%^&*()_+\" - top row special characters";
Console.WriteLine("Sending " + s);
vhmsg.SendMessage("elbench " + s);
}
else
{
long timeBefore = Win32Interop.timeGetTime();
for (int i = 0; i < NUM_MESSAGES; i++)
{
vhmsg.SendMessage("elbench " + i + " Test Message");
if (i % 2000 == 0)
{
Console.WriteLine(i + " messages sent");
}
}
long timeAfter = Win32Interop.timeGetTime();
Console.WriteLine("Time to send {0} messages: {1}", NUM_MESSAGES, timeAfter - timeBefore);
}
}
}
}
private void MessageAction(object sender, VHMsg.Message args)
{
//Console.WriteLine( "Received Message '" + e.toString() + "'" );
//Ict.ElvinUtility eu = (Ict.ElvinUtility)sender;
if (m_testSpecialCases == 1)
{
Console.WriteLine("received - '" + args.s + "'");
}
else
{
numMessagesReceived++;
if (numMessagesReceived % 2000 == 0)
{
Console.WriteLine(numMessagesReceived + " messages received - '" + args.s + "'");
}
}
}
}
}