Пример #1
0
void CLogitechMediaServer::GetPlayerInfo()
{
	try
	{
		std::string sPostdata = "{\"id\":1,\"method\":\"slim.request\",\"params\":[\"\",[\"serverstatus\",0,999]]}";
		Json::Value root = Query(m_IP, m_Port, sPostdata);
		bool bSHowedWarning = false;

		int totPlayers = root["player count"].asInt();
		for (int ii = 0; ii < totPlayers; ii++)
		{
			if (root["players_loop"][ii]["name"].empty())
				continue;

			int isplayer = root["players_loop"][ii]["isplayer"].asInt();
			std::string name = root["players_loop"][ii]["name"].asString();
			std::string model = root["players_loop"][ii]["model"].asString();
			std::string ipport = root["players_loop"][ii]["ip"].asString();
			std::string macaddress = root["players_loop"][ii]["playerid"].asString();
			std::vector<std::string> IPPort;
			StringSplit(ipport, ":", IPPort);
			if (IPPort.size() < 2)
				continue; //invalid ip:port
			std::string ip = IPPort[0];
			int port = atoi(IPPort[1].c_str());

			if (
				//(model == "slimp3") ||			//SliMP3
				(model == "Squeezebox") ||			//Squeezebox 1
				(model == "squeezebox2") ||			//Squeezebox 2
				(model == "squeezebox3") ||			//Squeezebox 3
				//(model == "transporter") ||		//Transporter
				(model == "receiver") ||			//Squeezebox Receiver
				(model == "boom") ||				//Squeezebox Boom
				//(model == "softsqueeze") ||		//Softsqueeze
				(model == "controller") ||			//Squeezebox Controller
				(model == "squeezeplay") ||			//SqueezePlay
				(model == "baby") ||				//Squeezebox Radio
				(model == "fab4") ||				//Squeezebox Touch
				//(model == "iPengiPod") ||			//iPeng iOS App
				(model == "squeezelite")			//Max2Play SqueezePlug
				) 
			{
				InsertUpdatePlayer(name, ip, macaddress);
			}
			else {
				//show only once
				if (!m_bShowedUnsupported) {
					_log.Log(LOG_ERROR, "Logitech Media Server: model '%s' not supported.", model.c_str());
					bSHowedWarning = true;
				}
			}
		}
		if (!m_bShowedUnsupported)
			m_bShowedUnsupported = bSHowedWarning;
	}
	catch (...)
	{
	}
}
Пример #2
0
void CLogitechMediaServer::GetPlayerInfo()
{
	try
	{
		std::string sPostdata = "{\"id\":1,\"method\":\"slim.request\",\"params\":[\"\",[\"serverstatus\",0,999]]}";
		Json::Value root = Query(m_IP, m_Port, sPostdata);

		if (root.isNull()) {
			m_iMissedQueries++;
			if (m_iMissedQueries % 3 == 0) {
				_log.Log(LOG_ERROR, "Logitech Media Server: No response from server %s:%i", m_IP.c_str(), m_Port);
			}
		}
		else {
			SetHeartbeatReceived();
			m_iMissedQueries = 0;

			int totPlayers = root["player count"].asInt();
			if (totPlayers > 0) {
				if (!m_bShowedStartupMessage)
					_log.Log(LOG_STATUS, "Logitech Media Server: %i connected player(s) found.", totPlayers);
				for (int ii = 0; ii < totPlayers; ii++)
				{
					if (root["players_loop"][ii]["name"].empty())
						continue;

					//int isplayer = root["players_loop"][ii]["isplayer"].asInt();
					std::string name = root["players_loop"][ii]["name"].asString();
					std::string model = root["players_loop"][ii]["model"].asString();
					std::string ipport = root["players_loop"][ii]["ip"].asString();
					std::string macaddress = root["players_loop"][ii]["playerid"].asString();
					std::vector<std::string> IPPort;
					StringSplit(ipport, ":", IPPort);
					if (IPPort.size() < 2)
						continue; //invalid ip:port
					std::string ip = IPPort[0];
					//int port = atoi(IPPort[1].c_str());

					if (
						//(model == "slimp3") ||			//SliMP3
						(model == "Squeezebox") ||			//Squeezebox 1
						(model == "squeezebox2") ||			//Squeezebox 2
						(model == "squeezebox3") ||			//Squeezebox 3
						(model == "transporter") ||			//Transporter
						(model == "receiver") ||			//Squeezebox Receiver
						(model == "boom") ||				//Squeezebox Boom
						//(model == "softsqueeze") ||		//Softsqueeze
						(model == "controller") ||			//Squeezebox Controller
						(model == "squeezeplay") ||			//SqueezePlay
						(model == "squeezeplayer") ||		//SqueezePlay
						(model == "baby") ||				//Squeezebox Radio
						(model == "fab4") ||				//Squeezebox Touch
						(model == "iPengiPod") ||			//iPeng iPhone App
						(model == "iPengiPad") ||			//iPeng iPad App
						(model == "squeezelite")			//Max2Play SqueezePlug
						)
					{
						InsertUpdatePlayer(name, ip, macaddress);
					}
					else {
						if (!m_bShowedStartupMessage)
							_log.Log(LOG_ERROR, "Logitech Media Server: model '%s' not supported.", model.c_str());
					}
				}
			}
			else {
				if (!m_bShowedStartupMessage)
					_log.Log(LOG_ERROR, "Logitech Media Server: No connected players found.");
			}
			m_bShowedStartupMessage = true;
		}
	}
	catch (...)
	{
	}
}