Ejemplo n.º 1
0
        //----< 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);
        }
Ejemplo n.º 2
0
    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);
      //srvr.addValue(2);
            
		// - 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;
		int key;
		
        while (true)
        {
          msg = rcvr.getMessage();   // note use of non-service method to deQ messages
		  Message testMsg = new Message();
          Console.Write("\n  Received message:");
          Console.Write("\n  sender is {0}", msg.fromUrl);
		  Console.Write("\n  Content is: {0}", msg.content);
          if (msg.content.StartsWith("<"))//handling regular message
          {
               XDocument xml = XDocument.Parse(msg.content);
			   XElement element = xml.Element("Message").Element("Type");
			   switch(element.Value){
					case "Add"://add key/value pair
                          testMsg.content = srvr.addValue(xml);
						break;
					case "Delete"://delete key/value pair
						element = xml.Element("Message").Element("Key");
						testMsg.content = "Value with key "+ element.Value +" has been deleted\n\n";
						testMsg.content += srvr.deleteData(xml);
						
						break;
					case "Edit"://edit value
						key = srvr.editValue(xml);
						if(key<0)
							testMsg.content = "Value cannot be found";
						else
							testMsg.content = "Value with key "+ key +" has be edited";
							testMsg.content += srvr.returnDBAsString("int");
                          break;
					case "ToXML"://persist database to xml
						srvr.persistDB(xml);
						testMsg.content = "The content of database has been converted to XML and saved in Test.xml";
						break;
					case "RecoverDB"://recover database from xml
						srvr.recoverDB(xml);
						testMsg.content = "The database has been recover from a XML file";
						break;
					case "Query"://handling a query
						testMsg.content = srvr.query(xml);
						break;
					default:
						testMsg.content = "Invalid request.";
						break;
			   }
          }

          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
              //
				testMsg.toUrl = msg.toUrl;
				testMsg.fromUrl = msg.fromUrl;
				Console.Write("\n  sending reply: {0}", testMsg.content);
				WriteLine();
				sndr.sendMessage(testMsg);//sending replies 
              
#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(); 
	  
	  //srvr.showDB();
    }
Ejemplo n.º 3
0
        /*----< retrieve message from remote Comm >--------------------*/

        public CommMessage getMessage()
        {
            return(rcvr.getMessage());
        }
Ejemplo n.º 4
0
        static void Main(string[] args)
        {
            RequestEngine      re  = new RequestEngine();
            QueryRequestEngine qre = new QueryRequestEngine();
            DBEngine <string, DBElement <string, List <string> > > db = new DBEngine <string, DBElement <string, List <string> > >();

            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.
            HiResTimer hrt           = new HiResTimer();
            PerfTest   pt            = new PerfTest();
            Action     serviceAction = () =>
            {
                Message msg = null;
                while (true)
                {
                    msg = rcvr.getMessage();                       // note use of non-service method to deQ messages
                    //insert();
                    int    length = msg.content.IndexOf(",") + 1;
                    string from   = "";
                    if (msg.content != "connection start message")
                    {
                        from = msg.content.Substring(0, length);                         //figure out where the request came from
                    }
                    string[] msgList = msg.content.Split(',');
                    Console.Write("\n  Received message:");
                    Console.Write("\n  Request type is: {0}", from);                     //denotes where the request came from
                    Console.Write("\n  sender is {0}", msg.fromUrl);
                    Console.Write("\n  content is {0}\n", msg.content);
                    string reply = "";
                    //------------< do processing based on the request type >------------
                    if (from == "write,")
                    {
                        hrt.Start();
                        re.parseRequest(msg.content, out reply);
                        hrt.Stop();
                        pt.add(msgList[1], hrt.ElapsedMicroseconds);
                        msg.content = reply;
                    }
                    else if (from == "read,")
                    {
                        hrt.Start();
                        db = re.getDB();
                        qre.parseRequest(db, msg.content, out reply);
                        hrt.Stop();
                        pt.add(msgList[1], hrt.ElapsedMicroseconds);
                        msg.content = reply;
                    }
                    else if (from == "perf,")
                    {
                        reply       = pt.printTimesWpf(msgList[1]);
                        msg.content = reply;
                    }
                    if (msg.content == "connection start message")
                    {
                        continue;                         // don't send back start message
                    }
                    if (msg.content == "done")
                    {
                        Console.Write("\n  client has finished\n");
                        Console.WriteLine(pt.printTimes());
                        continue;
                    }
                    if (msg.content == "closeServer")
                    {
                        Console.Write("received closeServer");
                        break;
                    }
                    // 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
                    // Use the code to test the server

                    /*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);
                     * }*/
                    Message testMsg = new Message();
                    testMsg.toUrl   = msg.toUrl;
                    testMsg.fromUrl = msg.fromUrl;
                    testMsg.content = String.Format("test message");
                    Console.Write("\n  sending testMsg: {0}", testMsg.content);
                    sndr.sendMessage(testMsg);
#else
                    /////////////////////////////////////////////////
                    // Use the statement below for normal operation
                    sndr.sendMessage(msg);
                    //re.db.show<string, DBElement<string, List<string>>, List<string>, string>();
#endif
                }
            };

            if (rcvr.StartService())
            {
                rcvr.doService(serviceAction);           // This serviceAction is asynchronous,
            }                                            // so the call doesn't block.
            Util.waitForUser();
        }
        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();
            }
        }