static void Main(string[] args) { Util.verbose = false; Server srvr = new Server(); srvr.ProcessCommandLine(args); Console.Title = "Server: " + srvr.port.ToString(); Console.Write(String.Format("\n Starting CommService server listening on port {0}", srvr.port)); Console.Write("\n ====================================================\n"); Sender sndr = new Sender(Util.makeUrl(srvr.address, srvr.port)); //Sender sndr = new Sender(); Receiver rcvr = new Receiver(srvr.port, srvr.address); // - serviceAction defines what the server does with received messages // - This serviceAction just announces incoming messages and echos them // back to the sender. // - Note that demonstrates sender routing works if you run more than // one client. if (rcvr.StartService()) { rcvr.doService(doserviceAction(sndr, rcvr, srvr)); // This serviceAction is asynchronous, } // so the call doesn't block. Util.waitForUser(); }
public void parse(XDocument newDoc, ref Message msg, Sender sndr) { Console.WriteLine(newDoc.ToString()); Console.WriteLine(); var root = newDoc.Root.Elements("DB"); foreach (XElement Root in root) { string keytype, payloadtype = ""; keytype = Root.Element("KeyType").Value.ToString(); payloadtype = Root.Element("PayloadType").Value.ToString(); msg.content = "keytype," + keytype + ",payloadtype," + payloadtype; Console.WriteLine("\n" + msg.content); var query = Root.Elements("Query"); IEnumerator<XElement> x = query.GetEnumerator(); string message = new String(msg.content.ToCharArray()); while (x.MoveNext()) { msg.content += ",query,"; string querytype = ""; querytype = x.Current.Element("QueryType").Value.ToString(); msg.content += "querytype," + querytype; parseQuery(querytype, x, ref msg, sndr); msg.content = message; } } }
private static void parseQuery(string querytype, IEnumerator<XElement> x, ref Message msg1, Sender sndr) { Message msg = new Message(); msg.fromUrl = msg1.fromUrl; msg.toUrl = msg1.toUrl; msg.content = msg1.content.ToString(); switch (querytype) { case "Search Key-Value": search_key_value(x, ref msg, sndr); break; case "Search Children": search_children(x, ref msg, sndr); break; case "Pattern Matching": pattern_matching(x, ref msg, sndr); break; case "String in Metadata": string_metadata(x, ref msg, sndr); break; case "Time-Date Interval": time_date_interval(x, ref msg, sndr); break; case "Restore": restore_database(x, ref msg, sndr); break; } }
public void sendEachRequest(XElement request,TestExec clnt, Message msg, Sender sndr, Receiver rcvr, MessageMaker testExecInput) {//send each request to construct xml request message and send it to the server msg = new Message(); msg = testExecInput.makeMessage(clnt.localUrl, clnt.remoteUrl, request); if (!sndr.Connect(msg.toUrl)) { Console.Write("\n could not connect in {0} attempts", sndr.MaxConnectAttempts); sndr.shutdown(); rcvr.shutDown(); return; } while (true) { //msg.content = "Message #" + (++counter).ToString(); Console.Write("\n============Start of the Message==========\n"); Console.Write("\n Sending Message:"); Console.Write("\n==========================\n"); Console.WriteLine(msg.content); Console.WriteLine("==================End of Message==============="); if (!sndr.sendMessage(msg)) return; Thread.Sleep(100); break; } }
static void Main(string[] args) { Console.Write("\n starting CommService client"); Console.Write("\n =============================\n"); HiResTimer timerReader = new HiResTimer(); Client clnt = new Client(); clnt.processCommandLine(args); string localPort = args[0]; clnt.localUrl = "http://localhost:" + localPort + "/CommService"; string localAddr = Util.urlAddress(clnt.localUrl); Receiver rcvr = new Receiver(localPort, localAddr); rcvr.setTimerFromClient(timerReader); clnt.startRcvrService(rcvr); Sender sndr = new Sender(clnt.localUrl); // Sender needs localUrl for start message MessageMaker readerInput = new MessageMaker(); string fileName = ".\\ReaderClientInput.xml"; Message msg = new Message(); int numRequests = Convert.ToInt32(args[1]); XDocument xmldoc = XDocument.Load(fileName); var requests = xmldoc.Descendants("Request"); int requestCount = 0, i = 0; List<XElement> totalrequest = new List<XElement>(); while (i < numRequests) { //set the specified number of requests to send totalrequest.Add(requests.ElementAt(i)); i++;} timerReader.Start(); foreach (var request in totalrequest) { //send each request to the message maker to create a message msg = new Message(); msg = readerInput.makeMessage(clnt.localUrl, clnt.remoteUrl, request); Console.Title = "Reader Client to query the NoSQl database: Querying " + (++requestCount) + " requests"; if (!sndr.Connect(msg.toUrl)) { //send url of the destination to the sender Console.Write("\n could not connect in {0} attempts", sndr.MaxConnectAttempts); sndr.shutdown(); rcvr.shutDown(); return; } Thread.Sleep(700); while (true) { clnt.printMessage(msg); //print the message contents if (!sndr.sendMessage(msg)) // send the message to the sender return; Thread.Sleep(100); break;} sndr.sendLatencyReader(rcvr.avgLatency);} Console.Write("\n Sender's url is {0}", msg.fromUrl); Console.Write("\n Attempting to connect to {0}\n", msg.toUrl); msg.content = "done"; sndr.sendMessage(msg); Util.waitForUser(); rcvr.shutDown(); sndr.shutdown(); } } }
static void Main(string[] args) { Console.Write("\n starting CommService client"); Console.Write("\n =============================\n"); Client clnt = new Client(); clnt.processCommandLine(args); string localPort = Util.urlPort(clnt.localUrl); string localAddr = Util.urlAddress(clnt.localUrl); Receiver rcvr = new Receiver(localPort, localAddr); Console.Title = "Write Client: " + localPort; if (rcvr.StartService()) rcvr.doService(doserviceAction(rcvr)); Sender sndr = new Sender(clnt.localUrl); // Sender needs localUrl for start message Message msg = new Message(); msg.fromUrl = clnt.localUrl; msg.toUrl = clnt.remoteUrl; Console.Write("\n sender's url is {0}", msg.fromUrl); Console.Write("\n attempting to connect to {0}\n", msg.toUrl); if (!sndr.Connect(msg.toUrl)) { Console.Write("\n could not connect in {0} attempts", sndr.MaxConnectAttempts); shutdown(rcvr, sndr); return; } "Reading write1.xml file".title(); string path = Path.GetFullPath("../../../Write Client/bin/Debug/write1.xml"); XDocument newDoc = XDocument.Load(path); clnt.write_clinet_parse.Start(); Parser p = new Parser(logger_flag); p.parse(newDoc, ref msg, sndr); Message msg1 = new Message(); msg1.fromUrl = clnt.localUrl; msg1.toUrl = clnt.remoteUrl; msg1.content = "done"; sndr.sendMessage(msg1); clnt.write_clinet_parse.Stop(); Message msg2 = new Message(); msg2.fromUrl = clnt.localUrl; msg2.toUrl = clnt.remoteUrl; msg2.content = "write-client," + clnt.write_clinet_parse.ElapsedMicroseconds; sndr.sendMessage(msg2); Console.WriteLine("\n\nWrite-Client Processing Time: " + clnt.write_clinet_parse.ElapsedMicroseconds + " microseconds\n"); // Wait for user to press a key to quit. // Ensures that client has gotten all server replies. Util.waitForUser(); // shut down this client's Receiver and Sender by sending close messages shutdown(rcvr, sndr); Console.Write("\n\n"); }
/// <summary> /// Proces wheh the response has been received /// </summary> /// <param name="srvr"></param> /// <param name="sndr"></param> /// <param name="msg"></param> /// <param name="msgid"></param> private static void ProcessResponse(Server srvr, Sender sndr, ref Message msg, ref string msgid) { HiResTimer hres = new HiResTimer(); //High Resolution Timer hres.Start(); XDocument doc = XDocument.Load(new StringReader(msg.content)); string op = doc.Descendants("Operation").Select(i => i).Single().Value; if (op == "Read") srvr.ProcessReadMessage(ref msg, ref msgid); else srvr.ProcessMessage(ref msg, ref msgid); hres.Stop(); Console.WriteLine("Server execution time for processing message(MsgID:{0}) is {1} microseconds \n", msgid, hres.ElapsedMicroseconds); Util.swapUrls(ref msg); // swap urls for outgoing message if (srvr.tot.ContainsKey(msg.toUrl)) { ulong x = ulong.Parse(srvr.tot[msg.toUrl].ToString()); x += hres.ElapsedMicroseconds; srvr.tot[msg.toUrl] = x.ToString(); } else srvr.tot[msg.toUrl] = hres.ElapsedMicroseconds; sndr.sendMessage(msg); }
//---------< send test performance data to WPF client >------- private static void send_test_result(ref Message msg, ref ulong read_clnt_latency_time, ulong write_clnt_process_time, ulong server_throughput_time, int counter_read, int counter_write, Sender sndr) { msg.content = "test-result"; if (counter_write > 0) msg.content += ", average write-client processing time is: " + (write_clnt_process_time / Convert.ToUInt64(counter_write)) + "microseconds"; if (counter_read > 0) msg.content += ", average read-client latency time is: " + (read_clnt_latency_time / Convert.ToUInt64(counter_read)) + "microseconds"; if (counter_read > 0 || counter_write > 0) msg.content += ", average Server Query Processing/Throughput Time is: " + (server_throughput_time / Convert.ToUInt64((counter_read + counter_write)) + "microseconds"); else msg.content += ", performance tests yet to finish"; Util.swapUrls(ref msg); Console.WriteLine("\n\n Sending Message: " + msg.content + "\n\n"); sndr.sendMessage(msg); }
static void Main(string[] args) { try { HiResTimer hres = new HiResTimer(); //High Resolution Timer Console.Write("\nStarting CommService write client"); Console.Write("\n =============================\n"); Console.Title = "Write Client"; Message msg = new Message(); WriterClient clnt = new WriterClient(); 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; } PerformanceTesting(hres, msg, clnt, rcvr, sndr); } catch (CustomException ex) { throw new CustomException("Error in main of writer client", ex); } }
/// <summary> /// UpdatePerformance for the client /// </summary> /// <param name="msg"></param> /// <param name="clnt"></param> /// <param name="sndr"></param> /// <param name="xmlStr"></param> /// <param name="docTemp"></param> /// <param name="key"></param> /// <param name="msgid"></param> /// <param name="keyUp"></param> /// <param name="l"></param> private static void UpdatePerformance(Message msg, WriterClient clnt, Sender sndr, ref string xmlStr, out XDocument docTemp, string key, ref string msgid, out string keyUp, out XElement l) { //Update performance testing docTemp = XDocument.Load("Input.xml"); keyUp = ""; l = docTemp.Descendants("OperationMessage").Where(d => d.Element("Operation").Value == "Update").Select(i => i).Single(); clnt.numMsgs = int.Parse(l.Elements("Count").Single().Value); clnt.total += clnt.numMsgs; for (int i = 0; i < clnt.numMsgs; i++) { if (key == "") keyUp = "2"; else keyUp = key; xmlStr = clnt.UpdateGenerator(docTemp, ref msgid, ref keyUp, ""); //Generate data using the xml structure msg.content = xmlStr; if (clnt.loggingCheck == true) Console.Write("Sending Message..Message is \n {0} \n", msg.content); else Console.Write("Sending Message..Message(Message ID:{0})\n", msgid); if (sndr.sendMessage(msg)) { Console.Write("\nUpdated entries in DB - Key:{0} ,MessageID: {1} successfully\n", key, msgid); Thread.Sleep(50); } } }
static void Main(string[] args) { Util.verbose = false; Server srvr = new Server(); srvr.ProcessCommandLine(args); Console.Title = "Server"; Console.Write(String.Format("\n Starting CommService server listening on port {0}", srvr.port)); Console.Write("\n ====================================================\n"); Sender sndr = new Sender(Util.makeUrl(srvr.address, srvr.port)); Receiver rcvr = new Receiver(srvr.port, srvr.address); // - serviceAction defines what the server does with received messages // - This serviceAction just announces incoming messages and echos them // back to the sender. // - Note that demonstrates sender routing works if you run more than // one client. Action serviceAction = () => { Message msg = null; while (true) { msg = rcvr.getMessage(); // note use of non-service method to deQ messages Console.Write("\n Received message:"); Console.Write("\n sender is {0}", msg.fromUrl); //Console.Write("\n content is {0}\n", msg.content); if (msg.content == "connection start message") { continue; // don't send back start message } if (msg.content == "done") { Console.Write("\n client has finished\n"); continue; } if (msg.content == "closeServer") { Console.Write("received closeServer"); break; } if (msg.content.Contains("Writer")) { int avg = srvr.Ttime.Sum() / srvr.Ttime.Count(); string lat = string.Join(null, System.Text.RegularExpressions.Regex.Split(msg.content, "[^\\d]")); Message msgToWpf = new Message(); msgToWpf.fromUrl = Util.makeUrl(srvr.address, srvr.port); msgToWpf.toUrl = Util.makeUrl("localhost", "8089"); msgToWpf.content = msg.content + " microseconds for Client: " + msg.fromUrl.ToString(); sndr.sendMessage(msgToWpf); Message msgToWpf1 = new Message(); msgToWpf1.fromUrl = Util.makeUrl(srvr.address, srvr.port); msgToWpf1.toUrl = Util.makeUrl("localhost", "8089"); msgToWpf1.content = "Server ThroughPut(Avg Time) for " + srvr.Ttime.Count().ToString() + " Write Operations = " + avg.ToString() + " microseconds"; sndr.sendMessage(msgToWpf1); continue; } if (msg.content.Contains("Reader")) { int avg1 = srvr.Ttime1.Sum() / srvr.Ttime1.Count(); string lat = string.Join(null, System.Text.RegularExpressions.Regex.Split(msg.content, "[^\\d]")); Message msgToWpf = new Message(); msgToWpf.fromUrl = Util.makeUrl(srvr.address, srvr.port); msgToWpf.toUrl = Util.makeUrl("localhost", "8089"); msgToWpf.content = msg.content + " microseconds for Client: " + msg.fromUrl.ToString(); sndr.sendMessage(msgToWpf); Message msgToWpf1 = new Message(); msgToWpf1.fromUrl = Util.makeUrl(srvr.address, srvr.port); msgToWpf1.toUrl = Util.makeUrl("localhost", "8089"); msgToWpf1.content = "Server ThroughPut(Avg Time) for " + srvr.Ttime1.Count().ToString() + " Read Operations = " + avg1.ToString() + " microseconds"; sndr.sendMessage(msgToWpf1); continue; } try { XDocument xdoc = XDocument.Parse(msg.content); string operationCalled = getOperationType(xdoc); if (operationCalled == "add") { Console.WriteLine("\nAdd Operation Called"); HiResTimer hrt = new HiResTimer(); hrt.Start(); srvr.processAddMsg(xdoc, sndr, msg); hrt.Stop(); srvr.Ttime.Add(Convert.ToInt32(hrt.ElapsedMicroseconds)); } else if (operationCalled == "delete") { Console.WriteLine("\nDelete Operation Called"); HiResTimer hrt = new HiResTimer(); hrt.Start(); srvr.processDelMsg(xdoc, sndr, msg); hrt.Stop(); srvr.Ttime.Add(Convert.ToInt32(hrt.ElapsedMicroseconds)); } else if (operationCalled == "edit") { Console.WriteLine("\nEdit Operation Called"); HiResTimer hrt = new HiResTimer(); hrt.Start(); srvr.processEditMsg(xdoc, sndr, msg); hrt.Stop(); srvr.Ttime.Add(Convert.ToInt32(hrt.ElapsedMicroseconds)); } else if (operationCalled == "query1") { Console.WriteLine("\nQuery1 Operation Called\n"); HiResTimer hrt = new HiResTimer(); hrt.Start(); srvr.processQuery1(xdoc, sndr, msg); hrt.Stop(); srvr.Ttime1.Add(Convert.ToInt32(hrt.ElapsedMicroseconds)); } else if (operationCalled == "query2") { Console.WriteLine("\nQuery2 Operation Called\n"); HiResTimer hrt = new HiResTimer(); hrt.Start(); srvr.processQuery2(xdoc, sndr, msg); hrt.Stop(); srvr.Ttime1.Add(Convert.ToInt32(hrt.ElapsedMicroseconds)); Util.swapUrls(ref msg); msg.content = "-----Query2 operation performed-----"; sndr.sendMessage(msg); } else if (operationCalled == "query3") { Console.WriteLine("\nQuery3 Operation Called\n"); HiResTimer hrt = new HiResTimer(); hrt.Start(); srvr.processQuery3(xdoc, sndr, msg); hrt.Stop(); srvr.Ttime1.Add(Convert.ToInt32(hrt.ElapsedMicroseconds)); Util.swapUrls(ref msg); msg.content = "-----Query3 operation performed-----"; sndr.sendMessage(msg); } else if (operationCalled == "query4") { Console.WriteLine("\nQuery4 Operation Called\n"); HiResTimer hrt = new HiResTimer(); hrt.Start(); srvr.processQuery4(xdoc, sndr, msg); hrt.Stop(); srvr.Ttime1.Add(Convert.ToInt32(hrt.ElapsedMicroseconds)); } else if (operationCalled == "query5") { Console.WriteLine("\nQuery5 Operation Called\n"); HiResTimer hrt = new HiResTimer(); hrt.Start(); srvr.processQuery5(xdoc, sndr, msg); hrt.Stop(); srvr.Ttime1.Add(Convert.ToInt32(hrt.ElapsedMicroseconds)); Util.swapUrls(ref msg); msg.content = "-----Query5 operation performed-----"; sndr.sendMessage(msg); } else if (operationCalled == "persist") { Console.WriteLine("\nPersist Operation Called"); HiResTimer hrt = new HiResTimer(); hrt.Start(); srvr.processPersistMsg(xdoc, sndr, msg); hrt.Stop(); srvr.Ttime.Add(Convert.ToInt32(hrt.ElapsedMicroseconds)); } else if (operationCalled == "augment") { Console.WriteLine("\nAugment Operation Called\n"); HiResTimer hrt = new HiResTimer(); hrt.Start(); srvr.processAugmentedMsg(xdoc, sndr, msg, srvr); hrt.Stop(); srvr.Ttime.Add(Convert.ToInt32(hrt.ElapsedMicroseconds)); } } catch { } #if (TEST_WPFCLIENT) ///////////////////////////////////////////////// // The statements below support testing the // WpfClient as it receives a stream of messages // - for each message received the Server // sends back 1000 messages // int count = 0; for (int i = 0; i < 2; ++i) { Message testMsg = new Message(); testMsg.toUrl = msg.toUrl; testMsg.fromUrl = msg.fromUrl; testMsg.content = String.Format("test message #{0}", ++count); Console.Write("\n sending testMsg: {0}", testMsg.content); sndr.sendMessage(testMsg); } #else ///////////////////////////////////////////////// // Use the statement below for normal operation #endif } }; if (rcvr.StartService()) { rcvr.doService(serviceAction); // This serviceAction is asynchronous, } // so the call doesn't block. Util.waitForUser(); }
private static void restore_database(IEnumerator<XElement> x, ref Message msg, Sender sndr) { string source_path = x.Current.Element("Source").Value; msg.content += ",Source," + source_path; if (Client.logger_flag) Console.Write("\n sending {0}", msg.content + "\n"); if (!sndr.sendMessage(msg)) return; Thread.Sleep(100); }
private static void persist_database(IEnumerator<XElement> x, ref Message msg, Sender sndr) { string destination_path = x.Current.Element("Destination").Value; msg.content += ",Destination," + destination_path; if (logger_flag) Console.Write("\n sending {0}", msg.content + "\n"); if (!sndr.sendMessage(msg)) return; Thread.Sleep(100); }
private static void parseQuery(string querytype, IEnumerator<XElement> x, ref Message msg1, Sender sndr) { Message msg = new Message(); msg.fromUrl = msg1.fromUrl; msg.toUrl = msg1.toUrl; msg.content = msg1.content.ToString(); switch (querytype) { case "Insert Element": insert_element(x, ref msg, sndr); break; case "Delete Element": delete_element(x, ref msg, sndr); break; case "Edit Element Metadata": edit_element_metadata(x, ref msg, sndr); break; case "Edit Element Metadata and Add Children": edit_element_metadata(x, ref msg, sndr); break; case "Edit Element Metadata and Remove Children": edit_element_metadata(x, ref msg, sndr); break; case "Edit Element Metadata and Edit Payload": edit_element_metadata(x, ref msg, sndr); break; case "Persist Database": persist_database(x, ref msg, sndr); break; case "Restore Database": restore_database(x, ref msg, sndr); break; } }
private static void insert_element(IEnumerator<XElement> x, ref Message msg, Sender sndr) { int numQueries = int.Parse(x.Current.Element("NumberOfQueries").Value.ToString()); int counter = 0; string message = new String(msg.content.ToCharArray()); while (counter++ < numQueries) { string str = ""; str = str + ",key," + x.Current.Element("Key").Value.ToString() + counter; ParseMetadata(ref str, x.Current.Element("Element")); msg.content += str; if (logger_flag) Console.Write("\n sending {0}", msg.content + "\n"); if (!sndr.sendMessage(msg)) return; Thread.Sleep(100); msg.content = message.ToString(); } }
static void Main(string[] args) { try { Util.verbose = false; Server srvr = new Server(); srvr.ProcessCommandLine(args); Console.Title = "Server"; Console.Write(String.Format("\nStarting CommService server listening on port {0}", srvr.port)); Console.WriteLine("\nServer Address is {0}", Util.makeUrl(srvr.address, srvr.port)); Console.Write("\n ====================================================\n"); Sender sndr = new Sender(Util.makeUrl(srvr.address, srvr.port)); Receiver rcvr = new Receiver(srvr.port, srvr.address); Action serviceAction = DefineServiceAction(srvr, sndr, rcvr); if (rcvr.StartService()) { rcvr.doService(serviceAction); // This serviceAction is asynchronous, // so the call doesn't block. } Util.waitForUser(); } catch (CustomException ex) { Console.WriteLine("Error occured in Server.cs{0}", ex); } }
static void Main(string[] args) { Console.Write("\n starting CommService client"); Console.Write("\n =============================\n"); Console.Title = "Client #1"; Client clnt = new Client(); clnt.processCommandLine(args); string localPort = Util.urlPort(clnt.localUrl); string localAddr = Util.urlAddress(clnt.localUrl); Receiver rcvr = new Receiver(localPort, localAddr); if (rcvr.StartService()) { rcvr.doService(rcvr.defaultServiceAction()); } Sender sndr = new Sender(clnt.localUrl); // Sender needs localUrl for start message Message msg = new Message(); msg.fromUrl = clnt.localUrl; msg.toUrl = clnt.remoteUrl; Console.Write("\n sender's url is {0}", msg.fromUrl); Console.Write("\n attempting to connect to {0}\n", msg.toUrl); if (!sndr.Connect(msg.toUrl)) { Console.Write("\n could not connect in {0} attempts", sndr.MaxConnectAttempts); sndr.shutdown(); rcvr.shutDown(); return; } int numMsgs = 5; int counter = 0; while (true) { msg = new Message(); msg.fromUrl = clnt.localUrl; msg.toUrl = clnt.remoteUrl; msg.content = "Message #" + (++counter).ToString(); Console.Write("\n sending {0}", msg.content); if (!sndr.sendMessage(msg)) { return; } ///////////////////////////////////////////////////////////////// // The delay, below, can now be removed without changing the // sending behavior except that it becomes faster. However // We want to simulate a "normal" minimum delay between messages // to measure latency and server throughput. Without the delay // the server's queue will very quickly contain a large number // of messages and we won't be accurately representing the system // behavior for a single client and server. // // Instead, we stress the server by running multiple clients // concurrently. // Thread.Sleep(100); if (counter >= numMsgs) { break; } } msg = new Message(); msg.fromUrl = clnt.localUrl; msg.toUrl = clnt.remoteUrl; msg.content = "done"; sndr.sendMessage(msg); // Wait for user to press a key to quit. // Ensures that client has gotten all server replies. Util.waitForUser(); // shut down this client's Receiver and Sender by sending close messages rcvr.shutDown(); sndr.shutdown(); Console.Write("\n\n"); }
/// <summary> /// DeletePerformance for the client /// </summary> /// <param name="msg"></param> /// <param name="clnt"></param> /// <param name="sndr"></param> /// <param name="xmlStr"></param> /// <param name="key"></param> /// <param name="msgid"></param> /// <param name="keyUp"></param> /// <param name="l"></param> /// <returns></returns> private static XDocument DeletePerformance(Message msg, WriterClient clnt, Sender sndr, ref string xmlStr, string key, ref string msgid, ref string keyUp, XElement l) { XDocument docTemp = XDocument.Load("Input.xml"); XElement m = docTemp.Descendants("OperationMessage").Where(d => d.Element("Operation").Value == "Delete").Select(i => i).Single(); clnt.numMsgs = int.Parse(l.Elements("Count").Single().Value); clnt.total += clnt.numMsgs; for (int i = 0; i < clnt.numMsgs; i++) { if (KeyLs.Get() != null) { keyUp = KeyLs.LastElement().ToString(); //keyUp = KeyLs.Get()[0].ToString(); KeyLs.Remove(int.Parse(keyUp)); } else keyUp = 2.ToString(); //Construct DB Delete xmlStr = clnt.WriteDataForDelete(docTemp, ref msgid, ref keyUp); //Generate data using the xml structure msg.content = xmlStr; if (clnt.loggingCheck == true) Console.Write("Sending Message..Message is \n {0} \n", msg.content); else Console.Write("Sending Message..Message(Message ID:{0})\n", msgid); if (sndr.sendMessage(msg)) { Console.Write("Message(MessageID {1},Key {0}) sent for deletion successfully\n", key, msgid); Thread.Sleep(50); } } return docTemp; }
//----< Main method. >----- static void Main(string[] args) { Util.verbose = false; Util.verboseApp = true; Server srvr = new Server(); srvr.ProcessCommandLine(args); srvr.preLoadData(); Console.Title = "Server"; Console.Write(String.Format("\n Starting CommService server listening on port {0}", srvr.port)); Console.Write("\n ====================================================\n"); Sender sndr = new Sender(Util.makeUrl(srvr.address, srvr.port)); //Sender sndr = new Sender(); Receiver rcvr = new Receiver(srvr.port, srvr.address); // - serviceAction defines what the server does with received messages // - This serviceAction just announces incoming messages and echos them // back to the sender. // - Note that demonstrates sender routing works if you run more than // one client. Action serviceAction = () => { Message msg = null; HiResTimer hrt = new HiResTimer(); while (true) { msg = rcvr.getMessage(); // note use of non-service method to deQ messages if (Util.verbose) { Console.Write("\n Received message:"); Console.Write("\n sender is {0}", msg.fromUrl); Console.Write("\n content is {0}\n", msg.content); } if (msg.content == "connection start message") { continue; // don't send back start message } if (msg.content == "done") { continue; } if (msg.content == "closeServer") { Console.Write("received closeServer"); break; } try { XDocument xdoc = XDocument.Parse(msg.content); string operationCalled = identifyOperation(xdoc); // swap urls for outgoing message if (operationCalled == "add") { if (Util.verboseApp) { Console.WriteLine("add Operation Called"); } hrt.Start(); msg.content = srvr.processAddMessage(xdoc); hrt.Stop(); Server.numMessages++; Server.totalTime += hrt.ElapsedMicroseconds; Server.avgTime = srvr.getAvgTime(Server.totalTime, Server.numMessages); Util.swapUrls(ref msg); sndr.sendMessage(msg); } else if (operationCalled == "delete") { if (Util.verboseApp) { Console.WriteLine("delete Operation Called"); } hrt.Start(); msg.content = srvr.processDeleteMessage(xdoc); hrt.Stop(); Server.numMessages++; Server.totalTime += hrt.ElapsedMicroseconds; Server.avgTime = srvr.getAvgTime(Server.totalTime, Server.numMessages); Util.swapUrls(ref msg); sndr.sendMessage(msg); } else if (operationCalled == "edit") { if (Util.verboseApp) { Console.WriteLine("Edit Operation Called"); } hrt.Start(); msg.content = srvr.processEditMessage(xdoc); hrt.Stop(); Server.numMessages++; Server.totalTime += hrt.ElapsedMicroseconds; Server.avgTime = srvr.getAvgTime(Server.totalTime, Server.numMessages); Util.swapUrls(ref msg); sndr.sendMessage(msg); } else if (operationCalled == "query1") { if (Util.verboseApp) { Console.WriteLine("query1 Operation Called"); } hrt.Start(); msg.content = srvr.processQuery1Message(xdoc); hrt.Stop(); Server.numMessages++; Server.totalTime += hrt.ElapsedMicroseconds; Server.avgTime = srvr.getAvgTime(Server.totalTime, Server.numMessages); Util.swapUrls(ref msg); sndr.sendMessage(msg); } else if (operationCalled == "query2") { if (Util.verboseApp) { Console.WriteLine("query2 Operation Called"); } hrt.Start(); msg.content = srvr.processQuery2Message(xdoc); hrt.Stop(); Server.numMessages++; Server.totalTime += hrt.ElapsedMicroseconds; Server.avgTime = srvr.getAvgTime(Server.totalTime, Server.numMessages); Util.swapUrls(ref msg); sndr.sendMessage(msg); } else if (operationCalled == "query3") { if (Util.verboseApp) { Console.WriteLine("query3 Operation Called"); } hrt.Start(); msg.content = srvr.processQuery3Message(xdoc); hrt.Stop(); Server.numMessages++; Server.totalTime += hrt.ElapsedMicroseconds; Server.avgTime = srvr.getAvgTime(Server.totalTime, Server.numMessages); Util.swapUrls(ref msg); sndr.sendMessage(msg); } else if (operationCalled == "query4") { if (Util.verboseApp) { Console.WriteLine("query4 Operation Called"); } hrt.Start(); msg.content = srvr.processQuery4Message(xdoc); hrt.Stop(); Server.numMessages++; Server.totalTime += hrt.ElapsedMicroseconds; Server.avgTime = srvr.getAvgTime(Server.totalTime, Server.numMessages); Util.swapUrls(ref msg); sndr.sendMessage(msg); } else if (operationCalled == "query5") { if (Util.verboseApp) { Console.WriteLine("query5 Operation Called"); } hrt.Start(); msg.content = srvr.processQuery5Message(xdoc); hrt.Stop(); Server.numMessages++; Server.totalTime += hrt.ElapsedMicroseconds; Server.avgTime = srvr.getAvgTime(Server.totalTime, Server.numMessages); Util.swapUrls(ref msg); sndr.sendMessage(msg); } else if (operationCalled == "persist") { if (Util.verboseApp) { Console.WriteLine("persist Operation Called"); } hrt.Start(); srvr.persistDatatToFile(); hrt.Stop(); Server.numMessages++; Server.totalTime += hrt.ElapsedMicroseconds; Server.avgTime = srvr.getAvgTime(Server.totalTime, Server.numMessages); Util.swapUrls(ref msg); msg.content = "Persist operation performed."; sndr.sendMessage(msg); } else if (operationCalled == "restore") { if (Util.verboseApp) { Console.WriteLine("Restore Operation Called"); } hrt.Start(); msg.content = srvr.processDataRestoreMessageRequest(); hrt.Stop(); Server.numMessages++; Server.totalTime += hrt.ElapsedMicroseconds; Server.avgTime = srvr.getAvgTime(Server.totalTime, Server.numMessages); Util.swapUrls(ref msg); sndr.sendMessage(msg); continue; } else if (operationCalled == "performance") { if (Util.verboseApp) { Console.WriteLine("performance Operation Called"); } Message msgToWpf1 = new Message(); msgToWpf1.fromUrl = Util.makeUrl(srvr.address, srvr.port); msgToWpf1.toUrl = "http://localhost:8089/CommService"; msgToWpf1.content = srvr.createPerformanceMessageForWPF(xdoc, avgTime.ToString()); sndr.sendMessage(msgToWpf1); continue; } } catch (Exception e) { Console.WriteLine("Catch " + e.StackTrace + "\n"); } #if (TEST_WPFCLIENT) ///////////////////////////////////////////////// // The statements below support testing the // WpfClient as it receives a stream of messages // - for each message received the Server // sends back 1000 messages // int count = 0; for (int i = 0; i < 2; ++i) { Message testMsg = new Message(); testMsg.toUrl = msg.toUrl; testMsg.fromUrl = msg.fromUrl; testMsg.content = String.Format("test message #{0}", ++count); Console.Write("\n sending testMsg: {0}", testMsg.content); sndr.sendMessage(testMsg); } #else ///////////////////////////////////////////////// // Use the statement below for normal operation // sndr.sendMessage(msg); #endif } }; if (rcvr.StartService()) { rcvr.doService(serviceAction); // This serviceAction is asynchronous, } // so the call doesn't block. Util.waitForUser(); }
private static Action ServiceActionMake(HiResTimer hres, WriterClient clnt, Receiver rcvr) { Action serviceAction = () => { Message msg1 = null; while (true) { msg1 = rcvr.getMessage(); // note use of non-service method to deQ messages 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 Write 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.WriteClientTime); Console.WriteLine("\nAverage Execution time for the messages to be processed at Client Side is {0} microsecs", clnt.WriteClientTime / (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 Write 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 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("\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(); }; return serviceAction; }
//--------< Define action to be performed on receiving message >------ private static Action doserviceAction(Sender sndr, Receiver rcvr, Server srvr) { int counter_write = 0; int counter_read = 0; ulong write_clnt_process_time = 0; ulong read_clnt_latency_time = 0; ulong server_throughput_time = 0; Action serviceAction = () => { Message msg = null; while (true) { msg = rcvr.getMessage(); // note use of non-service method to deQ messages Console.Write("\n Received message:\n"); Console.Write("\n sender is {0}\n", msg.fromUrl); Console.Write("\n content is {0}\n", msg.content); if (specialMessage(ref msg, srvr, sndr, rcvr, ref read_clnt_latency_time, ref write_clnt_process_time, ref server_throughput_time, ref counter_write, ref counter_read)) { continue; } else if (msg.content == "closeServer") { Console.Write("\n\nreceived closeServer\n\n"); break; } else { WriteLine(); List<string> msg_list = msg.content.Split(',').ToList<string>(); IEnumerator<string> msg_enumerator = msg_list.GetEnumerator(); ServerParser sp = new ServerParser(); string str = ""; while (msg_enumerator.MoveNext()) { getDatabase(ref sp, ref msg_enumerator, ref str); }; // swap urls for outgoing message msg.content = str; Util.swapUrls(ref msg); ///////////////////////////////////////////////// // Use the statement below for normal operation Console.WriteLine("\n\n Sending Message: " + msg.content + "\n\n"); sndr.sendMessage(msg); } } }; return serviceAction; }
//-----------< action for received special messages >------------ private static bool specialMessage(ref Message msg, Server srvr, Sender sndr, Receiver rcvr, ref ulong read_clnt_latency_time, ref ulong write_clnt_process_time, ref ulong server_throughput_time, ref int counter_write, ref int counter_read) { if (msg.content == "connection start message") { srvr.server_throuput.Start(); return true; // don't send back start message } else if (msg.content == "done") { //---------< maitain test performance data for server throughput >---- srvr.server_throuput.Stop(); server_throughput_time += srvr.server_throuput.ElapsedMicroseconds; Console.Write("\n client has finished\n"); Console.WriteLine("\nServer throughput: " + server_throughput_time + " microseconds\n"); Util.swapUrls(ref msg); Console.WriteLine("\n\n Sending Message: " + msg.content + "\n\n"); sndr.sendMessage(msg); return true; } else if (msg.content.Contains("write-client")) { write_client_processing(ref counter_write, ref write_clnt_process_time, ref msg); return true; } else if (msg.content.Contains("read-client")) { read_client_latency(ref counter_read, ref read_clnt_latency_time, ref msg); return true; } else if (msg.content == ("test-result")) { send_test_result(ref msg, ref read_clnt_latency_time, write_clnt_process_time, server_throughput_time, counter_read, counter_write, sndr); return true; } else { return false; } }
static void Main(string[] args) { Console.Write("\n starting CommService client"); Console.Write("\n =============================\n"); Console.Title = "Writer Client"; Client clnt = new Client(); clnt.processCommandLine(args); string localPort = Util.urlPort(clnt.localUrl); string localAddr = Util.urlAddress(clnt.localUrl); Receiver rcvr = new Receiver(localPort, localAddr); if (rcvr.StartService()) { rcvr.doService(rcvr.defaultServiceAction()); } Sender sndr = new Sender(clnt.localUrl); // Sender needs localUrl for start message Message msg = new Message(); msg.fromUrl = clnt.localUrl; msg.toUrl = clnt.remoteUrl; Console.Write("\n sender's url is {0}", msg.fromUrl); Console.Write("\n attempting to connect to {0}\n", msg.toUrl); if (!sndr.Connect(msg.toUrl)) { Console.Write("\n could not connect in {0} attempts", sndr.MaxConnectAttempts); sndr.shutdown(); rcvr.shutDown(); return; } clnt.hrt.Start(); rcvr.setTotalMessageSize(clnt.getMsgLength("XMLWriter.xml")); clnt.readMsgTemplate("XMLWriter.xml", sndr); while (true) { if (rcvr.getLastFlag()) { clnt.hrt.Stop(); break; } } ulong latency = clnt.hrt.ElapsedMicroseconds; clnt.travelLatency(latency, sndr); msg.content = "done"; sndr.sendMessage(msg); // Wait for user to press a key to quit. // Ensures that client has gotten all server replies. Util.waitForUser(); // shut down this client's Receiver and Sender by sending close messages rcvr.shutDown(); sndr.shutdown(); Console.Write("\n\n"); }
/// <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; }
private static Message FinalMessageServe(Server srvr, Sender sndr, Message msg) { Console.WriteLine("Displaying DB entries"); srvr.showDB(true, "int"); Console.Write("\nClient has finished\n"); Util.swapUrls(ref msg); string totalTime = srvr.tot[msg.toUrl].ToString(); //call the wpf to send message Sender wpfSender = new Sender(Util.makeUrl(srvr.address, srvr.port)); Message wpfMsg = new Message(); //WPF sender wpfMsg.fromUrl = msg.fromUrl; wpfMsg.toUrl = Util.makeUrl(srvr.address, srvr.Wpfport); wpfMsg.content = "ServerTime;" + totalTime + ";" + "ClientURL;" + msg.toUrl; srvr.tot.Remove(msg.toUrl); wpfSender.sendMessage(wpfMsg); sndr.sendMessage(msg); //call the wpf to send message return msg; }
static void Main(string[] args) { //Thread.Sleep(1500); Console.Write("\n starting CommService writer client"); Console.Write("\n =======================================\n"); Console.Write("\n XML for Reading template is XMLWriter.xml"); Console.Write("\n =======================================\n"); Console.Write("\n If Verbose switch is off, then all logs are logged into WPF Client/GUI."); Console.Write("\n =====================================================================\n"); Console.Write("\n Demonstrating Requirement #4 by sending add/delete/edit/persist/augment messages from writer client to server."); Console.Write("\n Demonstrating Requirement #5 by taking format of request from XML and showing performance on GUI as well as on Console(If logging switch is on)."); Console.Title = "Client #1"; Client clnt = new Client(); clnt.processCommandLine(args); string localPort = Util.urlPort(clnt.localUrl); string localAddr = Util.urlAddress(clnt.localUrl); Receiver rcvr = new Receiver(localPort, localAddr); if (rcvr.StartService()) { rcvr.doService(rcvr.defaultServiceAction()); } Sender sndr = new Sender(clnt.localUrl); // Sender needs localUrl for start message Message msg = new Message(); msg.fromUrl = clnt.localUrl; msg.toUrl = clnt.remoteUrl; Console.Write("\n sender's url is {0}", msg.fromUrl); Console.Write("\n attempting to connect to {0}\n", msg.toUrl); if (!sndr.Connect(msg.toUrl)) { Console.Write("\n could not connect in {0} attempts", sndr.MaxConnectAttempts); sndr.shutdown(); rcvr.shutDown(); return; } clnt.hrt.Start(); rcvr.setTotalMessageSize(clnt.getMessageSize("XMLWriter.xml")); clnt.readMessageTemplates("XMLWriter.xml", sndr); while (true) { if (rcvr.getLastFlag()) { clnt.hrt.Stop(); break; } } ulong latency = clnt.hrt.ElapsedMicroseconds; int lat = Convert.ToInt32(latency); clnt.transportInformation(latency, sndr); msg.content = "done"; sndr.sendMessage(msg); // Wait for user to press a key to quit. // Ensures that client has gotten all server replies. Util.waitForUser(); // shut down this client's Receiver and Sender by sending close messages rcvr.shutDown(); sndr.shutdown(); Console.Write("\n\n"); }
/// <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; }
static void Main(string[] args) { Console.Write("\n starting CommService client"); Console.Write("\n =============================\n"); Console.Title = "Test Executive Client to display the results of remote NoSQL database operations"; TestExec clnt = new TestExec(); clnt.processCommandLine(args); HiResTimer timerTestExec = new HiResTimer(); string localPort = Util.urlPort(clnt.localUrl); string localAddr = Util.urlAddress(clnt.localUrl); Receiver rcvr = new Receiver(localPort, localAddr); rcvr.setTimerFromClient(timerTestExec); clnt.startRcvrService(rcvr); Console.WriteLine("\n The Message request is"); Console.Write("\n =================================\n"); Sender sndr = new Sender(clnt.localUrl); // Sender needs localUrl for start message MessageMaker testExecInput = new MessageMaker(); Message msg = new Message(); string fileName = ".\\TestExecInput.xml"; XDocument xmldoc = XDocument.Load(fileName); var requests = xmldoc.Descendants("Request"); int requestCount = 0, readers = 0, writers = 0, portReader = 0, portWriter = 0, numberOfRequests = 0, numberOfRequestsWriters = 0; string readerDisplay = "", writerDisplay = ""; clnt.getReadersWritersCount(xmldoc, ref readers, ref writers, ref portReader, ref portWriter, ref numberOfRequests, ref readerDisplay, ref writerDisplay, ref numberOfRequestsWriters); timerTestExec.Start(); foreach (var request in requests) { //send each request to construct message and send it to the server clnt.sendEachRequest(request,clnt,msg,sndr,rcvr,testExecInput); Console.Title = "TestExec Client to display the NoSQl database operations: Operations " + (++requestCount) + " are Sent"; } msg.content = "done"; Util.waitForUser(); rcvr.shutDown(); sndr.shutdown(); Console.Write("\n\n"); if(args.Count() != 0) { readers = Convert.ToInt32(args[0]); writers = Convert.ToInt32(args[1]); numberOfRequests = Convert.ToInt32(args[2]); numberOfRequestsWriters = Convert.ToInt32(args[3]); } for(int i = 1; i <= writers; i++) { System.Diagnostics.Process.Start(".\\Client\\bin\\Debug\\Client.exe",""+(portWriter++) + " " + numberOfRequestsWriters + " "+writerDisplay); } for(int j = 1; j <= readers; j++) { System.Diagnostics.Process.Start(".\\Client2\\bin\\Debug\\Client2.exe",(""+(portReader++)+" "+numberOfRequests+" "+readerDisplay)); } }
/// <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); } } }
//--------< shutdown receiver and sender >--------------------------- private static void shutdown(Receiver rcvr, Sender sndr) { sndr.shutdown(); rcvr.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"); }
static void Main(string[] args) { Util.verbose = false; Server srvr = new Server(); DBEngine<string, DBElement<string, List<string>>> testDict = new DBEngine<string, DBElement<string, List<string>>>(); srvr.ProcessCommandLine(args); double timeTaken = 0, totalTime = 0, insCount = 0; srvr.printMessage(srvr); Sender sndr = new Sender(Util.makeUrl(srvr.address, srvr.port)); Receiver rcvr = new Receiver(srvr.port, srvr.address); StringBuilder sb = new StringBuilder(); Action serviceAction = () => { Message msg = null; while (true) { HiResTimer hiResTimer = new HiResTimer(); hiResTimer.Start(); msg = rcvr.getMessage(); // note use of non-service method to deQ messages srvr.printMessage(msg); if (msg.content == "connection start message") continue; // don't send back start message if (msg.fromUrl == "http://localhost:8080/CommService") continue; if (msg.content == "done") { Console.Write("\n client has {0} finished\n",msg.fromUrl); continue; } if (msg.content == "closeServer") { Console.Write("received closeServer"); break; } msg.content = srvr.readOperations(testDict, msg); Util.swapUrls(ref msg); // swap urls for outgoing message #if (TEST_WPFCLIENT) Message testMsg = new Message(); testMsg.toUrl = msg.toUrl; testMsg.fromUrl = msg.fromUrl; testMsg.content = msg.content; sndr.sendMessage(testMsg); hiResTimer.Stop(); double diffTime = hiResTimer.ElapsedTimeSpan.TotalSeconds; totalTime = totalTime + diffTime; timeTaken = totalTime / (++insCount); Console.Title = "Server client handling " + (insCount) + " requests"; srvr.printServerThroughput(timeTaken); sndr.sendServerThroughput((1 / timeTaken)); #else sndr.sendMessage(msg); #endif } }; if (rcvr.StartService()) rcvr.doService(serviceAction); // This serviceAction is asynchronous, Util.waitForUser(); // so the call doesn't block. }
/// <summary> /// Performance testing by inserting items /// </summary> /// <param name="hres"></param> /// <param name="msg"></param> /// <param name="clnt"></param> /// <param name="rcvr"></param> /// <param name="sndr"></param> private static void PerformanceTesting(HiResTimer hres, Message msg, WriterClient clnt, Receiver rcvr, Sender sndr) { try { XmlTextReader textReader = new XmlTextReader("Input.xml"); string xmlStr = ""; HiResTimer t = new HiResTimer(); t.Start(); if (File.Exists("Input.xml")) { XDocument docTemp; string key, msgid; xmlStr = InsertPerformance(hres, msg, clnt, sndr, xmlStr, out docTemp, out key, out msgid); string keyUp; XElement l; UpdatePerformance(msg, clnt, sndr, ref xmlStr, out docTemp, key, ref msgid, out keyUp, out l); //Delete entries docTemp = DeletePerformance(msg, clnt, sndr, ref xmlStr, key, ref msgid, ref keyUp, l); } t.Stop(); clnt.WriteClientTime = t.ElapsedMicroseconds; msg = new Message(); msg.fromUrl = clnt.localUrl; msg.toUrl = clnt.remoteUrl; msg.content = "done"; sndr.sendMessage(msg); // 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"); } catch (CustomException ex) { throw new CustomException("Error in main of peformance testing", ex); } }
//----< Test Stub >-------------------------------------------------- #if (TEST_SENDER) static void Main(string[] args) { Util.verbose = false; Console.Write("\n starting CommService Sender"); Console.Write("\n =============================\n"); Console.Title = "CommService Sender"; Sender sndr = new Sender("http://localhost:8081/CommService"); sndr.processCommandLine(args); int numMsgs = 5; int counter = 0; Message msg = null; while (true) { msg = new Message(); msg.fromUrl = sndr.localUrl; msg.toUrl = sndr.remoteUrl; msg.content = "Message #" + (++counter).ToString(); Console.Write("\n Sending {0}", msg.content); sndr.sendMessage(msg); Thread.Sleep(30); if (counter >= numMsgs) break; } msg = new Message(); msg.fromUrl = sndr.localUrl; msg.toUrl = "http://localhost:9999/CommService"; msg.content = "no listener for this message"; Console.Write("\n sending {0}", msg.content); sndr.sendMessage(msg); msg = new Message(); msg.fromUrl = sndr.localUrl; msg.toUrl = sndr.remoteUrl; msg.content = "Message #" + (++counter).ToString(); Console.Write("\n sending {0}", msg.content); sndr.sendMessage(msg); msg = new Message(); msg.fromUrl = sndr.localUrl; msg.toUrl = sndr.remoteUrl; msg.content = "closeSender"; // message for self and Receiver Console.Write("\n sending {0}", msg.content); sndr.sendMessage(msg); }
/// <summary> /// Insert performance results writer client /// </summary> /// <param name="hres"></param> /// <param name="msg"></param> /// <param name="clnt"></param> /// <param name="sndr"></param> /// <param name="xmlStr"></param> /// <param name="docTemp"></param> /// <param name="key"></param> /// <param name="msgid"></param> /// <returns></returns> private static string InsertPerformance(HiResTimer hres, Message msg, WriterClient clnt, Sender sndr, string xmlStr, out XDocument docTemp, out string key, out string msgid) { docTemp = XDocument.Load("Input.xml"); XElement k = docTemp.Descendants("OperationMessage").Where(d => d.Element("Operation").Value == "Insert").Select(i => i).Single(); if (k.Elements("Count").Single().Value != "") clnt.numMsgs = int.Parse(k.Elements("Count").Single().Value); clnt.total += clnt.numMsgs; hres.Start(); //High resolution timer started key = ""; msgid = ""; for (int i = 0; i < clnt.numMsgs; i++) { docTemp = XDocument.Load("Input.xml"); xmlStr = clnt.InsertGenerator(docTemp, ref msgid, ref key, "int"); //Generate data using the xml structure msg.content = xmlStr; msg.fromUrl = clnt.localUrl; msg.toUrl = clnt.remoteUrl; if (sndr.sendMessage(msg)) { Console.Write("Sent message(Message ID {0}) to insert into DB successfully\n", msgid); Thread.Sleep(50); } } return xmlStr; }