Beispiel #1
0
        static void Main(string[] args)
        {
            int port = 8083;

            if (args.Length > 0)
            {
                port = int.Parse(args[0]);
            }
            string          localUrl   = string.Format("http://localhost:{0}/CommService", port);
            string          remoteUrl  = "http://localhost:8080/CommService";
            ReadClient      readClient = new ReadClient(localUrl, remoteUrl);
            ClientExtension fun        = new ClientExtension();

            readClient.addAct("keyQuery", fun.keyQuery());
            readClient.addAct("childrenQuery", fun.keysQuery());
            readClient.addAct("timeQuery", fun.keysQuery());
            readClient.addAct("specPatternQuery", fun.keysQuery());
            readClient.addAct("stringQuery", fun.keysQuery());
            if (readClient.readXmlFile("XMLFile1.xml"))
            {
                readClient.sendMessages();
            }
            Utilities.waitForUser();
            readClient.shutDown();
            Console.Write("\n\n");
        }
        static void Main(string[] args)
        {
            HiResTimer   timer    = new HiResTimer();
            Message      msg      = new Message();
            MessageMaker msgMaker = new MessageMaker();

            Console.Write("\nStarting Test Executive");
            Console.Write("\n=============================\n");
            Console.Title = "Read Client";
            ReadClient readClient = new ReadClient();

            if (args.Length == 2)
            {
                readClient.numMsg = Convert.ToInt32(args[1]);
            }
            readClient.processCommandLine(args);
            string   localPort = Util.urlPort(readClient.localUrl);
            string   localAddr = Util.urlAddress(readClient.localUrl);
            Receiver rcvr      = new Receiver(localPort, localAddr, timer);

            if (rcvr.StartService())
            {
                rcvr.doService(rcvr.defaultServiceAction());
            }
            Sender    sndr     = new Sender(readClient.localUrl); // Sender needs localUrl for start message
            XDocument xmlInput = readClient.GetInputFromXml();
            var       results  = xmlInput.Descendants("element");

            Console.Write("\n  sender's url is {0}", readClient.localUrl);
            Console.Write("\n  attempting to connect to {0}\n", readClient.remoteUrl);
            readClient.sendMessageToServer(results, timer, msgMaker, sndr, rcvr);
            //Wait until all messages from server are received.
            while (rcvr.count < readClient.numMsg)
            {
                sndr.SendReaderLatency(rcvr.totalExecutionTime / rcvr.count);
            }
            msg.content = "done";
            msg.fromUrl = readClient.localUrl;
            msg.toUrl   = readClient.remoteUrl;
            sndr.sendMessage(msg);
            Util.waitForUser();
            sndr.SendReaderLatency(rcvr.totalExecutionTime / rcvr.count);
            rcvr.shutDown();
            sndr.shutdown();
        }
 static void Main(string[] args)
 {
        HiResTimer hres = new HiResTimer(); //High Resolution Timer
     Console.Write("\nStarting CommService Read client");
     Console.Write("\n =============================\n");
     Console.Title = "Read Client";
     Message msg = new Message();
     ReadClient clnt = new ReadClient();
     clnt.processCommandLine(args);
     string localPort = Util.urlPort(clnt.localUrl);
     string localAddr = Util.urlAddress(clnt.localUrl);
     Receiver rcvr = new Receiver(localPort, localAddr);
     Action serviceAction = DefineServiceAction(hres, clnt, rcvr);
     if (rcvr.StartService())
         rcvr.doService(serviceAction);
     Sender sndr = new Sender(clnt.localUrl);  // Sender needs localUrl for start message         
     msg.fromUrl = clnt.localUrl;
     msg.toUrl = clnt.remoteUrl;
     Console.Write("Sender's url is {0}", msg.fromUrl);
     Console.Write("Attempting to connect to {0}\n", msg.toUrl);
     if (!sndr.Connect(msg.toUrl))
     {
         Console.Write("Could not connect in {0} attempts\n", sndr.MaxConnectAttempts);
         sndr.shutdown();
         rcvr.shutDown();
         return;
     }
     msg = PerformanceTest(hres, msg, clnt, sndr);
     // Wait for user to press a key to quit.
     Util.waitForUser();
     // shut down this client's Receiver and Sender by sending close messages
     rcvr.shutDown();
     sndr.shutdown();
     Console.Write("\n\n");
 }
 /// <summary>
 /// Define service action that needs to be handled for receiver requests at the client
 /// </summary>
 /// <param name="hres"></param>
 /// <param name="clnt"></param>
 /// <param name="rcvr"></param>
 /// <returns></returns>
 private static Action DefineServiceAction(HiResTimer hres, ReadClient clnt, Receiver rcvr)
 {
     return () =>
     {
         Message msg1 = null;
         while (true)
         {
             msg1 = rcvr.getMessage();
             if (msg1.content == "done")
             {
                 hres.Stop();
                 ulong lookUpTime = hres.ElapsedMicroseconds;
                 Message msg2 = new Message();
                 msg2.fromUrl = clnt.localUrl;
                 msg2.toUrl = clnt.wpfClientURL;
                 msg2.content = "LookupTime;" + lookUpTime + ";" + "CntMsg;" + (ulong)clnt.total + ";";
                 Sender wpfSender = new Sender(clnt.localUrl);
                 wpfSender.sendMessage(msg2);
                 Console.WriteLine("\n----------------------Overall Performance Statistics for Read Client-----------------------------\n");
                 Console.WriteLine("Number of messages processed is {0}", clnt.total);
                 Console.WriteLine("\nTotal Execution time for the messages to be processed at Client Side is {0} microsecs", clnt.ReadClientTime);
                 Console.WriteLine("\nAverage Execution time for the messages to be processed at Client Side is {0} microsecs", clnt.ReadClientTime / (ulong)clnt.total);
                 Console.WriteLine("\nTotal Execution time for the messages from Client-Server-Client {0} microsecs", lookUpTime);
                 Console.WriteLine("\nAverage Execution time for the messages from Client-Server-Client is {0} microsecs", lookUpTime / (ulong)clnt.total);
                 Console.WriteLine("\n----------------------Overall Performance Statistics for Read Client-----------------------------\n");
                 break;
             }
             else if (msg1.content == "connection start message")
                 Console.WriteLine("Connection start message receieved at client side");
             else
             {
                 XDocument docTemp = XDocument.Load(new StringReader(msg1.content));
                 string mid = docTemp.Descendants("OperationMessage").Elements("MessageID").Single().Value;
                 string op = docTemp.Descendants("OperationMessage").Elements("Operation").Single().Value;
                 string qt = docTemp.Descendants("OperationMessage").Elements("QueryType").Single().Value;
                 string resp = docTemp.Descendants("OperationMessage").Elements("Response").Single().Value;
                 Console.Write("\nMessage - MessageID:{0} received at the client", mid);
                 Console.Write("\nSender:{0}", msg1.fromUrl);
                 Console.Write("\nOperation :{0}", op);
                 Console.Write("\nQueryType :{0}", qt);
                 Console.Write("\nResponse :{0}", resp);
                 string oldDt = docTemp.Descendants("InsertTime").Select(i => i).Single().Value.ToString();
                 long microseconds = (DateTime.Now.Ticks - long.Parse(oldDt)) / 10;
                 Console.Write("\nExecution time for message(MessageID:{1}) is {0} microseconds\n", microseconds, mid);
             }
         }
         Util.waitForUser();
     };
 }
 /// <summary>
 ///  GetByKeyCriteria criteria for the query type 
 /// </summary>
 /// <param name="hres"></param>
 /// <param name="msg"></param>
 /// <param name="clnt"></param>
 /// <param name="sndr"></param>
 /// <param name="timerH"></param>
 /// <param name="docTemp"></param>
 /// <param name="msgid"></param>
 private static void GetByKeyCriteria(HiResTimer hres, Message msg, ReadClient clnt, Sender sndr, HiResTimer timerH, out XDocument docTemp, out string msgid)
 {
     docTemp = XDocument.Load("Input.xml");
     clnt.RemoveOtherReads(ref docTemp, "GetKeyCriteria");
     clnt.RemoveOtherWrites(ref docTemp, "GetKeyCriteria");
     XElement k = docTemp.Descendants("OperationMessage").Where(d => d.Element("QueryType").Value == "GetKeyCriteria").Select(j => j).Single();
     clnt.numMsgs = int.Parse(k.Elements("Count").Single().Value);
     clnt.total += clnt.numMsgs;
     hres.Start();
     timerH.Start();//High resolution timer started       
     msgid = "";
     for (int i = 0; i < clnt.numMsgs; i++)
     {
         docTemp = XDocument.Load("Input.xml");
         clnt.RemoveOtherReads(ref docTemp, "GetKeyCriteria");
         clnt.RemoveOtherWrites(ref docTemp, "GetKeyCriteria");
         msgid = clnt.msgRand++.ToString();
         XElement y = null;
         y = docTemp.Descendants("OperationMessage").Where(d => d.Element("QueryType").Value == "GetKeyCriteria").Select(j => j).Single();
         y.Elements("MessageID").Single().Value = msgid;
         y.Elements("InsertTime").Single().Value = DateTime.Now.Ticks.ToString();
         msg.content = docTemp.ToString();
         msg.fromUrl = clnt.localUrl;
         msg.toUrl = clnt.remoteUrl;
         if (sndr.sendMessage(msg))
         {
             Console.Write("Sent message(Message ID {0}) to GetCriteria from key\n", msgid);
             Thread.Sleep(50);
         }
     }
 }
 /// <summary>
 /// GetByMetadataCriteria criteria for the query type
 /// </summary>
 /// <param name="msg"></param>
 /// <param name="clnt"></param>
 /// <param name="sndr"></param>
 /// <param name="msgid"></param>
 /// <returns></returns>
 private static XDocument GetByMetadataCriteria(Message msg, ReadClient clnt, Sender sndr, ref string msgid)
 {
     XDocument docTemp = XDocument.Load("Input.xml");
     clnt.RemoveOtherReads(ref docTemp, "GetByMetadataCriteria");
     clnt.RemoveOtherWrites(ref docTemp, "GetByMetadataCriteria");
     XElement l = docTemp.Descendants("OperationMessage").Where(d => d.Element("QueryType").Value == "GetByMetadataCriteria").Select(j => j).Single();
     clnt.numMsgs = int.Parse(l.Elements("Count").Single().Value);
     clnt.total += clnt.numMsgs;
     for (int i = 0; i < clnt.numMsgs; i++)
     {
         docTemp = XDocument.Load("Input.xml");
         clnt.RemoveOtherReads(ref docTemp, "GetByMetadataCriteria");
         clnt.RemoveOtherWrites(ref docTemp, "GetByMetadataCriteria");
         msgid = clnt.msgRand++.ToString();
         XElement y = null;//GetByMetadataCriteria query carried out     
         y = docTemp.Descendants("OperationMessage").Where(d => d.Element("QueryType").Value == "GetByMetadataCriteria").Select(j => j).Single();
         y.Elements("MessageID").Single().Value = msgid;
         y.Elements("InsertTime").Single().Value = DateTime.Now.Ticks.ToString();
         msg.content = docTemp.ToString();
         msg.fromUrl = clnt.localUrl;
         msg.toUrl = clnt.remoteUrl;
         if (sndr.sendMessage(msg))
         {
             Console.Write("Sent message(Message ID {0}) to GetByMetadataCriteria from key\n", msgid);
             Thread.Sleep(50);
         }
     }
     return docTemp;
 }
 /// <summary>
 /// Performance testing by inserting queries
 /// </summary>
 /// <param name="hres"></param>
 /// <param name="msg"></param>
 /// <param name="clnt"></param>
 /// <param name="sndr"></param>
 /// <returns></returns>
 private static Message PerformanceTest(HiResTimer hres, Message msg, ReadClient clnt, Sender sndr)
 {
     XmlTextReader textReader = new XmlTextReader("Input.xml");
     HiResTimer timerH = new HiResTimer();
     if (File.Exists("Input.xml"))
     {
         XDocument docTemp;
         string msgid;
         //GetKeyCriteria
         GetByKeyCriteria(hres, msg, clnt, sndr, timerH, out docTemp, out msgid);
         //GetByMetadataCriteria
         docTemp = GetByMetadataCriteria(msg, clnt, sndr, ref msgid);
         //GetByTimeStampCriteria
         docTemp = GetByTimeStampCriteria(msg, clnt, sndr, ref msgid);
         docTemp = GetByKey(msg, clnt, sndr, ref msgid);                //GetByKey
         docTemp = GetChildren(msg, clnt, sndr, ref msgid);                //GetChildren
     }
     timerH.Stop();
     clnt.ReadClientTime = timerH.ElapsedMicroseconds;
     msg = new Message();
     msg.fromUrl = clnt.localUrl;
     msg.toUrl = clnt.remoteUrl;
     msg.content = "done";
     sndr.sendMessage(msg);
     return msg;
 }