Пример #1
0
 // It is the event associated with Send button under LaunchTesters tab. It sends messages to the port mentioned in textbox upon the connection. WPF then considers that port as remote port.
 private void Sender(object sender, RoutedEventArgs e)
 {
     try
     {
         if (!RemotePort.Equals(rPort.Text))
         {
             RemotePort = rPort.Text;
         }
         MessageGenerator maker = new MessageGenerator();
         Message          msg   = maker.MessageCreator(UtilityMethods.makeUrl(LocalAddress, LocalPort), UtilityMethods.makeUrl(RemoteAddress, RemotePort));
         lStat.Text         = "Sending to" + msg.ToURL;
         UISender.LocalURL  = msg.FromURL;
         UISender.RemoteURL = msg.ToURL;
         msg.TimeSent       = DateTime.Now;
         TimeSent           = DateTime.Now;
         lStat.Text         = "Attempting to connect";
         if (UISender.sendMessage(msg))
         {
             lStat.Text = "Connected";
         }
         else
         {
             lStat.Text = "Connection failed";
         }
         postSndMsg(msg.MessageContent);
     }
     catch (Exception ex)
     {
         lStat.Text = ex.Message;
     }
 }
Пример #2
0
        // In WriteCLient tab, XML Message stream containing all queries is sent to its target address upon the click of this button
        private void WCSendList_Click(object sender, RoutedEventArgs e)
        {
            MessageXML.Save("MessageStream.xml");
            MessageGenerator maker           = new MessageGenerator();
            Message          WCMessageStream = maker.MessageCreator(UtilityMethods.makeUrl(LocalAddress, LocalPort), UtilityMethods.makeUrl(RemoteAddress, RemotePort));

            WCMessageStream.MessageContent = MessageXML.ToString();
            WCMessageStream.MessageID      = String.Concat("WC", WCMessageID.ToString());
            StatusLabel1.Content           = "Sending to " + WCMessageStream.ToURL;
            try
            {
                WCMessageStream.TimeSent = DateTime.Now;
                if (UISender.sendMessage(WCMessageStream))  // The stream is sent across at this line.
                {
                    StatusLabel1.Content = "Message stream sent";
                }
                else
                {
                    StatusLabel1.Content = "Failed to send";
                }
            }
            catch (Exception EX)
            {
                StatusLabel1.Content = EX.Message;
            }
            MessageXML.Save("MessageStream.xml");
            MessageXML.Element("MessageStream").Elements().Remove();
            WCMessages.Items.Clear();
        }
Пример #3
0
        private void RCSendList_Click(object sender, RoutedEventArgs e)             // In ReadCLient tab, XML Message stream containing all queries is sent to its target address upn the click
        {                                                                           // of this button. Message ID is generated based on value of RCMessageID value declared at the start.
            MessageGenerator maker           = new MessageGenerator();
            Message          RCMessageStream = maker.MessageCreator(UtilityMethods.makeUrl(LocalAddress, LocalPort), UtilityMethods.makeUrl(RemoteAddress, RemotePort));

            RCMessageStream.MessageContent = MessageXML.ToString();
            RCMessageStream.MessageID      = String.Concat("RC", RCMessageID.ToString());
            StatusLabel.Content            = "Sending to " + RCMessageStream.ToURL;
            try
            {
                RCMessageStream.TimeSent = DateTime.Now;
                if (UISender.sendMessage(RCMessageStream))       // Cuurent date time is stored when a message is sent
                {
                    StatusLabel.Content = "Message stream sent";
                }
                else
                {
                    StatusLabel.Content = "Failed to send";
                }
            }
            catch (Exception EX)
            {
                StatusLabel.Content = EX.Message;
            }
            MessageXML.Save("MessageStream.xml");                          // XML Message is saved before it is sent across
            MessageXML.Element("MessageStream").Elements().Remove();       // Elements are removed as to make the same XML document for the query results received after processing.
            RCMessages.Items.Clear();                                      // Those would be added in the same XML message to avoid losing any property required to measure the performance
        }
