public Action define_receive_action(Receiver rcvr, bool log_messages, Sender sndr, string localport) { //Try to implement service action specific to client. Action client_receive_action = () => { Message rcv_msg = null; while (true) { rcv_msg = rcvr.getMessage(); if (rcv_msg.content == "closeReceiver") { break; } if (rcv_msg.content == "connection start message") { continue; } if (rcv_msg.content == "done") { Console.WriteLine("\n ***************************************\n All responses received from server. Going to display average results on WPF GUI."); send_wpf_final(sndr, localport); Console.WriteLine(" Enter any key on this window to close sender and receiver of this client."); continue; } try { XElement response_msg = XElement.Parse(rcv_msg.content); XElement query_response = response_msg.Element("Query_Response"); Console.WriteLine("\n Received response for Request with ID = {0} of type - {1}", response_msg.Element("Request_ID").Value, query_response.Element("Query_Type").Value); DateTime tm_start = DateTime.Parse(response_msg.Element("Request_Time_Stamp").Value); DateTime tm_now = DateTime.Now; TimeSpan lat_ts = tm_now - tm_start; Console.WriteLine(" Latency time for the Request = {0} milli seconds", lat_ts.TotalMilliseconds); if (query_response.Element("Result").Value != "Success") { Console.WriteLine(" Result of request:\n {0}", query_response.Element("Result").Value); } else { Console.WriteLine(query_response.Element("Partial").Value); if (log_messages) { Console.WriteLine(query_response.Element("Complete").Value); } } send_wpf_latency(lat_ts.TotalMilliseconds, query_response.Element("Query_Type").Value, sndr, localport); diction[query_response.Element("Query_Type").Value].Add(lat_ts.TotalMilliseconds); } catch { Console.WriteLine("\n XML format of response message is not in the expected format. A particular tag could not be found."); } } }; return(client_receive_action); }
// 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; }
Action serviceAction() { Action ServiceAction = () => { Message msg = null; while (true) { msg = rcvr.getMessage(); if (msg.content == "connection start message") { continue; } if (msg.content == "done") { continue; } if (msg.content == "closeReceiver") { break; } --totalNumMsg; if (totalNumMsg == 0) { sendTimeInfo(); } XDocument xml = new XDocument(); xml = XDocument.Parse(msg.content); string reply = xml.Descendants("Msg").Descendants("Reply").ElementAt(0).Value; string DBName = xml.Descendants("Msg").Descendants("DBName").ElementAt(0).Value; if (acts.ContainsKey(reply)) { Console.Write("\n\n ---{0} result in DB {1}--- ", reply, DBName); Console.Write(acts[reply].Invoke(msg)); } else { Console.Write("\n Invaild reply \n"); } } }; return(ServiceAction); }
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. }
//--------< Define action to be performed on receiving message >------ private static Action doserviceAction(Receiver rcvr) { Action serviceAction = () => { if (Util.verbose) Console.Write("\n starting Receiver.defaultServiceAction"); Message msg1 = null; while (true) { msg1 = rcvr.getMessage(); // note use of non-service method to deQ messages Console.Write("\n Received message:"); Console.Write("\n sender is {0}", msg1.fromUrl); Console.Write("\n content is {0}\n", msg1.content); if (msg1.content == "closeReceiver") break; } }; return serviceAction; }
//--------< Define action to be performed on receiving message >------ private static Action doserviceAction(Receiver rcvr, Client clnt) { Action serviceAction = () => { if (Util.verbose) Console.Write("\n starting Receiver.defaultServiceAction"); Message msg1 = null; while (true) { msg1 = rcvr.getMessage(); // note use of non-service method to deQ messages Console.Write("\n Received message:"); Console.Write("\n sender is {0}", msg1.fromUrl); Console.Write("\n content is {0}\n", msg1.content); if (msg1.content == "done") { clnt.read_client_latency.Stop(); clnt.flag = false; Console.WriteLine("\n\n Read Client latency: " + clnt.read_client_latency.ElapsedMicroseconds + " microseconds\n\n"); } if (msg1.content == "closeReceiver") break; } }; return serviceAction; }
//----< get Receiver and Sender running >---------------------------- void setupChannel() { rcvr = new Receiver(localPort, localAddress); Action serviceAction = () => { try { Message rmsg = null; while (true) { rmsg = rcvr.getMessage(); Action act = () => { postRcvMsg(rmsg.content); }; Dispatcher.Invoke(act, System.Windows.Threading.DispatcherPriority.Background); } } catch (Exception ex) { Action act = () => { lStat.Text = ex.Message; }; Dispatcher.Invoke(act); } }; if (rcvr.StartService()) { rcvr.doService(serviceAction); } sndr = new wpfSender(lStat, this.Dispatcher); }
void setupChannel() { try { rcvr = new Receiver(localPort, localAddress); Action serviceAction = () => { try { Message rmsg = null; while (true) { rmsg = rcvr.getMessage(); Action act = () => { postRcvMsg(rmsg.content, rmsg.fromUrl); }; Dispatcher.Invoke(act, System.Windows.Threading.DispatcherPriority.Background); } } catch (Exception ex) { Action act = () => { lblError.Content = ex.Message; }; Dispatcher.Invoke(act); } }; if (rcvr.StartService()) { rcvr.doService(serviceAction); } TextBox lStat = new TextBox(); sndr = new wpfSender(lStat, this.Dispatcher); } catch (CustomException wx) { Console.Write("Error in WPF client : {0}\n", wx.Message); } }
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; }
//----< 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(); }
//----< retrieve urls from the CommandLine if there are any >-------- public Action define_receive_action(Receiver rcvr, bool log_messages) { Action client_receive_action = () => { Message rcv_msg = null; while (true) { rcv_msg = rcvr.getMessage(); if (rcv_msg.content == "closeReceiver") { break; } if (rcv_msg.content == "connection start message") { continue; } if (rcv_msg.content == "done") { Console.WriteLine("\n ********************************\n All responses received from server."); Console.WriteLine(" Enter any key on the TestExecutive window to launch all the readers and writers."); Console.WriteLine(" Enter any key on this window to close sender and receiver of this Demo Client."); continue; } try { XElement response_msg = XElement.Parse(rcv_msg.content); Console.WriteLine("\n Received response for Request with ID = {0}", response_msg.Element("Request_ID").Value); DateTime tm_start = DateTime.Parse(response_msg.Element("Request_Time_Stamp").Value); DateTime tm_now = DateTime.Now; TimeSpan lat_ts = tm_now - tm_start; Console.WriteLine(" Latency time for the Request = {0} milli seconds", lat_ts.TotalMilliseconds); if (response_msg.Element("Query_Response") != null) { XElement query_response = response_msg.Element("Query_Response"); Console.WriteLine(" Query type = {0}", query_response.Element("Query_Type").Value); if (query_response.Element("Result").Value != "Success") { Console.WriteLine(" Result of request:\n {0}", query_response.Element("Result").Value); } if (query_response.Element("Partial") != null) { Console.WriteLine(query_response.Element("Partial").Value); } if (query_response.Element("Complete") != null) { Console.WriteLine(query_response.Element("Complete").Value); } } else { Console.WriteLine(" Result of request:\n {0}", response_msg.Element("Result").Value); } } catch { Console.WriteLine("\n XML format of response message is not in the expected format. A particular tag could not be found."); } } }; return(client_receive_action); }
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)); //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; 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; } msg.content = "received " + msg.content + " from " + msg.fromUrl; // swap urls for outgoing message Util.swapUrls(ref msg); #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 < 1000; ++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(); }
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 Action DefineServiceAction(Server srvr, Sender sndr, Receiver rcvr) { Action serviceAction = () => { Message msg = null; string msgid = ""; while (true) { msg = rcvr.getMessage(); // note use of non-service method to deQ messages Console.Write("\nReceived message:"); Console.Write("\nSender is {0}", msg.fromUrl); if (msg.content == "connection start message") { Console.Write("\nConnection start message recieved\n"); continue; //Don't Send back Start message } else if (msg.content == "done") { msg = FinalMessageServe(srvr, sndr, msg); continue; } else if (msg.content == "closeServer") { Console.Write("Received closeServer"); break; } else { ProcessResponse(srvr, sndr, ref msg, ref msgid); } } }; return serviceAction; }
/// <summary> /// Mains the specified arguments. /// </summary> /// <param name="args">The arguments.</param> static void Main(string[] args) { DatabaseController dbController = new DatabaseController(); Util.verbose = false; Server srvr = new Server(); srvr.ProcessCommandLine(args); double totalTime = 0; int count = 0; 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); Action serviceAction = () => { Message msg = null; while (true) { HiResTimer timer = new HiResTimer(); timer.Start(); msg = rcvr.getMessage(); // note use of non-service method to deQ messages srvr.displayReceivedMsg(msg); if (msg.content == "connection start message") { continue; // don't send back start message } if (msg.content == "done") { Console.Write("\n client {0} has finished\n", msg.fromUrl); continue; } if (msg.content == "closeServer") { Console.Write("received closeServer"); break; } if (msg.fromUrl == "http://localhost:8080/CommService") { continue; } var result = dbController.QueryDatabase(msg.content); msg.content = "received " + msg.content + " from " + msg.fromUrl; Util.swapUrls(ref msg); Message testMsg = new Message { content = result, fromUrl = msg.fromUrl, toUrl = msg.toUrl }; srvr.displaySentMsg(msg, result); sndr.sendMessage(testMsg); timer.Stop(); sndr.SendServerThroughput(srvr.calculateThroughput(timer, ref totalTime, ++count)); } }; if (rcvr.StartService()) { rcvr.doService(serviceAction); // so the call doesn't block. } Util.waitForUser(); }
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. }
//--------< 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; }
public Action define_server_receiveaction(Receiver rcvr, Sender sndr, bool log_messages) { HiResTimer hTimer = new HiResTimer(); DBEngine <int, DBElement <int, string> > db = new DBEngine <int, DBElement <int, string> >(); Action serviceAction = () => { Message msg = new Message(); DBProcessor db_process = new DBProcessor(); while (true) { msg = rcvr.getMessage(); // note use of non-service method to deQ messages if (msg.content == "connection start message" || msg.content == "done" || msg.content == "closeServer") { 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"); Util.swapUrls(ref msg); sndr.sendMessage(msg); continue; } if (msg.content == "closeServer") { Console.Write("received closeServer"); break; } hTimer.Start(); XElement result = db_process.process_msg <int, DBElement <int, string>, string>(msg.content, db); hTimer.Stop(); if (log_messages) { Console.WriteLine(" Time taken to process this request = {0} microseconds", hTimer.ElapsedMicroseconds); } double tm = (double)hTimer.ElapsedMicroseconds; XElement request_mesg = XElement.Parse(msg.content); XElement request_id = request_mesg.Element("Request_ID"); XElement request_time = request_mesg.Element("Request_Time_Stamp"); string method = request_mesg.Element("Request_Type").Value; send_wpf_processing(hTimer.ElapsedMicroseconds, method, sndr, port); diction[method].Add(tm); if (diction[method].Count % 10 == 0) { send_wpf_average(method, sndr, port); } XElement response_server = new XElement("Response_Message"); response_server.Add(request_id); response_server.Add(request_time); response_server.Add(result); msg.content = response_server.ToString(); Util.swapUrls(ref msg); sndr.sendMessage(msg); } }; return(serviceAction); }
static void Main(string[] args) { Console.Title = "Simple Server"; String.Format("Simple Server Started listing on {0}", port).title('='); SimpleSender sndr = new SimpleSender(); Receiver rcvr = new Receiver(port, address); rcvr.StartService(); while (true) { Message msg = rcvr.getMessage(); Console.Write("\n Simple Server received:"); Utilities.showMessage(msg); if (msg.content == "done") { Console.WriteLine(); rcvr.shutDown(); sndr.shutdown(); break; } if (msg.content == "connection start message") { continue; } msg.content = "Simple Server received: " + msg.content; Utilities.swapUrls(ref msg); if (sndr.goodStatus == true) { #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 < 1000; ++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 } else { Console.Write("\n closing\n"); rcvr.shutDown(); sndr.shutdown(); break; } Console.WriteLine(); } }