Revision: 40703
          http://brlcad.svn.sourceforge.net/brlcad/?rev=40703&view=rev
Author:   davidloman
Date:     2010-09-27 17:34:41 +0000 (Mon, 27 Sep 2010)

Log Message:
-----------
Flesh out the basic libNetTest some more.  Client and server now connect 
properly.

Modified Paths:
--------------
    rt^3/trunk/tests/libNet/libNetTest.cxx

Modified: rt^3/trunk/tests/libNet/libNetTest.cxx
===================================================================
--- rt^3/trunk/tests/libNet/libNetTest.cxx      2010-09-27 17:30:41 UTC (rev 
40702)
+++ rt^3/trunk/tests/libNet/libNetTest.cxx      2010-09-27 17:34:41 UTC (rev 
40703)
@@ -23,12 +23,12 @@
  *
  */
 
-
+#include "brlcad/bu.h"
 #include "libnet.h"
 #include "libutility.h"
 
 #include <string>
-
+#include <sstream>
 #include <QtCore/QDataStream>
 #include <QtCore/QString>
 
@@ -39,6 +39,39 @@
        Logger::getInstance()->logBANNER("libNetTest", s);
 }
 
+/**
+ * Prints the 'usage' statement to the console along with an optional message
+ */
+void printUsage(std::string customMsg) {
+
+       if (customMsg.length() > 0) {
+               customMsg += "\n";
+               QString s(customMsg.c_str());
+               logInfo(s);
+       }
+       logInfo("Usage for Client: pkgcppTest client ipAddress port.\n");
+       logInfo("Usage for Server: pkgcppTest server port.\n");
+
+       return;
+}
+
+/**
+ * Converts char* data to a valid port number
+ */
+int getValidPort(char* data) {
+       std::string portStr(data);
+       int port = atoi(data);
+
+       //Hardcode prolly not best for OS determined port range....
+       if (port > 0x0000 && port < 0xFFFF) {
+               //More validation goes here, if needed.
+       } else {
+               printUsage("Supplied Port '" + portStr + "' is invalid.");
+               bu_exit(1, "");
+       }
+       return port;
+}
+
 /* 
  * =====================
  *
@@ -48,8 +81,75 @@
  */
 
 int main(int argc, char* argv[]) {
+       Logger::getInstance();
+       logBanner("libNetTest");
 
+       if (argc > 4 || argc < 3) {
+               printUsage("Incorrect ARG count.");
+               bu_exit(1, "");
+       }
 
+       bool isServer;
+       short port;
+       std::string ip("");
+
+       //Get app mode.  Either client or server
+       std::string cliServ(argv[1]);
+       std::transform(cliServ.begin(), cliServ.end(), cliServ.begin(), 
tolower);
+
+       if (cliServ == "client") {
+               isServer = false;
+               ip = argv[2];
+               port = getValidPort(argv[3]);
+       } else if (cliServ == "server") {
+               isServer = true;
+               port = getValidPort(argv[2]);
+       } else {
+               printUsage("Unknown mode: '" + cliServ + "'");
+               bu_exit(1, "");
+       }
+
+       QString s("Running in ");
+       s.append(cliServ.c_str());
+       s.append(" mode.");
+       logInfo(s);
+
+       if (isServer) {
+               PortalManager pm(port);
+               pm.startup();
+
+               s = "Listening on port: ";
+               s.append(port);
+               logInfo(s);
+
+               //listen for a loooong time.
+               GSThread::sleep(60 * 60); //1 hr
+               logInfo("Shutting down...");
+               pm.shutdown();
+
+       } else {
+               PortalManager pm;
+               pm.startup();
+
+               s = "Trying to connect to ";
+               s.append(ip.c_str());
+               s.append(":");
+               s.append(QString::number(port));
+               logInfo(s);
+
+               QString t(ip.c_str()); //this is dumb!
+               Portal* p = pm.connectToHost(t, port);
+
+               if (p != 0) {
+                       GSThread::sleep(10);
+               }
+
+               logInfo("Shutting down...");
+               pm.shutdown();
+       }
+
+       GSThread::sleep(1);
+
        return 0;
 }
 


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to