Пример #4
0
        //----< send closeReceiver message to local Receiver >---------------

        public void shutDown()
        {
            Console.Write("\n  local receiver shutting down");
            Message message = new Message();

            message.MessageContent = "closeReceiver";
            message.ToURL          = UtilityMethods.makeUrl(address, port);
            message.FromURL        = message.ToURL;
            message.TimeSent       = DateTime.Now;
            UtilityMethods.showMessage(message);
            ReceivingQ.sendMessage(message);
            Host.Close();
        }
Пример #5
0
 // It launches the instances of readers and writers based on input given by user. It uses Starter project to start the instances
 private void Launcher(object sender, RoutedEventArgs e)
 {
     try
     {
         int    R = 0, W = 0;
         string ARG4 = "";
         if (CheckedLogging == null || CheckedLogging.Content.ToString() == "No")
         {
             ARG4 = "F";
         }
         else
         {
             ARG4 = "T";
         }
         if (((Readers.Text.Trim() != null || Readers.Text.Trim() != "") && (bool)int.TryParse(Readers.Text.Trim(), out R)) && ((Writers.Text != null || Writers.Text.Trim() != "") && (bool)int.TryParse(Writers.Text.Trim(), out W)))
         {
             string[] args = new string[] { "ReadClient", R.ToString(), "WriteClient", W.ToString(), ARG4 };
             Starter.StartClientsfromWPF(args);
             Message NoOfClients = new Message();
             NoOfClients.FromURL  = UtilityMethods.makeUrl(LocalAddress, LocalPort); NoOfClients.ToURL = UtilityMethods.makeUrl(RemoteAddress, RemotePort);
             NoOfClients.TimeSent = DateTime.Now;
             XDocument ClientInfo = new XDocument();
             int       T          = R + W;
             ClientInfo.Add(new XElement("NoOfClient", T));
             NoOfClients.MessageContent = ClientInfo.ToString();
             UISender.sendMessage(NoOfClients);
         }
         else
         {
             Status.Items.Insert(0, "Couldn't start the clients. Enter valid inputs.\nEnter 0 against the client you don't wish to start");
         }
     }
     catch (Exception)
     {
         MessageBoxResult alert = MessageBox.Show("Couldn't start the clients. Enter valid inputs");
     }
 }
Пример #6
0
        //----< Test Stub >--------------------------------------------------

#if (TEST_RECEIVER)
        static void Main(string[] args)
        {
            UtilityMethods.verbose = true;

            Console.Title = "CommunicationManager Receiver";
            Console.Write("\n  Starting CommunicationManager Receiver");
            Console.Write("\n ===============================\n");

            Receiver rcvr = new Receiver();

            rcvr.ProcessCommandLine(args);

            Console.Write("\n  Receiver url = {0}\n", UtilityMethods.makeUrl(rcvr.address, rcvr.port));

            // serviceAction defines what the server does with received messages

            if (rcvr.StartService())
            {
                rcvr.doService(rcvr.defaultServiceAction()); // equivalent to rcvr.doService()
            }
            Console.Write("\n  press any key to exit: ");
            Console.ReadKey();
            Console.Write("\n\n");
        }
