static void initargs(int argc, char **argv) { int c; CmdName = cmdName(argv[0]); opterr = 0; while ((c = getopt(argc, argv, ":o:")) != -1) { switch (c) { case 'o': outFile = openFile(optarg, "w"); break; case ':': fprintf(stderr, "%s: option -%c missing parameter\n", CmdName, optopt); usage(1); break; case '?': if (optopt == '?') usage(0); else { fprintf(stderr, "%s: option -%c unrecognized\n", CmdName, optopt); usage(1); } break; } } argv += optind; argc -= optind; if (argc) Files = argv; if (!outFile) outFile = stdout; }
void ATCommand::setParameter(int index,const QString &value) { if (mParameters.count() <= (unsigned int)index) { kdDebug() << "ATCommand " << cmdName() << " has no Parameter " << index << endl; return; } mParameters.at(index)->setValue(value); }
static void initargs(int argc, char **argv) { int c; CmdName = cmdName(argv[0]); opterr = 0; while ((c = getopt(argc, argv, ":gdo:")) != -1) { switch (c) { case 'd': act = ToGV; break; case 'g': act = ToGXL; break; case 'o': outFile = openFile(optarg, "w"); break; case ':': fprintf(stderr, "%s: option -%c missing argument\n", CmdName, optopt); break; case '?': if (optopt == '?') usage(0); else { fprintf(stderr, "%s: option -%c unrecognized\n", CmdName, optopt); exit(1); } } } argv += optind; argc -= optind; if (argc > 0) Files = argv; if (!outFile) outFile = stdout; if (act == Unset) setAction(); }
int SendRequest(int argc, char *argv[], const char *xmlFileName) { /*需要去除命令名的路径和扩展名*/ std::string cmdName(argv[0]); #ifdef PLATFORM_IS_WINDOWS if (cmdName.rfind('\\')) { cmdName = cmdName.substr(cmdName.rfind('\\') + 1, cmdName.npos); } #endif #ifdef PLATFORM_IS_LINUX if (cmdName.rfind('/')) { cmdName = cmdName.substr(cmdName.rfind('/') + 1, cmdName.npos); } #endif if (cmdName.rfind('.')) { cmdName = cmdName.substr(0, cmdName.rfind('.')); } /*添加命令的所有参数*/ for (int i = 1; i < argc; ++i) { cmdName = cmdName + " " + argv[i]; } /*构造msg,这里需要先copy命令名称,然后依次copy各个参数*/ Aris::Core::MSG msg; msg.Copy(cmdName.c_str()); /*连接并发送msg*/ Aris::Core::DOCUMENT doc; if (doc.LoadFile(xmlFileName) != 0) throw std::logic_error("failed to read configuration xml file"); std::string ip = doc.RootElement()->FirstChildElement("Server")->FirstChildElement("Connection")->Attribute("IP"); std::string port = doc.RootElement()->FirstChildElement("Server")->FirstChildElement("Connection")->Attribute("Port"); Aris::Core::CONN conn; while (true) { try { conn.Connect(ip.c_str(), port.c_str()); break; } catch (std::exception &) { std::cout << "failed to connect server, will retry in 1 second" << std::endl; Aris::Core::Sleep(1000); } } Aris::Core::MSG ret = conn.SendRequest(msg); /*错误处理*/ if (ret.GetLength() > 0) { std::cout << "cmd has fault, please regard to following information:" << std::endl; std::cout << " " << ret.GetDataAddress() << std::endl; } else { std::cout << "send command successful" << std::endl; } return 0; }
int sendRequest(int argc, char *argv[], const char *xmlFileName) { // 需要去除命令名的路径和扩展名 // std::string cmdName(argv[0]); #ifdef WIN32 if (cmdName.rfind('\\')) { cmdName = cmdName.substr(cmdName.rfind('\\') + 1, cmdName.npos); } #endif #ifdef UNIX if (cmdName.rfind('/')) { cmdName = cmdName.substr(cmdName.rfind('/') + 1, cmdName.npos); } #endif if (cmdName.rfind('.')) { cmdName = cmdName.substr(0, cmdName.rfind('.')); } // 添加命令的所有参数 // for (int i = 1; i < argc; ++i) { cmdName = cmdName + " " + argv[i]; } // 构造msg,这里需要先copy命令名称,然后依次copy各个参数 // aris::core::Msg msg; msg.copy(cmdName.c_str()); // 连接并发送msg // aris::core::XmlDocument doc; if (doc.LoadFile(xmlFileName) != 0) throw std::logic_error("failed to read configuration xml file"); std::string ip = doc.RootElement()->FirstChildElement("Server")->Attribute("ip"); std::string port = doc.RootElement()->FirstChildElement("Server")->Attribute("port"); aris::core::Socket conn; while (true) { try { conn.connect(ip.c_str(), port.c_str()); break; } catch (std::exception &) { std::cout << "failed to connect server, will retry in 1 second" << std::endl; aris::core::msSleep(1000); } } aris::core::Msg ret = conn.sendRequest(msg); /*错误处理*/ if (ret.size() > 0) { std::cout << "cmd has fault, please regard to following information:" << std::endl; std::cout << " " << ret.data() << std::endl; } else { std::cout << "send command successful" << std::endl; } return 0; }
bool MainWindow::executeCommand(const DRUIDString & command) { static const wxString runStatus(wxT("Executing command")); static const wxString inputRequired(wxT("Input Required...")); static const wxString integerInputRequired(wxT("Integer input Required...")); static const wxString numericInputRequired(wxT("Numeric input Required...")); static const wxString runStatusDone(wxT(" completed")); SetStatusText(runStatus); uint8_t wait_attempts=0; while (executing_request && wait_attempts++ < 5) usleep(1000); touchLastInteraction(); DRUID::SerialUIUserPtr serial_user = connection->serialUser(); DRUID_DEBUG2("Doing send+rcv for", command); executing_request = true; if ( (! serial_user->sendAndReceive(command)) || serial_user->hasError()) { wxString errMsg(DRUID_STDSTRING_TOWX(serial_user->errorMessage())); SetStatusText(errMsg); MW_RETURNFROM_EXECUTECOMMAND(false); } awaiting_input = false; wxString cmdName(DRUID_STDSTRING_TOWX(command)); if (serial_user->inputRequired()) { serial_user->flushReceiveBuffer(); serial_user->setAutoReplaceLastMessage(false); { // may have more than a single input to enter, so we do/while it... DRUID_DEBUG("Need input..."); oldFocus = this->FindFocus(); awaiting_input = true; DRUID::UserInputType reqType = serial_user->inputRequiredType(); // get the name from the prompt, if possible. if (serial_user->inputRequiredPromptString().size()) { cmdName = DRUID_STDSTRING_TOWX(serial_user->inputRequiredPromptString()); } bool streamSuccess; switch (reqType) { case DRUID::InputType_Numeric: DRUID_DEBUG("Numeric input required"); SetStatusText(numericInputRequired); break; case DRUID::InputType_Integer: DRUID_DEBUG("Numeric (int) input required"); SetStatusText(integerInputRequired); break; case DRUID::InputType_Stream: DRUID_DEBUG("Want a stream (file) upload"); // little bit different, this one... we need to select a file and stream its contents in... streamSuccess = sendFileStream(); // outputTextCtrl->AppendText(DRUID_STDSTRING_TOWX(serial_user->lastMessage())); awaiting_input = false; MW_RETURNFROM_EXECUTECOMMAND(streamSuccess); break; default: DRUID_DEBUG("String input required"); SetStatusText(inputRequired); break; } input->acceptInput(true, cmdName, reqType); } } else { wxString stat(cmdName); stat += runStatusDone; SetStatusText(stat); if (serial_user->messageReceived()) { outputTextCtrl->AppendText(DRUID_STDSTRING_TOWX(serial_user->lastMessage())); serial_user->lastMessageClear(); } serial_user->setAutoReplaceLastMessage(true); if (serial_user->requestedTerminate()) { SetStatusText(wxT("GUI Termination requested")); // TODO: FIXME -- show user we aren't just dying but terminating on purpose. doQuit(); MW_RETURNFROM_EXECUTECOMMAND(true); } if (useStateTracking() && serial_user->numTrackedVariables()) { last_interaction = 0; } } MW_RETURNFROM_EXECUTECOMMAND(true); }