2011-08-23 68 views
0

我有一个TF2服务器,如果被TF2我不在的时候更新,服务器将输出:读程序输出C++

你的服务器是过时的。请更新并重新启动。

我怎样才能用C++观察/读取输出?

的理念是:

  1. if (output == "Your server is out of date. Please update and restart.") 
     2. kill the application 
     3. run update.bat 
     4. start observing again 

是我的想法可能吗?

this is how server window looks like, just imagine that the last line says: "Your server is out of date. Please update and restart."

+3

这是否必须用C++来完成?这看起来像是使用shell /批处理脚本可以更容易完成的事情。我建议在服务器启动时将服务器输出重定向到某个文件,然后编写一个脚本读取该文件并查找更新消息,然后删除该文件,运行update.bat,并在发现服务器时重新启动服务器更新消息。如果你愿意的话,你当然可以用C++做类似的事情。 – aroth

+0

你真的需要杀死服务器吗?你不能只在服务器中运行update.bat并继续观察吗? – StevieG

+0

一个shell脚本听起来就像是一个不那么痛苦的方式来处理这个问题,尤其是因为它允许你轻松地捕获正在运行的进程的PID,并且可以立即访问诸如“kill”之类的进程信号工具。 –

回答

1

这基本上是一个看门狗

一个解决方案可以使用管道来完成:

管服务器输出从C++应用标准输入(与CIN将做读它)。例如,如果您的TF2服务器tf2.exe和你的C++应用程序是cpp.exe:

tf2.exe | cpp.exe 

您将需要再次执行这个命令,每次你重新启动服务器(这涉及到退出后的C++应用程序这样做,因为它将由命令重新运行)。

+0

我该怎么做?我找不到一个简单的解释。 Thx – Hami

+0

我不知道还有什么需要进一步解释的。 'string input =“”; (输入!=“您的服务器已过期,请更新并重新启动。”) { cin >> input; } run_batch(); exit();' 顺便说一句,正如有人说,C++是一个不错的选择。脚本可以做得更好(我推荐Bash或Perl)。 – m0skit0