public void sendMessages() { if (messages == null) { return; } Stopwatch time = new Stopwatch(); time.Start(); int count = (messages.Count()) * numMsgs; foreach (Message msg in messages) { for (int i = 0; i < numMsgs; ++i) { if (option == "showMessage") { showMsg(msg); } sndr.sendMessage(msg); } } time.Stop(); sendTimeInfo(time, count); }
public void processEditMsg(XDocument xdoc, Sender sndr, Message msg) { IEnumerable <string> keys = db.Keys(); List <string> keyList = keys.ToList(); string keyToEdit = getKey(xdoc); if (!keyList.Contains(keyToEdit)) { Message testMsg = new Message(); testMsg.toUrl = msg.fromUrl; testMsg.fromUrl = msg.toUrl; testMsg.content = "\n********************************\n" + "Key " + keyToEdit + " is not present in the DB\n"; sndr.sendMessage(testMsg); } else { DBElement <string, List <string> > element = new DBElement <string, List <string> >(); string key = createAddDBElement(xdoc, out element); Message testMsg = new Message(); testMsg.toUrl = msg.fromUrl; testMsg.fromUrl = msg.toUrl; if (db.edit(key, element)) { testMsg.content = "\n***********************\n" + "Key= " + key + " is edited Successfully.\n"; } else { testMsg.content = "\n**************************\n" + key + " record is not edited.\n"; } sndr.sendMessage(testMsg); } }
//----< 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; } } // demonstrate: // - sending to listener // - attempting to send to nolistener // - sending to listener 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); }
// Determine what happens to received messages public Action ServiceAction() { Action serviceAction = () => { int count = 0; Stopwatch time = new Stopwatch(); Message msg = null; time.Start(); while (true) { if (numMsg != 0 && numMsg == count) { time.Stop(); sendTimeInfo(time, count); } msg = rcvr.getMessage(); if (msg.content == "connection start message") continue; if (msg.content == "done") continue; if (msg.content == "closeServer") break; XDocument xml = new XDocument(); xml = XDocument.Parse(msg.content); string order = xml.Descendants("Msg").ElementAt(0).Descendants("Command").ElementAt(0).Value; if (order == "writeClientPerf") { numMsg += ClientPerf(msg); sndr.sendMessage(msg); continue; } if (order == "readClientPerf") { numMsg += ClientPerf(msg); sndr.sendMessage(msg); continue; } string DBName= xml.Descendants("Msg").Descendants("DBName").ElementAt(0).Value; string command = DBName + order; if (acts.ContainsKey(command)) { acts[command].Invoke(msg); sndr.sendMessage(msg); } else Write("\n command {0} {1} doesn't exist \n", order, DBName); ++count; } }; return serviceAction; }
//send request to query messages for particular search type messages private void sendValueSearchTypeMessages(MessageTemplate msgTemplate, Sender sndr) { for (int i = 0; i < msgTemplate.messageSize; i++) { XElement messageNode = new XElement("message"); XAttribute att = new XAttribute("commandType", "query1"); messageNode.Add(att); XElement keyTypenode = new XElement("keyType", "string"); XElement valueTypeNode = new XElement("valueType", "ListOfString"); XElement keynode = new XElement("key", "Key" + i); messageNode.Add(keyTypenode); messageNode.Add(valueTypeNode); messageNode.Add(keynode); Message msg = new Message(); msg.fromUrl = localUrl; msg.toUrl = remoteUrl; msg.content = messageNode.ToString(); Console.WriteLine("Request Sent to Query value for key: " + "Key" + i); if (!sndr.sendMessage(msg)) { return; } Thread.Sleep(10); } }
//send request to query messages for particular pattern private void sendValuePatternMessages(MessageTemplate msgTemplate, Sender sndr) { for (int i = 0; i < msgTemplate.messageSize; i++) { XElement messageNode = new XElement("message"); XAttribute att = new XAttribute("commandType", "query4"); messageNode.Add(att); XElement keyTypenode = new XElement("keyType", "string"); XElement valueTypeNode = new XElement("valueType", "ListOfString"); XElement searchParaMeter; // the pattern should be different in order to send multiple messages if (i == 0) { searchParaMeter = new XElement("searchParaMeter", "SMA"); Console.WriteLine("Request Sent to Query key for ValuePattern: SMA"); } else { searchParaMeter = new XElement("searchParaMeter", i); Console.WriteLine("Request Sent to Query key for ValuePattern: " + i); } messageNode.Add(keyTypenode); messageNode.Add(valueTypeNode); messageNode.Add(searchParaMeter); Message msg = new Message(); msg.fromUrl = localUrl; msg.toUrl = remoteUrl; msg.content = messageNode.ToString(); if (!sndr.sendMessage(msg)) { return; } Thread.Sleep(10); } }
//send request to query messages within particular timestamp private void sendTimestampSearchMessages(MessageTemplate msgTemplate, Sender sndr) { DateTime fromDate = new DateTime(2015, 11, 20); for (int i = 0; i < msgTemplate.messageSize; i++) { DateTime toDate = DateTime.Now; XElement messageNode = new XElement("message"); XAttribute att = new XAttribute("commandType", "query5"); messageNode.Add(att); XElement keyTypenode = new XElement("keyType", "string"); XElement valueTypeNode = new XElement("valueType", "ListOfString"); XElement startTime = new XElement("startTime", fromDate); XElement endTime = new XElement("endTime", toDate); messageNode.Add(keyTypenode); messageNode.Add(valueTypeNode); messageNode.Add(startTime); messageNode.Add(endTime); Message msg = new Message(); msg.fromUrl = localUrl; msg.toUrl = remoteUrl; msg.content = messageNode.ToString(); Console.WriteLine("Request Sent to Query key for timestamp from: " + fromDate + " to " + toDate); if (!sndr.sendMessage(msg)) { return; } Thread.Sleep(10); } }
//Function to send message that writer client operation is done public void transportInformation(ulong latency, Sender sndr) { Message msg = new Message(); msg.fromUrl = localUrl; msg.toUrl = remoteUrl; XElement root = new XElement("message"); XAttribute att = new XAttribute("commandType", "info"); root.Add(att); XElement client = new XElement("client", "WriterClient"); XElement port = new XElement("port", localUrl); XElement xLatency = new XElement("latency", latency); XElement messages = new XElement("numMsgs", messageProcessed); root.Add(client); root.Add(port); root.Add(xLatency); root.Add(messages); msg.content = root.ToString(); if (!sndr.sendMessage(msg)) { return; } ulong uLongmessageProcessed = Convert.ToUInt64(messageProcessed); if (Util.verbose) { Console.WriteLine("\nTotal time taken to process all requests: " + latency); Console.WriteLine("\nTotal requests sent: " + messageProcessed); ulong avg = latency / uLongmessageProcessed; Console.WriteLine("\nAvg time: " + avg); } }
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; } }
public void send_wpf_final(Sender sndr, string localport) { // Console.WriteLine("Inside send loop"); Message wpf_message = new Message(); wpf_message.fromUrl = localUrl; wpf_message.toUrl = "http://localhost:8081/CommService"; if (!sndr.Connect(wpf_message.toUrl)) { Console.Write("\n could not connect in {0} attempts", sndr.MaxConnectAttempts); return; } foreach (string k in diction.Keys) { wpf_message = new Message(); //string msg2 = "Write Client(" + localport + "): Average latency time for " + k + " operations = " + diction[k].Average() + " milliseconds"; if (diction[k].Count > 0) { string msg2 = "Read Client(" + localport + "): Average latency time for " + diction[k].Count + " " + k + " operations = " + diction[k].Average() + " milliseconds"; wpf_message.fromUrl = localUrl; wpf_message.toUrl = "http://localhost:8081/CommService"; wpf_message.content = msg2; sndr.sendMessage(wpf_message); } } //foreach }
private void sendMessageToServer(IEnumerable <XElement> results, HiResTimer timer, MessageMaker msgMaker, Sender sndr, Receiver rcvr) { timer.Start(); foreach (var eachInput in results) { Message msg = new Message(); msg = msgMaker.makeMessage(this.localUrl, this.remoteUrl, eachInput); if (!sndr.Connect(msg.toUrl)) { Console.Write("\n could not connect in {0} attempts", sndr.MaxConnectAttempts); sndr.shutdown(); rcvr.shutDown(); return; } "Message sent".endofTest(); "Content".title(); Console.Write("\n\n{0}\n", msg.content); "End of message".endofTest(); while (true) { if (sndr.sendMessage(msg)) { Thread.Sleep(200); break; } } sndr.SendReaderLatency(rcvr.totalExecutionTime / rcvr.count); sndr.SendWriterLatency(rcvr.totalExecutionTime / rcvr.count); } }
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; } }
private void CallQuery5(MessageParameterState msgState, MessageTemplate msgTemplate, Sender sndr) { DateTime toDate = new DateTime(); DateTime fromDate = new DateTime(2015, 10, 1); for (int i = 0; i < msgTemplate.messageSize; i++) { XElement messageNode = new XElement("message"); XAttribute att = new XAttribute("commandType", "query5"); messageNode.Add(att); XElement keyTypenode = new XElement("keyType", "string"); XElement valueTypeNode = new XElement("valueType", "ListOfString"); XElement startTime = new XElement("startTime", fromDate); XElement endTime = new XElement("endTime", toDate); messageNode.Add(keyTypenode); messageNode.Add(valueTypeNode); messageNode.Add(startTime); messageNode.Add(endTime); Message msg = new Message(); msg.fromUrl = localUrl; msg.toUrl = remoteUrl; msg.content = messageNode.ToString(); //Console.WriteLine("msg : " + msg.content); if (!sndr.sendMessage(msg)) { return; } } }
public void sendMessages() { if (messages == null) { return; } time = new Stopwatch(); time.Start(); foreach (Message msg in messages) { for (int i = 0; i < numMsgs; ++i) { sndr.sendMessage(msg); } } }
public void processQuery5(XDocument xdoc, Sender sndr, Message msg) { DateTime fromDate = getFromDate(xdoc); DateTime toDate = getToDate(xdoc); DBElement <string, List <string> > element = new DBElement <string, List <string> >(); QueryEngine <string, string> QE1 = new QueryEngine <string, string>(); Message testMsg = new Message(); testMsg.toUrl = msg.fromUrl; testMsg.fromUrl = msg.toUrl; List <string> values = new List <string>(); values = QE1.dateTimeSearch(fromDate, toDate, db); if (values.Count() > 0) { StringBuilder sb = new StringBuilder(); foreach (string str in values) { sb.Append(str); sb.Append("\n"); } testMsg.content = "\n**********************" + "\nResult of Query5" + "\nKeys within Date pattern are:\n" + sb + "\n"; } else { testMsg.content = "\n*************************\n" + "\nKeys within Date pattern not found\n"; } sndr.sendMessage(testMsg); }
public void processQuery3(XDocument xdoc, Sender sndr, Message msg) { string pattern = getPattern(xdoc); DBElement <string, List <string> > element = new DBElement <string, List <string> >(); QueryEngine <string, string> QE1 = new QueryEngine <string, string>(); Message testMsg = new Message(); testMsg.toUrl = msg.fromUrl; testMsg.fromUrl = msg.toUrl; List <string> values = new List <string>(); values = QE1.keyPattern(pattern, db); if (values.Count() > 0) { StringBuilder sb = new StringBuilder(); foreach (string str in values) { sb.Append(str); sb.Append("\n"); } testMsg.content = "\n*************************\n" + "\nResult of Query3\n" + "Keys with pattern like " + pattern + " are :\n" + sb + "\n"; } else { testMsg.content = "\n*************************\n" + "\nKeys with pattern like " + pattern + " not found\n"; } sndr.sendMessage(testMsg); }
public void processDelMsg(XDocument xdoc, Sender sndr, Message msg) { IEnumerable <string> keys = db.Keys(); int numKeys = Convert.ToInt32(getNumberOfKeys(xdoc)); if (numKeys > keys.Count()) { numKeys = keys.Count() - 1; } List <string> keyList = keys.ToList(); for (int i = 0; i < numKeys; i++) { string keyToDeleted = keyList.ElementAt(i); if (db.delete(keyToDeleted)) { msg.content = "\n\n***************************\n" + keyToDeleted + " record is deleted.\n"; } else { msg.content = "\n*********************\n" + keyToDeleted + " record is not deleted."; } Message testMsg = new Message(); testMsg.toUrl = msg.fromUrl; testMsg.fromUrl = msg.toUrl; testMsg.content = msg.content; sndr.sendMessage(testMsg); } }
//Function that send request to persist data to XML private void sendPersistMessage(MessageTemplate msgTemplate, Sender sndr) { Random random = new Random(); XElement messageNode = new XElement("message"); XAttribute att = new XAttribute("commandType", "persist"); messageNode.Add(att); XElement numKeys = new XElement("size"); numKeys.Add(msgTemplate.messageSize); messageNode.Add(numKeys); Message msg = new Message(); msg.fromUrl = localUrl; msg.toUrl = remoteUrl; msg.content = messageNode.ToString(); if (!sndr.sendMessage(msg)) { return; } if (Util.verbose) { Console.WriteLine("For Persistance, Request Sent to persist " + msgTemplate.messageSize + " messages"); } }
//Function that sends request to delete data private void sendDeleteMessage(MessageTemplate msgTemplate, Sender sndr) { XElement messageNode = new XElement("message"); XAttribute att = new XAttribute("commandType", "delete"); messageNode.Add(att); XElement keyTypenode = new XElement("keyType", "string"); XElement valueTypeNode = new XElement("valueType", "ListOfString"); XElement numKeys = new XElement("size", msgTemplate.messageSize.ToString()); messageNode.Add(keyTypenode); messageNode.Add(valueTypeNode); messageNode.Add(numKeys); Message msg = new Message(); msg.fromUrl = localUrl; msg.toUrl = remoteUrl; msg.content = messageNode.ToString(); if (Util.verbose) { Console.WriteLine("For Deletion, Request sent to delete " + msgTemplate.messageSize.ToString() + " messages"); } if (!sndr.sendMessage(msg)) { return; } }
static void Main(string[] args) { Console.WriteLine(" The intent of the write client is to stress the database with write operations."); Console.WriteLine(" Write operations - Insert, Delete, Edit name, Edit Description and Add Children."); Console.WriteLine("\n If log option is enabled, messsages are logged to this console window as they are sent."); Console.WriteLine(" If log is enabled result of response is displayed as responses are received from server."); Console.WriteLine(" If log option is disabled, only latency time for each operation is disaplyed on the console window."); Client clnt = new Client(); clnt.processCommandLine(args); bool log_message = clnt.processCommandLineForWriteLog(args); if (log_message) { Console.WriteLine(" (Log option is Enabled for this client)"); } else { Console.WriteLine(" (Log option is Disabled for this client)"); } string localPort = Util.urlPort(clnt.localUrl); string localAddr = Util.urlAddress(clnt.localUrl); Receiver rcvr = new Receiver(localPort, localAddr); string win_title = "Write Client - " + localPort; Console.Title = win_title; Sender sndr = new Sender(clnt.localUrl); // Sender needs localUrl for start message Action client_receive_action = clnt.define_receive_action(rcvr, sndr, log_message, localPort); if (rcvr.StartService()) { rcvr.doService(client_receive_action); } Message msg = new Message(); msg.fromUrl = clnt.localUrl; msg.toUrl = clnt.remoteUrl; Console.WriteLine("\n\n Starting CommService Write client"); Console.Write(" ============================="); Console.Write("\n Write client local url is {0}", msg.fromUrl); Console.Write("\n Attempting to connect to server on {0}\n", msg.toUrl); if (!sndr.Connect(msg.toUrl)) { Console.Write("\n Could not connect to server in {0} attempts, closing application.", sndr.MaxConnectAttempts); sndr.shutdown(); rcvr.shutDown(); return; } Console.WriteLine("\n *****************************\n Going to read messages present in XML file - Write_Client_XML.xml and send them sequentially to server.\n *****************************"); clnt.send_messages(sndr, msg, "./../../../../SavedXMLFiles/Write_Client_XML.xml", log_message); Thread.Sleep(100); msg.content = "done"; sndr.sendMessage(msg); 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) { Thread.Sleep(2000); Console.Write("\n starting CommService client"); Console.Write("\n =============================\n"); Console.Title = "Reader 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.getMsgLen("XMLReader.xml")); clnt.readMsgTemplate("XMLReader.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"); }
//Function that sends request to add large data private void sendLargeAddMessage(MessageTemplate msgTemplate, Sender sndr) { Random random = new Random(); for (int i = 0; i < msgTemplate.messageSize; i++) { XElement messageNode = new XElement("message"); XAttribute att = new XAttribute("commandType", "add"); messageNode.Add(att); int rndKey = random.Next(1, 10000); //Console.WriteLine("key : " + rndKey); XElement keyTypenode = new XElement("keyType", "string"); XElement valueTypeNode = new XElement("valueType", "ListOfString"); XElement keynode = new XElement("key", rndKey.ToString()); listOfKeys.Add(rndKey.ToString()); XElement valueNode = new XElement("value"); XElement name = new XElement("name", "name : " + i.ToString()); XElement desc = new XElement("desc", "desc : " + i.ToString()); XElement timestamp = new XElement("time", DateTime.Now); XElement payload = new XElement("payload"); XElement payloadItem = new XElement("item", "SMA of " + rndKey); payload.Add(payloadItem); payloadItem = new XElement("item", "OOD of " + rndKey); payload.Add(payloadItem); XElement children = new XElement("children"); int childrenSize = random.Next(13, 15); for (int j = 1; j < childrenSize; j++) { XElement item = new XElement("item", j.ToString()); children.Add(item); } valueNode.Add(name); valueNode.Add(desc); valueNode.Add(timestamp); valueNode.Add(payload); valueNode.Add(children); messageNode.Add(keyTypenode); messageNode.Add(valueTypeNode); messageNode.Add(keynode); messageNode.Add(valueNode); Message msg = new Message(); msg.fromUrl = localUrl; msg.toUrl = remoteUrl; msg.content = messageNode.ToString(); if (Util.verbose) { Console.WriteLine("For Addition, Msg Sent with key= " + rndKey.ToString()); } if (!sndr.sendMessage(msg)) { return; } Thread.Sleep(10); } }
static void Main(string[] args) { Console.WriteLine(" The intent of the demo client is to demonstarte that all the operations of Project-2 can be executed remotely."); Console.WriteLine(" All the request messages stored in /SavedXMLFiles/Demo_Client_XML.xml are sent to server sequentially."); Console.WriteLine(" The Demo_Client_XML.xml file consists of Write operations, Read operations and Persist operations."); Console.WriteLine(" Write operations - Insert, Delete, Edit Name, Edit Description and Add Children"); Console.WriteLine(" Read operations - Get Value, Get Children, Get Keys with string pattern in metadata"); Console.WriteLine(" PErsist operations - Persist database, Load Database"); Console.WriteLine("\n The DB contents are displayed on the server only in case of demo client to show the successful operations on DB."); Console.WriteLine(" These are displayed to show to user that operations are successfully performed on the database."); Console.WriteLine("\n ******************\n To launch the readers and writers enter any key on the TestExecutive window."); Console.WriteLine(" You can verify all types of operations done and displayed on server window, before launching readers and writers."); Console.Write("\n Starting CommService for demo client"); Console.Write("\n ================================\n"); Thread.Sleep(1000); bool log_message = true; Client clnt = new Client(); clnt.processCommandLine(args); Receiver rcvr = new Receiver(Util.urlPort(clnt.localUrl), Util.urlAddress(clnt.localUrl)); string win_title = "Demo Client - " + Util.urlPort(clnt.localUrl); Console.Title = win_title; Action client_receive_action = clnt.define_receive_action(rcvr, log_message); if (rcvr.StartService()) { rcvr.doService(client_receive_action); } 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 Demo client local url is {0}", msg.fromUrl); Console.Write("\n Attempting to connect to server on {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.send_messages(sndr, msg, "./../../../../SavedXMLFiles/Demo_Client_XML.xml", log_message); Thread.Sleep(100); 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"); }
//----< send message for performance to server >-------- public void sendPerformanceMessage(ulong latency, Sender sndr) { Message msg = new Message(); msg.fromUrl = localUrl; msg.toUrl = remoteUrl; msg.content = createPerformanceMessage(latency.ToString()); if (!sndr.sendMessage(msg)) { return; } }
public void travelLatency(ulong latency, Sender sndr) { Message msg = new Message(); msg.fromUrl = localUrl; msg.toUrl = remoteUrl; msg.content = "Writer Client latency" + " = " + latency.ToString(); if (!sndr.sendMessage(msg)) { return; } }
//Function that sends request to edit data private void sendEditMessage(MessageTemplate msgTemplate, Sender sndr) { Random random = new Random(); //generated data as well as XML to send request to edit data one by one for (int i = 0; i < msgTemplate.messageSize; i++) { XElement messageNode = new XElement("message"); XAttribute att = new XAttribute("commandType", "edit"); messageNode.Add(att); string rndKey = listOfKeys[random.Next(listOfKeys.Count)]; XElement keyTypenode = new XElement("keyType", "string"); XElement valueTypeNode = new XElement("valueType", "ListOfString"); XElement keynode = new XElement("key", rndKey.ToString()); XElement valueNode = new XElement("value"); XElement name = new XElement("name", "Updated-name : " + i.ToString()); XElement desc = new XElement("desc", "Updated-desc : " + i.ToString()); XElement timestamp = new XElement("time", DateTime.Now); XElement payload = new XElement("payload"); XElement payloadItem = new XElement("item", "Updated SMA of " + rndKey); payload.Add(payloadItem); payloadItem = new XElement("item", "Updated OOD of " + rndKey); payload.Add(payloadItem); XElement children = new XElement("children"); int childrenSize = random.Next(3, 5); for (int j = 1; j < childrenSize; j++) { XElement item = new XElement("item", "updated-child" + j.ToString()); children.Add(item); } valueNode.Add(name); valueNode.Add(desc); valueNode.Add(timestamp); valueNode.Add(payload); valueNode.Add(children); messageNode.Add(keyTypenode); messageNode.Add(valueTypeNode); messageNode.Add(keynode); messageNode.Add(valueNode); Message msg = new Message(); msg.fromUrl = localUrl; msg.toUrl = remoteUrl; msg.content = messageNode.ToString(); if (Util.verbose) { Console.WriteLine("For Edition, Msg Sent with key= " + rndKey.ToString()); } if (!sndr.sendMessage(msg)) { return; } Thread.Sleep(10); } }
public void send_wpf_latency(double latency, string query_type, Sender sndr, string localport) { Message wpf_message = new Message(); wpf_message.fromUrl = localUrl; wpf_message.toUrl = "http://localhost:8081/CommService"; string msg = "Write Client(" + localport + ") Latency time for request of type " + query_type + " = " + latency + " milliseconds"; wpf_message.content = msg; sndr.sendMessage(wpf_message); Thread.Sleep(150); //wpf_message = new Message(); }
public void send_wpf_average(string query_type, Sender sndr, string localport) { Message wpf_message = new Message(); wpf_message.fromUrl = "http://localhost:8080/CommService"; wpf_message.toUrl = "http://localhost:8081/CommService"; string msg = "Server(" + localport + "): Average processing time for " + diction[query_type].Count + " operations of type " + query_type + " = " + diction[query_type].Average() + " microseconds"; wpf_message.content = msg; sndr.sendMessage(wpf_message); Thread.Sleep(150); //wpf_message = new Message(); }
public void send_wpf_processing(ulong proc_time, string query_type, Sender sndr, string localport) { Message wpf_message = new Message(); wpf_message.fromUrl = "http://localhost:8080/CommService"; wpf_message.toUrl = "http://localhost:8081/CommService"; string msg = "Server(" + localport + "): Processing time for request of type " + query_type + " = " + proc_time + " microseconds"; wpf_message.content = msg; sndr.sendMessage(wpf_message); Thread.Sleep(150); //wpf_message = new Message(); }
private void sendAddMsg(MessageTemplate msgTemplate, Sender sndr) { Random random = new Random(); for (int i = 0; i < msgTemplate.messageSize; i++) { XElement messageNode = new XElement("message"); XAttribute att = new XAttribute("commandType", "add"); messageNode.Add(att); int rndKey = random.Next(1, 10000); XElement keyTypenode = new XElement("keyType", "string"); XElement valueTypeNode = new XElement("valueType", "ListOfString"); XElement keynode = new XElement("key", rndKey.ToString()); listOfKeys.Add(rndKey.ToString()); XElement valueNode = new XElement("value"); XElement name = new XElement("name", "name : " + i.ToString()); XElement desc = new XElement("desc", "desc : " + i.ToString()); XElement timestamp = new XElement("time", DateTime.Now); XElement payload = new XElement("payload"); int rndPayloadSize = random.Next(2, 10); for (int j = 0; j < rndPayloadSize; j++) { XElement item = new XElement("item", "item" + j + " of " + rndKey); payload.Add(item); } XElement children = new XElement("children"); int childrenSize = random.Next(3, 5); for (int j = 1; j < childrenSize; j++) { XElement item = new XElement("item", j.ToString()); children.Add(item); } valueNode.Add(name); valueNode.Add(desc); valueNode.Add(timestamp); valueNode.Add(payload); valueNode.Add(children); messageNode.Add(keyTypenode); messageNode.Add(valueTypeNode); messageNode.Add(keynode); messageNode.Add(valueNode); Message msg = new Message(); msg.fromUrl = localUrl; msg.toUrl = remoteUrl; msg.content = messageNode.ToString(); if (!sndr.sendMessage(msg)) { return; } } }
static void Main(string[] args) { MessageMaker msgMaker = new MessageMaker(); Console.Write("\nStarting Test Executive"); Console.Write("\n=============================\n"); Message msg = new Message(); HiResTimer timer = new HiResTimer(); Console.Title = "Write Client"; WriteClient writeClient = new WriteClient(); if (args.Length == 2) { writeClient.numMsg = Convert.ToInt32(args[1]); } writeClient.processCommandLine(args); string localPort = Util.urlPort(writeClient.localUrl); string localAddr = Util.urlAddress(writeClient.localUrl); Receiver rcvr = new Receiver(localPort, localAddr, timer); if (rcvr.StartService()) { rcvr.doService(rcvr.defaultServiceAction()); } Sender sndr = new Sender(writeClient.localUrl); // Sender needs localUrl for start message XDocument xmlInput = writeClient.GetInputFromXml(); var results = xmlInput.Descendants("element"); writeClient.sendMessageToServer(results, timer, msgMaker, sndr, rcvr); Console.Write("\n sender's url is {0}", writeClient.localUrl); Console.Write("\n attempting to connect to {0}\n", writeClient.remoteUrl); //Wait until all messages from server are received. while (rcvr.count < writeClient.numMsg) { sndr.SendWriterLatency(rcvr.totalExecutionTime / rcvr.count); } msg.content = "done"; msg.fromUrl = writeClient.localUrl; msg.toUrl = writeClient.remoteUrl; sndr.sendMessage(msg); Util.waitForUser(); sndr.SendWriterLatency(rcvr.totalExecutionTime / rcvr.count); rcvr.shutDown(); sndr.shutdown(); }
/// <summary> /// Requirement 7 for showing how the query read operation for getting elements having specific pattern in metadata /// <param name="msg"></param> /// <param name="sndr"></param> void TestR7D(ref Message msg, Sender sndr) { try { XmlTextReader textReader = new XmlTextReader("Input.xml"); BasicRequirementTest te = new BasicRequirementTest(); if (File.Exists("Input.xml")) { "Demonstrating Requirement #7 - Querying for getting elements having specific pattern in metadata".title('='); WriteLine(); XDocument doc = XDocument.Load("Input.xml"); string msgid = ""; msgid = intRand.Next(1, 2000).ToString(); XElement k = null; RemoveOtherReads(ref doc, "GetByMetadataCriteria"); RemoveOtherWrites(ref doc, "GetByMetadataCriteria"); k = doc.Descendants("OperationMessage").Where(d => d.Element("QueryType").Value == "GetByMetadataCriteria").Select(i => i).Single(); k.Elements("MessageID").Single().Value = msgid; msg.content = doc.ToString(); Console.Write("\nSending Message..Message is \n {0} \n", msg.content); if (sndr.sendMessage(msg)) { Console.Write("\nMessage(MessageID:{0}) to retrieve db elements with metatadata matching pattern sent successfully \n", msgid); Thread.Sleep(50); } } } catch (Exception ex) { throw new CustomException("Error occured while getting key details", ex); } }
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(); } } }
/// <summary> /// Requirement 7 for showing how the query read operation for getting packages for Repository /// <param name="msg"></param> /// <param name="sndr"></param> void TestR10(ref Message msg, Sender sndr) { try { XmlTextReader textReader = new XmlTextReader("Input.xml"); BasicRequirementTest te = new BasicRequirementTest(); if (File.Exists("Input.xml")) { "Demonstrating Requirement #7 - Querying Children package details based on Repository Key".title('='); WriteLine(); XDocument doc = XDocument.Load("Input.xml"); string msgid = ""; msgid = intRand.Next(1, 2000).ToString(); XElement k = null; RemoveOtherReads(ref doc, "GetChildren"); RemoveOtherWrites(ref doc, "GetChildren"); k = doc.Descendants("OperationMessage").Where(d => d.Element("QueryType").Value == "GetChildren").Select(i => i).Single(); k.Elements("MessageID").Single().Value = msgid; k.Elements("Key").Single().Value = KeyLs.Get()[0].ToString(); msg.content = doc.ToString(); Console.Write("\n Sending Message..Message is \n {0} \n", msg.content); if (sndr.sendMessage(msg)) { Console.Write("\nMessage(MessageID:{0}) to retrieve values for children sent successfully \n", msgid); Thread.Sleep(50); } } } catch (Exception ex) { throw new CustomException("Error occured while getting key details", ex); } }
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"); }
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 (!sndr.sendMessage(msg)) return; Thread.Sleep(100); }
//---------< 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); }
//-----------< 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; } }
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; }
/// <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); } } }
/// <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; }
/// <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; }
/// <summary> /// Requirement 5 for Persisting,Restoring,Augmentation of DB /// </summary> void TestR5(ref Message msg, Sender sndr) { try { XmlTextReader textReader = new XmlTextReader("Input.xml"); BasicRequirementTest te = new BasicRequirementTest(); if (File.Exists("Input.xml")) { "Demonstrating Requirement #5".title('='); Write("Persisting of XML file\n"); XDocument doc = XDocument.Load("Input.xml"); string msgid = "", status = "No"; msgid = intRand.Next(1, 2000).ToString(); XElement k = null; k = doc.Descendants("OperationMessage").Where(d => d.Element("Operation").Value == "ManualPersist").Select(i => i).Single(); RemoveOtherWrites(ref doc, "ManualPersist"); RemoveOtherReads(ref doc, "ManualPersist"); k.Elements("MessageID").Single().Value = msgid; status = k.Elements("Status").Single().Value; if (status == "Yes") { msg.content = doc.ToString(); Console.Write("\n Sending Message..Message is \n {0} \n", msg.content); if (sndr.sendMessage(msg)) { Console.Write("\nMessage(MessageID:{0}) to Persist DB successfully sent to Database\n", msgid); Thread.Sleep(50); } } Write("\nRestoring & Augmenting of DB\n"); doc = XDocument.Load("Input.xml"); msgid = intRand.Next(1, 2000).ToString(); k = doc.Descendants("OperationMessage").Where(d => d.Element("Operation").Value == "RestoreDB").Select(i => i).Single(); RemoveOtherWrites(ref doc, "RestoreDB"); RemoveOtherReads(ref doc, "RestoreDB"); k.Elements("MessageID").Single().Value = msgid; status = k.Elements("Status").Single().Value; if (status == "Yes") { msg.content = doc.ToString(); Console.Write("\n Sending Message..Message is \n {0} \n", msg.content); if (sndr.sendMessage(msg)) { Console.Write("\nMessage(MessageID:{0}) sent to Restore the DB successfully..\n", msgid); Thread.Sleep(50); } } } Thread.Sleep(3000); } catch (Exception ex) { throw new CustomException("Error occured while modifying the item", ex); } }
/// <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); } } }
//--------< 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; }
/// <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 void pattern_matching(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 + ",pattern," + x.Current.Element("Pattern").Value.ToString() + ","; if (x.Current.Element("Pattern").Value.ToString() != "") { str = str + counter; } msg.content += str; Console.Write("\n sending {0}", msg.content + "\n"); if (!sndr.sendMessage(msg)) return; Thread.Sleep(100); msg.content = message.ToString(); } }
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); }
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. }
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); }
/// <summary> /// Requirement 9 for loading package structure into Db /// </summary> /// <param name="msg"></param> /// <param name="sndr"></param> void TestR9(ref Message msg, Sender sndr) { try { XmlTextReader textReader = new XmlTextReader("Input.xml"); BasicRequirementTest te = new BasicRequirementTest(); if (File.Exists("Input.xml")) { "Demonstrating Requirement #9 - Loading Package structure".title('='); WriteLine(); XDocument doc = XDocument.Load("Input.xml"); string msgid = ""; msgid = intRand.Next(1, 2000).ToString(); XElement k = null; k = doc.Descendants("OperationMessage").Where(d => d.Element("Operation").Value == "LoadPackageStructure").Select(i => i).Single(); RemoveOtherReads(ref doc, "LoadPackageStructure"); RemoveOtherWrites(ref doc, "LoadPackageStructure"); k.Elements("MessageID").Single().Value = msgid; msg.content = doc.ToString(); Console.Write("\nSending Message..Message is \n {0} \n", msg.content); if (sndr.sendMessage(msg)) { Console.Write("\nMessage(MessageID:{0}) to retrieve db elements created within specified time interval sent successfully \n", msgid); Thread.Sleep(50); } } } catch (Exception ex) { throw new CustomException("Error occured while getting key details", ex); } }
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(); } }
/// <summary> /// Requirement 8 for showing results have been stored in a Immutable DB /// </summary> /// <param name="msg"></param> /// <param name="sndr"></param> void TestR8(ref Message msg, Sender sndr) { try { XDocument doc = XDocument.Load("Input.xml"); string msgid = ""; XElement k = null; Console.ForegroundColor = ConsoleColor.Green; "Demonstrating Requirement #8 - Immutable DB".title('='); WriteLine("The results have been stored in a Immutable DB can be verified in Line 404 of RequestHandler"); WriteLine("The DB cannot be edited or will not change over time"); WriteLine("DB is immutable since there are no insert or edit methods"); WriteLine("The results are now being retreived from Immutable DB"); k = doc.Descendants("OperationMessage").Where(d => d.Element("Operation").Value == "ImmutableDB").Select(i => i).Single(); RemoveOtherReads(ref doc, "ImmutableDB"); RemoveOtherWrites(ref doc, "ImmutableDB"); k.Elements("MessageID").Single().Value = msgid; k.Elements("Key").Single().Value = KeyLs.Get()[0].ToString(); msg.content = doc.ToString(); Console.Write("\n Sending Message..Message is \n {0} \n", msg.content); if (sndr.sendMessage(msg)) { Console.Write("\nMessage sent successfully, Message ID: {0} \n\n", msgid); Thread.Sleep(50); } } catch (Exception ex) { throw new CustomException("Error occured while getting key details", ex); } }
/// <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); }
//----< 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); }
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; }
/// <summary> /// Requirement 6 for scheduled save process based on time interval provided by the user /// </summary> void TestR6(ref Message msg, Sender sndr) { try { XmlTextReader textReader = new XmlTextReader("Input.xml"); BasicRequirementTest te = new BasicRequirementTest(); if (File.Exists("Input.xml")) { "Demonstrating Requirement #6".title('='); Write("Scheduling of XML file\n"); WriteLine(); XDocument doc = XDocument.Load("Input.xml"); string msgid = "", status = "No"; msgid = intRand.Next(1, 2000).ToString(); XElement k = null; k = doc.Descendants("OperationMessage").Where(d => d.Element("Operation").Value == "ScheduledPersist").Select(i => i).Single(); RemoveOtherWrites(ref doc, "ScheduledPersist"); RemoveOtherReads(ref doc, "ScheduledPersist"); k.Elements("MessageID").Single().Value = msgid; status = k.Elements("Status").Single().Value; if (status == "Yes") { msg.content = doc.ToString(); Console.Write("\n Sending Message..Message is \n {0} \n", msg.content); if (sndr.sendMessage(msg)) { Console.Write("\nMessage(MessageID:{0}) Schedule Save Process after every {1} microsecs executed twice\n", msgid, k.Elements("TimeInterval").Single().Value); Thread.Sleep(50); } } } Thread.Sleep(3000); } catch (Exception ex) { throw new CustomException("Error occured while modifying the item", ex); } }
private static void time_date_interval(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 = ""; DateTime date = new DateTime(); if (DateTime.TryParse(x.Current.Element("SDateTime").Value.ToString(), out date)) { str = str + ",sdate-time," + x.Current.Element("SDateTime").Value.ToString(); } else { return; } if (x.Current.Element("EDateTime").Value.ToString() == "" || DateTime.TryParse(x.Current.Element("SDateTime").Value.ToString(), out date)) { str = str + ",edate-time," + x.Current.Element("EDateTime").Value.ToString() + ","; } else { return; } msg.content += str; Console.Write("\n sending {0}", msg.content + "\n"); if (!sndr.sendMessage(msg)) return; Thread.Sleep(100); msg.content = message.ToString(); } }
/// <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); } }
/// <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; }