private static void parseQuery(string querytype, IEnumerator<XElement> x, ref Message msg1, Sender sndr) { Message msg = new Message(); msg.fromUrl = msg1.fromUrl; msg.toUrl = msg1.toUrl; msg.content = msg1.content.ToString(); switch (querytype) { case "Search Key-Value": search_key_value(x, ref msg, sndr); break; case "Search Children": search_children(x, ref msg, sndr); break; case "Pattern Matching": pattern_matching(x, ref msg, sndr); break; case "String in Metadata": string_metadata(x, ref msg, sndr); break; case "Time-Date Interval": time_date_interval(x, ref msg, sndr); break; case "Restore": restore_database(x, ref msg, sndr); break; } }
public void parse(XDocument newDoc, ref Message msg, Sender sndr) { Console.WriteLine(newDoc.ToString()); Console.WriteLine(); var root = newDoc.Root.Elements("DB"); foreach (XElement Root in root) { string keytype, payloadtype = ""; keytype = Root.Element("KeyType").Value.ToString(); payloadtype = Root.Element("PayloadType").Value.ToString(); msg.content = "keytype," + keytype + ",payloadtype," + payloadtype; Console.WriteLine("\n" + msg.content); var query = Root.Elements("Query"); IEnumerator<XElement> x = query.GetEnumerator(); string message = new String(msg.content.ToCharArray()); while (x.MoveNext()) { msg.content += ",query,"; string querytype = ""; querytype = x.Current.Element("QueryType").Value.ToString(); msg.content += "querytype," + querytype; parseQuery(querytype, x, ref msg, sndr); msg.content = message; } } }
public Message makeMessage(string fromUrl, string toUrl) { Message msg = new Message(); msg.fromUrl = fromUrl; msg.toUrl = toUrl; msg.content = String.Format("\n message #{0}", ++msgCount); return msg; }
//--------------custom message creation for every request-------------// public Message makeMessage(string fromUrl, string toUrl, XElement request) { Message msg = new Message(); msg.fromUrl = fromUrl; msg.toUrl = toUrl; msg.content = request.ToString(); return msg; }
public Message makeMessage(string fromUrl, string toUrl) { XDocument xmlDoc = XDocument.Load("C:\\Users\\rakeshh91\\Desktop\\WriterClientInput.xml"); Message msg = new Message(); msg.fromUrl = fromUrl; msg.toUrl = toUrl; //msg.content = String.Format("\n message #{0}", ++msgCount); msg.content = xmlDoc.ToString(); return msg; }
//---------< add data according to query to message >------------- private void time_Date_Interval(ref Message msg) { DateTime date = new DateTime(); if (S_Date_Value.Text != "Timestamp (MM/DD/YYYY HH:MM:SS AM/PM)" && S_Date_Value.Text != null && DateTime.TryParse(S_Date_Value.Text, out date)) { msg.content += "sdate-time," + date.ToString() + ","; if (E_Date_Value.Text == "Timestamp (MM/DD/YYYY HH:MM:SS AM/PM)") { msg.content += "edate-time,"; if (sndr.sendMessage(msg)) { Result_Box.Items.Insert(0, "Sending Message: " + msg.content); } else { Result_Box.Items.Insert(0, "Not able to send Message"); } } else if (E_Date_Value.Text != "Timestamp (MM/DD/YYYY HH:MM:SS AM/PM)" && DateTime.TryParse(E_Date_Value.Text, out date)) { msg.content += "edate-time," + date.ToString() + ","; if (sndr.sendMessage(msg)) { Result_Box.Items.Insert(0, "Sending Message: " + msg.content); } else { Result_Box.Items.Insert(0, "Not able to send Message"); } } else { Result_Box.Items.Insert(0, "Not a Valid Date"); return; } } else { Result_Box.Items.Insert(0, "Not a Valid Date"); return; } }
static void Main(string[] args) { try { HiResTimer hres = new HiResTimer(); //High Resolution Timer Console.Write("\nStarting CommService write client"); Console.Write("\n =============================\n"); Console.Title = "Write Client"; Message msg = new Message(); WriterClient clnt = new WriterClient(); clnt.processCommandLine(args); string localPort = Util.urlPort(clnt.localUrl); string localAddr = Util.urlAddress(clnt.localUrl); Receiver rcvr = new Receiver(localPort, localAddr); Action serviceAction = DefineServiceAction(hres, clnt, rcvr); if (rcvr.StartService()) rcvr.doService(serviceAction); Sender sndr = new Sender(clnt.localUrl); // Sender needs localUrl for start message msg.fromUrl = clnt.localUrl; msg.toUrl = clnt.remoteUrl; Console.Write("Sender's url is {0}", msg.fromUrl); Console.Write("Attempting to connect to {0}\n", msg.toUrl); if (!sndr.Connect(msg.toUrl)) { Console.Write("Could not connect in {0} attempts\n", sndr.MaxConnectAttempts); sndr.shutdown(); rcvr.shutDown(); return; } PerformanceTesting(hres, msg, clnt, rcvr, sndr); } catch (CustomException ex) { throw new CustomException("Error in main of writer client", ex); } }
//----< send closeSender message to local sender >------------------- public void shutdown() { Message sdmsg = new Message(); sdmsg.fromUrl = localUrl; sdmsg.toUrl = localUrl; sdmsg.content = "closeSender"; Console.Write("\n shutting down local sender"); sendMessage(sdmsg); }
//----< send closeReceiver message to local Receiver >--------------- public void shutDown() { Console.Write("\n Local receiver shutting down"); Message msg = new Message(); msg.content = "closeReceiver"; msg.toUrl = Util.makeUrl(address, port); msg.fromUrl = msg.toUrl; Util.showMessage(msg); svc.sendMessage(msg); host.Close(); }
static void Main(string[] args) { XMLUtilitySpace.title("testing utilities"); Console.WriteLine(); XMLUtilitySpace.title("testing makeUrl"); string localUrl = Utilities.makeUrl("localhost", "7070"); string remoteUrl = Utilities.makeUrl("localhost", "7071"); Console.Write("\n localUrl = {0}", localUrl); Console.Write("\n remoteUrl = {0}", remoteUrl); Console.WriteLine(); XMLUtilitySpace.title("testing url parsing"); string port = Utilities.urlPort(localUrl); string addr = Utilities.urlAddress(localUrl); Console.Write("\n local port = {0}", port); Console.Write("\n local addr = {0}", addr); Console.WriteLine(); XMLUtilitySpace.title("testing processCommandLine"); bool logging = false; string wpfClientURL = "http://localhost:8089/CommService"; localUrl = Utilities.processCommandLineForLocal(args, localUrl, ref logging,ref wpfClientURL); remoteUrl = Utilities.processCommandLineForRemote(args, remoteUrl); Console.Write("\n localUrl = {0}", localUrl); Console.Write("\n remoteUrl = {0}", remoteUrl); Console.WriteLine(); XMLUtilitySpace.title("testing swapUrls(ref Message msg)"); Message msg = new Message(); msg.toUrl = "http://localhost:8080/CommService"; msg.fromUrl = "http://localhost:8081/CommService"; msg.content = "swapee"; Utilities.showMessage(msg); Console.WriteLine(); Utilities.swapUrls(ref msg); Utilities.showMessage(msg); Console.Write("\n\n"); }
public static void swapUrls(ref Message msg) { string temp = msg.fromUrl; msg.fromUrl = msg.toUrl; msg.toUrl = temp; }
//---------< add database type to message >------------- private void get_DB_type(ref Message msg) { switch (comboBox_db.SelectedValue.ToString()) { case "Database<int,string>": msg.content = "keytype,integer,payloadtype,String,"; flag = false; break; case "Database<string,List<string>>": msg.content = "keytype,String,payloadtype,List`1,"; flag = true; break; } }
//---------< add data according to query to message >------------- private void delete_Element(ref Message msg) { msg.content += "key,"; if (Key_Value.Text != null & Key_Value.Text != "Key of an Element") { if (!validate_Key(Key_Value.Text)) { Result_Box.Items.Insert(0, "Not a valid key"); return; } msg.content += Key_Value.Text; if (sndr.sendMessage(msg)) { Result_Box.Items.Insert(0, "Sending Message: " + msg.content); } else { Result_Box.Items.Insert(0, "Not able to send Message"); } } else { Result_Box.Items.Insert(0, "Not a Valid Query"); } }
//---------< add payload to query message >------------- private bool addPayload(ref Message msg) { msg.content += "payload,"; if (Number_of_Payload.Text != "Payload (String,String)" && Number_of_Payload.Text != null) { if (Number_of_Payload.Text.Contains(',')) { String[] payloadList = Number_of_Payload.Text.Split(','); msg.content += payloadList.Length + ","; foreach (string payload in payloadList) { msg.content += payload + ","; } } else { msg.content += "1," + Number_of_Payload.Text.ToString() + ","; } return true; } else { Result_Box.Items.Insert(0, "Not a Valid Payload"); return false; } }
//---------< add children to query message >------------- private bool addChildren(ref Message msg) { msg.content += "children,"; if (Number_Of_Children.Text != "Children (String,String)" && Number_Of_Children.Text != null) { if (Number_Of_Children.Text.Contains(',')) { String[] children = Number_Of_Children.Text.Split(','); msg.content += children.Length + ","; foreach (string child in children) { if (!validate_Children(child)) { Result_Box.Items.Insert(0, "Not a valid children"); return false; } msg.content += child + ","; } } else { if (!validate_Children(Number_Of_Children.Text.ToString())) { Result_Box.Items.Insert(0, "Not a valid children"); return false; } msg.content += "1," + Number_Of_Children.Text.ToString() + ","; } return true; } else { Result_Box.Items.Insert(0, "Not a Valid Child"); return false; } }
//----< defines SendThread and its operations >---------------------- /* * - asynchronous function defines Sender sendThread processing * - creates BlockingQueue<Message> to use inside Sender.sendMessage() * - creates and starts a thread executing that processing * - uses msg.toUrl to find or create a proxy for url destination */ public virtual SWTools.BlockingQueue <Message> defineSendProcessing() { SWTools.BlockingQueue <Message> sendQ = new SWTools.BlockingQueue <Message>(); Action sendAction = () => { ThreadStart sendThreadProc = () => { while (true) { try { Message smsg = sendQ.deQ(); if (smsg.content == "closeSender") { Console.Write("\n send thread quitting\n\n"); break; } if (proxyStore.ContainsKey(smsg.toUrl)) { // proxy already created so use it if (Util.verbose) { Console.Write("\n sender sending message to service {0}", smsg.toUrl); } proxyStore[smsg.toUrl].sendMessage(smsg); } else { // create new proxy with Connect, save it, and use it if (this.Connect(smsg.toUrl)) // if Connect succeeds it will set proxy and send start msg { if (Util.verbose) { Console.Write("\n sender created proxy and sending message {0}", smsg.toUrl); } proxyStore[smsg.toUrl] = this.proxy; // save proxy proxy.sendMessage(smsg); } else { sendMsgNotify(String.Format("could not connect to {0}\n", smsg.toUrl)); continue; } } } catch (Exception ex) { sendExceptionNotify(ex); continue; } } }; Thread t = new Thread(sendThreadProc); // start the sendThread t.IsBackground = true; t.Start(); }; this.setAction(sendAction); return(sendQ); }
//----< send a message to remote Receiver >-------------------------- public bool sendMessage(Message msg) { sendQ.enQ(msg); return(true); }
//---------< add querytype to message >------------- private void write_client_query(ref Message msg) { switch (comboBox_query.SelectedItem.ToString()) { case "Insert Element": msg.content += "Insert Element,"; insert_Element_clicked(ref msg); break; case "Edit Element Metadata": msg.content += "Edit Element Metadata,"; edit_Element_Metadata_clicked(ref msg); break; case "Edit Element Metadata and Add Children": msg.content += "Edit Element Metadata and Add Children,"; edit_Element_Metadata_clicked(ref msg); break; case "Edit Element Metadata and Remove Children": msg.content += "Edit Element Metadata and Remove Children,"; edit_Element_Metadata_clicked(ref msg); break; case "Edit Element Metadata and Edit Payload": msg.content += "Edit Element Metadata and Edit Payload,"; edit_Element_Metadata_clicked(ref msg); break; case "Delete Element": msg.content += "Delete Element,"; delete_Element(ref msg); break; case "Persist Database": msg.content += "Persist Database,"; persist_Database(ref msg); break; case "Restore Database": msg.content += "Restore Database,"; restore_Database(ref msg); break; } }
static void Main(string[] args) { "testing utilities".title('='); Console.WriteLine(); "testing makeUrl".title(); string localUrl = Utilities.makeUrl("localhost", "7070"); string remoteUrl = Utilities.makeUrl("localhost", "7071"); Console.Write("\n localUrl = {0}", localUrl); Console.Write("\n remoteUrl = {0}", remoteUrl); Console.WriteLine(); "testing url parsing".title(); string port = urlPort(localUrl); string addr = urlAddress(localUrl); Console.Write("\n local port = {0}", port); Console.Write("\n local addr = {0}", addr); Console.WriteLine(); "testing processCommandLine".title(); localUrl = Utilities.processCommandLineForLocal(args, localUrl); remoteUrl = Utilities.processCommandLineForRemote(args, remoteUrl); Console.Write("\n localUrl = {0}", localUrl); Console.Write("\n remoteUrl = {0}", remoteUrl); Console.WriteLine(); "testing swapUrls(ref Message msg)".title(); Message msg = new Message(); msg.toUrl = "http://localhost:8080/CommService"; msg.fromUrl = "http://localhost:8081/CommService"; msg.content = "swapee"; Utilities.showMessage(msg); Console.WriteLine(); Utilities.swapUrls(ref msg); Utilities.showMessage(msg); Console.Write("\n\n"); }
//---------< add data according to query to message >------------- private void insert_Element_clicked(ref Message msg) { msg.content += "key,"; if (Key_Value.Text != null & Key_Value.Text != "Key of an Element") { if (!validate_Key(Key_Value.Text)) { Result_Box.Items.Insert(0, "Not a valid key"); return; } msg.content += Key_Value.Text + ",name," + Name_Value.Text + ",descr," + Descr_Value.Text + ",timestamp,"; DateTime date = new DateTime(); if (Timestamp_Value.Text != "Timestamp (MM/DD/YYYY HH:MM:SS AM/PM)" & Timestamp_Value.Text != null & DateTime.TryParse(Timestamp_Value.Text, out date)) { msg.content += date.ToString() + ","; } else { Result_Box.Items.Insert(0, "Not a Valid Date"); return; } if (!addChildren(ref msg)) { return; } if (!addPayload(ref msg)) { return; } if (sndr.sendMessage(msg)) { Result_Box.Items.Insert(0, "Sending Message: " + msg.content); } else { Result_Box.Items.Insert(0, "Not able to send Message"); } } else { Result_Box.Items.Insert(0, "Not a Valid Query"); } }
public static void showMessage(Message msg) { Console.Write("\n msg.fromUrl: {0}", msg.fromUrl); Console.Write("\n msg.toUrl: {0}", msg.toUrl); Console.Write("\n msg.content: {0}", msg.content); }
//---------< add data according to query to message >------------- private void pattern_Matching(ref Message msg) { msg.content += "pattern,"; if (Pattern_Value.Text != "Pattern to Search") { msg.content += Pattern_Value.Text; if (sndr.sendMessage(msg)) { Result_Box.Items.Insert(0, "Sending Message: " + msg.content); } else { Result_Box.Items.Insert(0, "Not able to send Message"); } } else if (Pattern_Value.Text == null) { msg.content += ""; if (sndr.sendMessage(msg)) { Result_Box.Items.Insert(0, "Sending Message: " + msg.content); } else { Result_Box.Items.Insert(0, "Not able to send Message"); } } else { Result_Box.Items.Insert(0, "Not a Valid Query"); } }
/// <summary> /// R#7 Queries for the value of a specified key,The children of a specified key. /// The set of all keys matching a specified pattern which defaults to all keys. /// </summary> public void ReadQueryHandle(ref Message msg, ref string msgid) { bool status = false; string pattern = ""; XDocument doc = XDocument.Load(new StringReader(msg.content)); string op = doc.Descendants("OperationMessage").Select(i => i.Element("QueryType")).Single().Value; msgid = doc.Descendants("MessageID").Select(i => i).Single().Value; int key = 0; switch(op) { case "GetByKey": DBElement<int, string> elem; GetByKey(out status, ref doc, out key, out elem); msg.content = doc.ToString(); break; case "GetChildren": GetChildren(out status, ref doc, out key, out elem); msg.content = doc.ToString(); break; case "GetKeyCriteria": pattern = GetKeyCriteria(ref doc); msg.content = doc.ToString(); break; case "GetByMetadataCriteria": pattern = GetByMetaData(ref doc); msg.content = doc.ToString(); break; case "GetByTimeStampCriteria": List<int> keyMet; DateTime FromDate = DateTime.Parse(doc.Descendants("FromDate").Select(i => i).Single().Value); DateTime ToDate; GetByTimeStampCriteria(ref doc, out keyMet, FromDate, out ToDate); msg.content = doc.ToString(); break; } }
//----< Connect repeatedly tries to send messages to service >------- /// <summary> /// Connect to sender service /// </summary> /// <param name="remoteUrl"></param> /// <returns></returns> public bool Connect(string remoteUrl) { if (Util.verbose) sendMsgNotify("attempting to connect"); if (isConnected(remoteUrl)) return true; proxy = CreateProxy(remoteUrl); int attemptNumber = 0; Message startMsg = new Message(); startMsg.fromUrl = localUrl; startMsg.toUrl = remoteUrl; startMsg.content = "connection start message"; while (attemptNumber < MaxConnectAttempts) { try { proxy.sendMessage(startMsg); // will throw if server isn't listening yet proxyStore[remoteUrl] = proxy; // remember this proxy if (Util.verbose) sendMsgNotify("connected"); return true; } catch { ++attemptNumber; sendAttemptNotify(attemptNumber); Thread.Sleep(100); } } return false; }
//---------< add querytype to message >------------- private void read_client_query(ref Message msg) { switch (comboBox_query.SelectedItem.ToString()) { case "Search Key-Value": msg.content += "Search Key-Value,"; search_Key_Value(ref msg); break; case "Search Children": msg.content += "Search Children,"; search_Children(ref msg); break; case "Pattern Matching in Key": msg.content += "Pattern Matching,"; pattern_Matching(ref msg); break; case "String in Metadata": msg.content += "String in Metadata,"; string_Metadata(ref msg); break; case "Time-Date Interval": msg.content += "Time-Date Interval,"; time_Date_Interval(ref msg); break; } }
//----< one way to define Receiver functionality >------------------- /* * - This function not used in these demos. * - Instead, Receiver functionality is defined by a serviceAction. * - Look at Server main for an example. */ public virtual void serverProcessMessage(Message msg) { }
//----< called by clients, will only block briefly >----------------- public void sendMessage(Message msg) { if(Util.verbose) Console.Write("\n this is CommService.sendMessage"); rcvrQueue.enQ(msg); }
//---------< add data according to query to message >------------- private void restore_Database(ref Message msg) { msg.content += "Source,"; if (File_Name_Value.Text != null & File_Name_Value.Text != "Write File Name") { msg.content += File_Name_Value.Text; if (sndr.sendMessage(msg)) { Result_Box.Items.Insert(0, "Sending Message: " + msg.content); } else { Result_Box.Items.Insert(0, "Not able to send Message"); } } else { Result_Box.Items.Insert(0, "Not a Valid File Name"); } }
//----< send a message to remote Receiver >-------------------------- public bool sendMessage(Message msg) { sendQ.enQ(msg); return true; }
//---------< add data according to query to message >------------- private void search_Key_Value(ref Message msg) { msg.content += "key,"; if (Key_Value.Text != null & Key_Value.Text != "Key of an Element") { msg.content += Key_Value.Text; if (sndr.sendMessage(msg)) { Result_Box.Items.Insert(0, "Sending Message: " + msg.content); } else { Result_Box.Items.Insert(0, "Not able to send Message"); } } else { Result_Box.Items.Insert(0, "Not a Valid Query"); } }
//----< 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); }
//---------< add data according to query to message >------------- private void string_Metadata(ref Message msg) { msg.content += "string,"; if (Pattern_Value.Text != null & Pattern_Value.Text != "Pattern to Search") { msg.content += Pattern_Value.Text; if (sndr.sendMessage(msg)) { Result_Box.Items.Insert(0, "Sending Message: " + msg.content); } else { Result_Box.Items.Insert(0, "Not able to send Message"); } } else { Result_Box.Items.Insert(0, "Not a Valid Query"); } }