Ejemplo n.º 1
0
void Device::setConnectedState (bool isState)
{
if (isState==isConnected)
return;
    isConnected=isState;

if (isConnected)
{ emit fireConnected(id);}

else
{
if (!portIsSearched)  emit fireDisconnected(id);
}

}
void DeviceRS232::setConnectedState (bool isState)
{

    if (portIsSearched) //если мы ищем порт

    {
        if (!isState)  //, то дело лишь в том, что на  данном порту нет устройства

        {
            port->close(); //порт закрываем
            ms(tr ("setConnectedState triggered with 0 parameter, starting search"),MSG_DEBUG); //рассказываем, что таки нет устройства
            search (); // и запускаем поиск обратно, он сам уже начнёт другой порт опрашивать

        return; //вернуться из функции, чтоб левого ничего не запустить
        }


    }
    //теперь если порт не ищем

    //ms(tr ("nexxt"),MSG_DEBUG); //рассказываем, что таки нет устройства




    isConnected=isState;  //иначе присвариваем

    if (isConnected) //если наконец подключились
    {
        //if (isState!=isConnected)  //если состояние не такое, как пришло
       //{
            emit fireConnected(id); //рассказать, что подключились
            portIsSearched=0; //и отключить поиск порта,если он был включен
        //}
    }

   else //иначе, если мы отключены
    {
            emit fireDisconnected(id);//об этом надо рассказать
    }



    }
		void ApiP2PExtensionHandler::processCommand(const std::vector<std::string> &cmd)
		{
			try {
				if (cmd[0] == "connected") {
					if (cmd.size() < 4) throw ibrcommon::Exception("not enough parameters");

					const dtn::data::EID eid(cmd[1]);
					dtn::core::Node::Protocol proto = dtn::core::Node::CONN_TCPIP;

					if (cmd[2] == "tcp") {
						proto = dtn::core::Node::CONN_TCPIP;
					}
					else if (cmd[2] == "udp") {
						proto = dtn::core::Node::CONN_UDPIP;
					}

					const dtn::core::Node::URI uri(dtn::core::Node::NODE_CONNECTED, proto, cmd[3], 0, 30);
					fireConnected(eid, uri);

					ibrcommon::MutexLock l(_write_lock);
					_stream << ClientHandler::API_STATUS_OK << " NODE CONNECTED" << std::endl;
				}
				else if (cmd[0] == "disconnected") {
					if (cmd.size() < 2) throw ibrcommon::Exception("not enough parameters");

					const dtn::data::EID eid(cmd[1]);
					dtn::core::Node::Protocol proto = dtn::core::Node::CONN_TCPIP;

					if (cmd[2] == "tcp") {
						proto = dtn::core::Node::CONN_TCPIP;
					}
					else if (cmd[2] == "udp") {
						proto = dtn::core::Node::CONN_UDPIP;
					}

					const dtn::core::Node::URI uri(dtn::core::Node::NODE_CONNECTED, proto, cmd[3], 0, 10);
					fireDisconnected(eid, uri);

					ibrcommon::MutexLock l(_write_lock);
					_stream << ClientHandler::API_STATUS_OK << " NODE DISCONNECTED" << std::endl;
				}
				else if (cmd[0] == "discovered") {
					if (cmd.size() < 2) throw ibrcommon::Exception("not enough parameters");

					const dtn::data::EID eid(cmd[1]);
					const dtn::core::Node::URI uri(dtn::core::Node::NODE_P2P_DIALUP, this->getProtocol(), cmd[2], 120, 10);
					fireDiscovered(eid, uri);

					ibrcommon::MutexLock l(_write_lock);
					_stream << ClientHandler::API_STATUS_OK << " NODE DISCOVERED" << std::endl;
				}
				else if (cmd[0] == "interface") {
					if (cmd.size() < 2) throw ibrcommon::Exception("not enough parameters");

					if (cmd[1] == "up") {
						const ibrcommon::vinterface iface(cmd[2]);
						fireInterfaceUp(iface);

						ibrcommon::MutexLock l(_write_lock);
						_stream << ClientHandler::API_STATUS_OK << " INTERFACE UP" << std::endl;
					}
					else if (cmd[1] == "down") {
						const ibrcommon::vinterface iface(cmd[2]);
						fireInterfaceDown(iface);

						ibrcommon::MutexLock l(_write_lock);
						_stream << ClientHandler::API_STATUS_OK << " INTERFACE DOWN" << std::endl;
					}
					else {
						ibrcommon::MutexLock l(_write_lock);
						_stream << ClientHandler::API_STATUS_BAD_REQUEST << " UNKNOWN INTERFACE STATE" << std::endl;
					}
				}
				else {
					ibrcommon::MutexLock l(_write_lock);
					_stream << ClientHandler::API_STATUS_BAD_REQUEST << " UNKNOWN ACTION" << std::endl;
				}
			} catch (const std::exception&) {
				ibrcommon::MutexLock l(_write_lock);
				_stream << ClientHandler::API_STATUS_BAD_REQUEST << " ERROR" << std::endl;
			}
		}