void CLogitechMediaServer::InsertUpdatePlayer(const std::string &Name, const std::string &IPAddress, const std::string &MacAddress) { std::vector<std::vector<std::string> > result; //Check if exists... //1) Check on MacAddress (default); Update Name in case it has been changed result = m_sql.safe_query("SELECT Name FROM WOLNodes WHERE (HardwareID==%d) AND (MacAddress=='%q')", m_HwdID, MacAddress.c_str()); if (result.size() > 0) { if (result[0][0].c_str() != Name) { m_sql.safe_query("UPDATE WOLNodes SET Name='%q' WHERE (HardwareID==%d) AND (MacAddress=='%q')", Name.c_str(), m_HwdID, MacAddress.c_str()); _log.Log(LOG_STATUS, "Logitech Media Server: Player '%s' renamed to '%s'", result[0][0].c_str(), Name.c_str()); } return; } //2) Check on Name+IP (old format); Convert IP -> MacAddress result = m_sql.safe_query("SELECT ID FROM WOLNodes WHERE (HardwareID==%d) AND (Name=='%q') AND (MacAddress=='%q')", m_HwdID, Name.c_str(), IPAddress.c_str()); if (result.size()>0) { m_sql.safe_query("UPDATE WOLNodes SET MacAddress='%q', Timeout=0 WHERE (HardwareID==%d) AND (Name=='%q') AND (MacAddress=='%q')", MacAddress.c_str(), m_HwdID, Name.c_str(), IPAddress.c_str()); _log.Log(LOG_STATUS, "Logitech Media Server: Player '%s' IP changed to MacAddress", Name.c_str()); return; } //3) Check on Name (old format), IP changed?; Convert IP -> MacAddress result = m_sql.safe_query("SELECT ID FROM WOLNodes WHERE (HardwareID==%d) AND (Name=='%q')", m_HwdID, Name.c_str()); if (result.size()>0) { m_sql.safe_query("UPDATE WOLNodes SET MacAddress='%q', Timeout=0 WHERE (HardwareID==%d) AND (Name=='%q')", MacAddress.c_str(), m_HwdID, Name.c_str()); _log.Log(LOG_STATUS, "Logitech Media Server: Player '%s' IP changed to MacAddress", Name.c_str()); return; } //4) Check on IP (old format), Name changed?; Convert IP -> MacAddress result = m_sql.safe_query("SELECT ID FROM WOLNodes WHERE (HardwareID==%d) AND (MacAddress=='%q')", m_HwdID, IPAddress.c_str()); if (result.size()>0) { m_sql.safe_query("UPDATE WOLNodes SET Name='%q', MacAddress='%q', Timeout=0 WHERE (HardwareID==%d) AND (MacAddress=='%q')", Name.c_str(), MacAddress.c_str(), m_HwdID, IPAddress.c_str()); _log.Log(LOG_STATUS, "Logitech Media Server: Player '%s' IP changed to MacAddress", Name.c_str()); return; } //Player not found, add it... m_sql.safe_query("INSERT INTO WOLNodes (HardwareID, Name, MacAddress, Timeout) VALUES (%d, '%q', '%q', 0)", m_HwdID, Name.c_str(), MacAddress.c_str()); _log.Log(LOG_STATUS, "Logitech Media Server: New Player '%s' added", Name.c_str()); result = m_sql.safe_query("SELECT ID FROM WOLNodes WHERE (HardwareID==%d) AND (MacAddress='%q')", m_HwdID, MacAddress.c_str()); if (result.size()<1) return; int ID = atoi(result[0][0].c_str()); char szID[40]; sprintf(szID, "%X%02X%02X%02X", 0, 0, (ID & 0xFF00) >> 8, ID & 0xFF); //Also add a light (push) device m_sql.safe_query( "INSERT INTO DeviceStatus (HardwareID, DeviceID, Unit, Type, SubType, SwitchType, Used, SignalLevel, BatteryLevel, Name, nValue, sValue) " "VALUES (%d, '%q', 1, %d, %d, %d, 1, 12, 255, '%q', 0, 'Unavailable')", m_HwdID, szID, int(pTypeLighting2), int(sTypeAC), int(STYPE_Media), Name.c_str()); ReloadNodes(); }
void CPanasonic::Do_Work() { int scounter = 0; ReloadNodes(); while (!m_stoprequested) { if (scounter++ >= (m_iPollInterval * 2)) { boost::lock_guard<boost::mutex> l(m_mutex); scounter = 0; bool bWorkToDo = false; std::vector<boost::shared_ptr<CPanasonicNode> >::iterator itt; for (itt = m_pNodes.begin(); itt != m_pNodes.end(); ++itt) { if (!(*itt)->IsBusy()) { _log.Log(LOG_NORM, "Panasonic Plugin: (%s) - Restarting thread.", (*itt)->m_Name.c_str()); (*itt)->StartThread(); } if ((*itt)->IsOn()) bWorkToDo = true; } } sleep_milliseconds(500); } UnloadNodes(); _log.Log(LOG_STATUS, "Panasonic Plugin: Worker stopped..."); }
void CLogitechMediaServer::InsertUpdatePlayer(const std::string &Name, const std::string &IPAddress, const int Port) { std::vector<std::vector<std::string> > result; //Check if exists result = m_sql.safe_query("SELECT ID FROM WOLNodes WHERE (HardwareID==%d) AND (Name=='%q') AND (MacAddress=='%q')", m_HwdID, Name.c_str(), IPAddress.c_str()); if (result.size()>0) return; //Already exists m_sql.safe_query("INSERT INTO WOLNodes (HardwareID, Name, MacAddress, Timeout) VALUES (%d, '%q', '%q', %d)", m_HwdID, Name.c_str(), IPAddress.c_str(), Port); result = m_sql.safe_query("SELECT ID FROM WOLNodes WHERE (HardwareID==%d) AND (Name=='%q') AND (MacAddress='%q')", m_HwdID, Name.c_str(), IPAddress.c_str()); if (result.size()<1) return; int ID = atoi(result[0][0].c_str()); char szID[40]; sprintf(szID, "%X%02X%02X%02X", 0, 0, (ID & 0xFF00) >> 8, ID & 0xFF); //Also add a light (push) device m_sql.safe_query( "INSERT INTO DeviceStatus (HardwareID, DeviceID, Unit, Type, SubType, SwitchType, Used, SignalLevel, BatteryLevel, Name, nValue, sValue) " "VALUES (%d, '%q', 1, %d, %d, %d, 1, 12, 255, '%q', 0, 'Unavailable')", m_HwdID, szID, int(pTypeLighting2), int(sTypeAC), int(STYPE_Media), Name.c_str()); ReloadNodes(); }
void CKodi::RemoveAllNodes() { boost::lock_guard<boost::mutex> l(m_mutex); m_sql.safe_query("DELETE FROM WOLNodes WHERE (HardwareID==%d)", m_HwdID); //Also delete the all switches m_sql.safe_query("DELETE FROM DeviceStatus WHERE (HardwareID==%d)", m_HwdID); ReloadNodes(); }
void CPanasonic::RemoveNode(const int ID) { m_sql.safe_query("DELETE FROM WOLNodes WHERE (HardwareID==%d) AND (ID==%d)", m_HwdID, ID); //Also delete the switch char szID[40]; sprintf(szID, "%X%02X%02X%02X", 0, 0, (ID & 0xFF00) >> 8, ID & 0xFF); m_sql.safe_query("DELETE FROM DeviceStatus WHERE (HardwareID==%d) AND (DeviceID=='%q')", m_HwdID, szID); ReloadNodes(); }
bool CLogitechMediaServer::StartHardware() { StopHardware(); m_bIsStarted = true; sOnConnected(this); m_iThreadsRunning = 0; StartHeartbeatThread(); ReloadNodes(); //Start worker thread m_stoprequested = false; m_thread = boost::shared_ptr<boost::thread>(new boost::thread(boost::bind(&CLogitechMediaServer::Do_Work, this))); return (m_thread != NULL); }
void CLogitechMediaServer::Do_Work() { int mcounter = 0; int scounter = 0; bool bFirstTime = true; _log.Log(LOG_STATUS, "Logitech Media Server: Worker started..."); ReloadNodes(); ReloadPlaylists(); while (!m_stoprequested) { sleep_milliseconds(500); mcounter++; if (mcounter == 2) { mcounter = 0; scounter++; if ((scounter >= m_iPollInterval) || (bFirstTime)) { boost::lock_guard<boost::mutex> l(m_mutex); scounter = 0; bFirstTime = false; GetPlayerInfo(); std::vector<LogitechMediaServerNode>::const_iterator itt; for (itt = m_nodes.begin(); itt != m_nodes.end(); ++itt) { if (m_stoprequested) return; if (m_iThreadsRunning < 1000) { m_iThreadsRunning++; boost::thread t(boost::bind(&CLogitechMediaServer::Do_Node_Work, this, *itt)); t.join(); } } } } } _log.Log(LOG_STATUS, "Logitech Media Server: Worker stopped..."); }
bool CKodi::StartHardware() { StopHardware(); m_bIsStarted = true; sOnConnected(this); m_iThreadsRunning = 0; StartHeartbeatThread(); ReloadNodes(); //Start worker thread m_stoprequested = false; m_thread = boost::shared_ptr<boost::thread>(new boost::thread(boost::bind(&CKodi::Do_Work, this))); _log.Log(LOG_STATUS, "Kodi: Started"); return true; }
bool CPanasonic::UpdateNode(const int ID, const std::string &Name, const std::string &IPAddress, const int Port) { std::vector<std::vector<std::string> > result; //Check if exists result = m_sql.safe_query("SELECT ID FROM WOLNodes WHERE (HardwareID==%d) AND (ID==%d)", m_HwdID, ID); if (result.size()<1) return false; //Not Found!? m_sql.safe_query("UPDATE WOLNodes SET Name='%q', MacAddress='%q', Timeout=%d WHERE (HardwareID==%d) AND (ID==%d)", Name.c_str(), IPAddress.c_str(), Port, m_HwdID, ID); char szID[40]; sprintf(szID, "%X%02X%02X%02X", 0, 0, (ID & 0xFF00) >> 8, ID & 0xFF); //Also update Light/Switch m_sql.safe_query("UPDATE DeviceStatus SET Name='%q' WHERE (HardwareID==%d) AND (DeviceID=='%q')", Name.c_str(), m_HwdID, szID); ReloadNodes(); return true; }
void CPanasonic::Do_Work() { int scounter = 0; ReloadNodes(); while (!m_stoprequested) { if (scounter++ >= (m_iPollInterval * 2)) { boost::lock_guard<boost::mutex> l(m_mutex); scounter = 0; bool bWorkToDo = false; std::vector<boost::shared_ptr<CPanasonicNode> >::iterator itt; for (itt = m_pNodes.begin(); itt != m_pNodes.end(); ++itt) { if (!(*itt)->IsBusy()) { _log.Log(LOG_NORM, "Panasonic Plugin: (%s) - Restarting thread.", (*itt)->m_Name.c_str()); boost::thread* tAsync = new boost::thread(&CPanasonicNode::Do_Work, (*itt)); //m_ios.stop(); } if ((*itt)->IsOn()) bWorkToDo = true; } //if (bWorkToDo && m_ios.stopped()) // make sure that there is a boost thread to service i/o operations //{ // m_ios.reset(); // // Note that this is the only thread that handles async i/o so we don't // // need to worry about locking or concurrency issues when processing messages // _log.Log(LOG_NORM, "Panasonic Plugin: Restarting I/O service thread."); // boost::thread bt(boost::bind(&boost::asio::io_service::run, &m_ios)); //} } sleep_milliseconds(500); } UnloadNodes(); _log.Log(LOG_STATUS, "Panasonic Plugin: Worker stopped..."); }
bool BleBox::UpdateNode(const int id, const std::string &name, const std::string &IPAddress) { std::string deviceApiName = IdentifyDevice(IPAddress); if (deviceApiName.empty()) return false; int deviceTypeID = GetDeviceTypeByApiName(deviceApiName); if (deviceTypeID == -1) return false; STR_DEVICE deviceType = DevicesType[deviceTypeID]; std::string szIdx = IPToHex(IPAddress, deviceType.deviceID); m_sql.safe_query("UPDATE DeviceStatus SET DeviceID='%q', Unit='%d', Type='%d', SubType='%d', SwitchType='%d', Name='%q' WHERE (HardwareID=='%d') AND (ID=='%d')", szIdx.c_str(), deviceType.unit, deviceType.deviceID, deviceType.subType, deviceType.switchType, name.c_str(), m_HwdID, id); ReloadNodes(); return true; }
void BleBox::AddNode(const std::string &name, const std::string &IPAddress) { std::string deviceApiName = IdentifyDevice(IPAddress); if (deviceApiName.empty()) return; int deviceTypeID = GetDeviceTypeByApiName(deviceApiName); if (deviceTypeID == -1) return; STR_DEVICE deviceType = DevicesType[deviceTypeID]; std::string szIdx = IPToHex(IPAddress, deviceType.deviceID); m_sql.safe_query( "INSERT INTO DeviceStatus (HardwareID, DeviceID, Unit, Type, SubType, SwitchType, Used, SignalLevel, BatteryLevel, Name, nValue, sValue) " "VALUES (%d, '%q', %d, %d, %d, %d, 1, 12, 255, '%q', 0, 'Unavailable')", m_HwdID, szIdx.c_str(), deviceType.unit, deviceType.deviceID, deviceType.subType, deviceType.switchType, name.c_str()); ReloadNodes(); }
void BleBox::RemoveNode(const int id) { m_sql.safe_query("DELETE FROM DeviceStatus WHERE (HardwareID==%d) AND (ID=='%d')", m_HwdID, id); ReloadNodes(); }