//--------< Define action to be performed on receiving message >------ private static Action doserviceAction(Sender sndr, Receiver rcvr, Server srvr) { int counter_write = 0; int counter_read = 0; ulong write_clnt_process_time = 0; ulong read_clnt_latency_time = 0; ulong server_throughput_time = 0; Action serviceAction = () => { Message msg = null; while (true) { msg = rcvr.getMessage(); // note use of non-service method to deQ messages Console.Write("\n Received message:\n"); Console.Write("\n sender is {0}\n", msg.fromUrl); Console.Write("\n content is {0}\n", msg.content); if (specialMessage(ref msg, srvr, sndr, rcvr, ref read_clnt_latency_time, ref write_clnt_process_time, ref server_throughput_time, ref counter_write, ref counter_read)) { continue; } else if (msg.content == "closeServer") { Console.Write("\n\nreceived closeServer\n\n"); break; } else { WriteLine(); List<string> msg_list = msg.content.Split(',').ToList<string>(); IEnumerator<string> msg_enumerator = msg_list.GetEnumerator(); ServerParser sp = new ServerParser(); string str = ""; while (msg_enumerator.MoveNext()) { getDatabase(ref sp, ref msg_enumerator, ref str); }; // swap urls for outgoing message msg.content = str; Util.swapUrls(ref msg); ///////////////////////////////////////////////// // Use the statement below for normal operation Console.WriteLine("\n\n Sending Message: " + msg.content + "\n\n"); sndr.sendMessage(msg); } } }; return serviceAction; }
//-----------< action for received query messages >------------ private static void getDatabase(ref ServerParser sp, ref IEnumerator<string> msg_enumerator, ref string str) { bool flag_int = false, flag_str = false; switch (msg_enumerator.Current) { case "keytype": msg_enumerator.MoveNext(); if (msg_enumerator.Current == "integer") { flag_int = true; flag_str = false; } if (msg_enumerator.Current == "String") { flag_int = false; flag_str = true; } break; case "payloadtype": msg_enumerator.MoveNext(); if (msg_enumerator.Current == "String") { flag_int = true; flag_str = false; } if (msg_enumerator.Current == "List`1") { flag_int = false; flag_str = true; } if (flag_int) { str = sp.parse(ref msg_enumerator, db); } else if (flag_str) { str = sp.parse(ref msg_enumerator, enum_db); } break; } }