summaryrefslogtreecommitdiff
path: root/plexgdm.cpp
diff options
context:
space:
mode:
authorchriszero <zerov83@gmail.com>2014-11-25 21:27:19 +0100
committerchriszero <zerov83@gmail.com>2014-11-25 21:27:19 +0100
commita9dd0c6a322f139e03a0ba4570e2a78508ddd6c3 (patch)
tree89cbb7cd4ac6f1ab11a5ef111f97dc5245a76081 /plexgdm.cpp
parent90f4be4ba9500df310af39b5274d3a6da69cd90f (diff)
downloadvdr-plugin-plex-a9dd0c6a322f139e03a0ba4570e2a78508ddd6c3.tar.gz
vdr-plugin-plex-a9dd0c6a322f139e03a0ba4570e2a78508ddd6c3.tar.bz2
Discovers now multiple Plexmediaservers
Diffstat (limited to 'plexgdm.cpp')
-rw-r--r--plexgdm.cpp52
1 files changed, 28 insertions, 24 deletions
diff --git a/plexgdm.cpp b/plexgdm.cpp
index cb42be3..769e5dd 100644
--- a/plexgdm.cpp
+++ b/plexgdm.cpp
@@ -108,40 +108,44 @@ try {
void plexgdm::discover()
{
- try {
- // TODO: Discover multiple servers
- char buffer[1024];
-
- Poco::Net::MulticastSocket socket(
+ Poco::Net::MulticastSocket socket(
Poco::Net::SocketAddress( Poco::Net::IPAddress(), m_discoverAdress.port() ),
true
- );
- socket.setLoopback(true);
- socket.setTimeToLive(1);
- socket.setReceiveTimeout(0.6);
- socket.sendTo(_discoverMessage.c_str(), _discoverMessage.length(), m_discoverAdress, 0);
-
- socket.joinGroup(m_discoverAdress.host());
+ );
+ // TODO: Discover multiple servers
+ char buffer[1024];
+ std::map<std::string, std::string> vBuffer;
+
+ socket.setLoopback(true);
+ socket.setTimeToLive(1);
+ socket.setReceiveTimeout(Poco::Timespan(0, 600*1000)); // microseconds
+ socket.joinGroup(m_discoverAdress.host());
+ socket.sendTo(_discoverMessage.c_str(), _discoverMessage.length(), m_discoverAdress, 0);
+
+ try {
while(true) {
Poco::Net::SocketAddress sender;
int n = socket.receiveFrom(buffer, sizeof(buffer), sender);
std::string buf(buffer, n);
- std::cout << "Discover received from: " << sender.host().toString() << "\nData:\n" << buf << std::endl;
-
- // check for a valid response
if(buf.find("200 OK") != std::string::npos) {
- m_pServer = new PlexServer(buf, sender.host().toString());
- std::cout << "New Plexserver: " << m_pServer->GetServerName() << " Adress: " << m_pServer->GetIpAdress() << ":" << m_pServer->GetPort() << std::endl;
- socket.close();
- m_discoveryComplete = true;
- break;
+ vBuffer[sender.host().toString()] = buf;
}
+ //std::cout << "Discover received from: " << sender.host().toString() << "\nData:\n" << buf << std::endl;
}
-
}
- catch(Poco::Exception &exc){
- esyslog("[plex]Exception in %s s%", __func__, exc.displayText().c_str() );
- std::cout << "[plex]Exception: in " << __func__ << " | " << exc.displayText() << std::endl;
+ catch(Poco::TimeoutException &exc){
+ //dsyslog("[plex]TimeoutException in %s s%", __func__, exc.displayText().c_str() );
+ std::cout << "[plex]TimeoutException: in " << __func__ << " | " << exc.displayText() << std::endl;
+ }
+
+ socket.close();
+ m_discoveryComplete = true;
+
+ for(std::map<std::string, std::string>::iterator it = vBuffer.begin() ; it != vBuffer.end(); ++it) {
+ std::string host = it->first;
+ std::string data = it->second;
+
+ m_vServers.push_back(PlexServer(data, host));
}
}