Пример #7
0
        static void Main(string[] args)
        {
            Server server = new Server();

            (String.Format("\n  Starting Server where databases reside")).Wrap();
            server.ProcessCommandLine(args);
            Console.Title = "Server";
            Sender   ServerSender   = new Sender(UtilityMethods.makeUrl(server.ServerAddress, server.ServerPort));
            Receiver ServerReceiver = new Receiver(server.ServerPort, server.ServerAddress);

            Console.WriteLine("  Listening on ServerPort {0}\n", server.ServerPort);
            server.LoadDB();
            HiResTimer HRTimer = new HiResTimer();
            bool       first = true;
            int        TotalNOC = 0, NOC = 0; // To know number of clients connected to server
            Action     serviceAction = () =>
            {
                Message ServerQuery = null;
                while (true)
                {
                    bool a = ServerReceiver.IsEMPTY();             // checks whether receiving Q is empty
                    if (!(first == false && a == true))            // This check helps in determining the time when server is done with the processing of all queries
                    {
                        ServerQuery = ServerReceiver.getMessage(); // note use of non-service method to deQ messages
                        first       = false;
                        if (ServerQuery.MessageContent != "closeReceiver" && !ServerQuery.MessageContent.StartsWith("<NoOfClient"))
                        {
                            String.Format("\n  Received new message from {0}", ServerQuery.FromURL).Wrap();
                            Console.Write("\n  MessageContent is\n  {0}", ServerQuery.MessageContent);
                            Console.Write("\n  Message was sent on {0}", ServerQuery.TimeSent);
                            Console.Write("\n  Message was received on {0}", DateTime.Now);
                            Console.Write("\n  Message took {0} milliseconds or {1} microseconds on communication channel\n", (DateTime.Now - ServerQuery.TimeSent).TotalMilliseconds, (DateTime.Now.Ticks / 10 - ServerQuery.TimeSent.Ticks / 10));
                        }
                        if (ServerQuery.MessageContent == "connection start message")
                        {
                            continue; // don't send back start message
                        }
                        if (ServerQuery.MessageContent == "closeReceiver")
                        {
                            Console.Write("  Received closeReceiver");
                            break;
                        }
                        if (ServerQuery.MessageContent.StartsWith("<QueryType"))
                        {
                            ++TotalQueries;
                            server.ProcessMessageQuery(ref ServerQuery, ref ServerSender, ref HRTimer);
                            Thread.Sleep(100);
                        }

                        if (ServerQuery.MessageContent.StartsWith("<MessageStream"))
                        {
                            ++TotalQueries;
                            server.ProcessMessageStream(ServerQuery.MessageContent);
                            Thread.Sleep(100);
                        }

                        if ((ServerQuery.MessageContent.StartsWith("<NoOfClient")))
                        {
                            TotalNOC = int.Parse(XDocument.Parse(ServerQuery.MessageContent).Root.Value);
                        }

                        if (ServerQuery.MessageContent.StartsWith("DONE")) // Increment counter as a client is done. If number of elements in ProxyDB is equal to this, it means all clients are done.
                        {
                            ++NOC;                                         // Increment it every time a client is done
                            "\n\n  Please wait while performance is calculated. It may take some time as performance is being calculated at a very granular level".Wrap();
                            "  Almost there. Just a peek of performance in XML format".Wrap();
                            ServerSender.Connect(UtilityMethods.makeUrl("localhost", "8081"));                   ////  WPF Port Address. Change it if you change WPF local port.
                            XDocument SendPerformance = server.PerformanceMeasurer();                            //
                            Message   PM = new Message();                                                        // If yes, send the performance results to WPF
                            PM.MessageContent = SendPerformance.ToString();                                      //
                            PM.FromURL        = UtilityMethods.makeUrl(server.ServerAddress, server.ServerPort); //
                            PM.ToURL          = UtilityMethods.makeUrl("localhost", "8081");
                            Console.WriteLine("\n" + SendPerformance.ToString() + "\n" + "\n  One may check the summary of server hosting the database under 'Summary' tab of UserInterface.");
                            ServerSender.sendMessage(PM);
                        }
                    }
                    else
                    {
                        //TotalNOC = TestExecutive.NoOfClients;
                        if (NOC != 0 && TotalNOC != 0 && TotalNOC == NOC)   // Check if all clients are done sending messages to server AND server is done sending all messages. If yes, shutdown receiver. // Requirement odf shutting down is met when clients are started using WPF
                        {
                            ServerReceiver.shutDown();
                        }
                    }
                }
            };

            if (ServerReceiver.StartService())
            {
                ServerReceiver.doService(serviceAction); // This serviceAction asynchronous, so the call doesn't block.
            }
            // Test.DisplayDBafterProcessing();  // When readers and writers are initiated by WPF, it asks whether to display DBs after processing
            UtilityMethods.waitForUser();
        }