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
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();
UCHAR irun;
VDR* vdr;
Log* logger;
- std::vector<char*> serverIPs;
+ std::vector<VDRServer> servers;
int selectedServer;
};
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)
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;
}
waitType = 1;
}
}
+ sort(servers.begin(), servers.end(), ServerSorter());
}
void VDR::cancelFindingServer()
}
};
+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
{
int init(int port);
int shutdown();
- void findServers(vector<char*>& serverIPs);
+ void findServers(vector<VDRServer>& servers);
void cancelFindingServer();
void setServerIP(char*);
int connect();