]> git.vomp.tv Git - vompclient-marten.git/commitdiff
Display server names
authorChris Tallon <chris@vomp.tv>
Fri, 20 Jan 2006 23:44:49 +0000 (23:44 +0000)
committerChris Tallon <chris@vomp.tv>
Fri, 20 Jan 2006 23:44:49 +0000 (23:44 +0000)
vconnect.cc
vconnect.h
vdr.cc
vdr.h

index c86a5f399877c97bd10341f7f103189521aacfdd..6b19c2705f3ab2d8e10bf0c9b307c55729faeb55 100644 (file)
@@ -76,22 +76,26 @@ void VConnect::threadMethod()
     draw();
     viewman->updateView(this);
 
-    vdr->findServers(serverIPs);
+    vdr->findServers(servers);
     if (!irun)
     {
-      for(UINT k = 0; k < serverIPs.size(); k++) delete[] serverIPs[k];
-      serverIPs.clear();
+      for(UINT k = 0; k < servers.size(); k++)
+      {
+        delete[] servers[k].ip;
+        delete[] servers[k].name;
+      }
+      servers.clear();
       return;
     }
 
-    if (serverIPs.size() == 1)
+    if (servers.size() == 1)
     {
       selectedServer = 0;
     }
     else
     {
       selectedServer = -1;
-      VServerSelect* vs = new VServerSelect(&serverIPs, this);
+      VServerSelect* vs = new VServerSelect(servers, this);
       vs->draw();
       viewman->add(vs);  // FIXME - do this better - perhaps post message to Command
                          // Otherwise it will be using ViewMan without the Command mutex locked
@@ -104,17 +108,25 @@ void VConnect::threadMethod()
 
     if (!irun)
     {
-      for(UINT k = 0; k < serverIPs.size(); k++) delete[] serverIPs[k];
-      serverIPs.clear();
+      for(UINT k = 0; k < servers.size(); k++)
+      {
+        delete[] servers[k].ip;
+        delete[] servers[k].name;
+      }
+      servers.clear();
       return;
     }
 
-    logger->log("VConnect", Log::NOTICE, "Connecting to server at %s", serverIPs[selectedServer]);
-    vdr->setServerIP(serverIPs[selectedServer]);
+    logger->log("VConnect", Log::NOTICE, "Connecting to server at %s", servers[selectedServer].ip);
+    vdr->setServerIP(servers[selectedServer].ip);
 
     // Clear the serverIPs vector
-    for(UINT k = 0; k < serverIPs.size(); k++) delete[] serverIPs[k];
-    serverIPs.clear();
+    for(UINT k = 0; k < servers.size(); k++)
+    {
+      delete[] servers[k].ip;
+      delete[] servers[k].name;
+    }
+    servers.clear();
 
     setOneLiner(tr("Connecting to VDR"));
     draw();
index 5cc6925406e4c189f5dfe05481dd5cf4b7bb58aa..139550e3ad62c098324fdc7a0961a3dc57c08e4d 100644 (file)
@@ -55,7 +55,7 @@ class VConnect : public VInfo, public Thread
     UCHAR irun;
     VDR* vdr;
     Log* logger;
-    std::vector<char*> serverIPs;
+    std::vector<VDRServer> servers;
     int selectedServer;
 };
 
diff --git a/vdr.cc b/vdr.cc
index 4f27a46ebc3406907d35e94e4d0f3e2d537d783c..f5bd94830ae7e657d6ab2cb57c813668d67cb7bb 100644 (file)
--- a/vdr.cc
+++ b/vdr.cc
@@ -64,14 +64,13 @@ int VDR::shutdown()
   return 1;
 }
 
-void VDR::findServers(vector<char*>& serverIPs)
+void VDR::findServers(vector<VDRServer>& servers)
 {
   findingServer = 1;
-  char* message = "VOMP CLIENT";
+  char* message = "VOMP";
   DatagramSocket ds(port);
 
   int haveAtLeastOne = 0;
-  char* newIP;
   int retval;
   int waitType = 1;
   while(findingServer)
@@ -85,15 +84,28 @@ void VDR::findServers(vector<char*>& serverIPs)
 
     if (retval == 2) // we got a reply
     {
-      if (strcmp(ds.getData(), "VOMP SERVER")) // echo.....
+      if (!strcmp(ds.getData(), "VOMP")) // echo.....
       {
         waitType = 2;
       }
       else
       {
-        newIP = new char[16];
-        strcpy(newIP, ds.getFromIPA());
-        serverIPs.push_back(newIP);
+        VDRServer newServer;
+        newServer.ip = new char[16];
+        strcpy(newServer.ip, ds.getFromIPA());
+
+        if (ds.getDataLength() == 0)
+        {
+          newServer.name = new char[1];
+          newServer.name[0] = '\0';
+        }
+        else
+        {
+          newServer.name = new char[strlen(ds.getData())+1];
+          strcpy(newServer.name, ds.getData());
+        }
+
+        servers.push_back(newServer);
         waitType = 2;
         haveAtLeastOne = 1;
       }
@@ -104,6 +116,7 @@ void VDR::findServers(vector<char*>& serverIPs)
       waitType = 1;
     }
   }
+  sort(servers.begin(), servers.end(), ServerSorter());
 }
 
 void VDR::cancelFindingServer()
diff --git a/vdr.h b/vdr.h
index bf3fec53c6667c8d27bc181c17ab83bffbeeb13c..d63b1f5c69ef364003526b242779e67e14330579 100644 (file)
--- a/vdr.h
+++ b/vdr.h
@@ -53,6 +53,22 @@ struct RecTimerSorter     // : public binary_function<double, double, bool>
   }
 };
 
+struct VDRServer
+{
+  char* ip;
+  char* name;
+};
+
+struct ServerSorter
+{
+  bool operator() (const VDRServer a, const VDRServer b)
+  {
+    printf("%s %s\n", a.name, b.name);
+    if (strcmp(b.name, a.name) > 0) return true;
+    return false;
+  }
+};
+
 class VDR
 {
 
@@ -64,7 +80,7 @@ class VDR
     int init(int port);
     int shutdown();
 
-    void findServers(vector<char*>& serverIPs);
+    void findServers(vector<VDRServer>& servers);
     void cancelFindingServer();
     void setServerIP(char*);
     int connect();