20 package com.generalrobotix.ui.util;
22 import java.io.BufferedReader;
24 import java.io.IOException;
25 import java.io.InputStream;
26 import java.io.InputStreamReader;
27 import java.io.PrintStream;
28 import java.util.ArrayList;
29 import java.util.List;
32 import java.util.concurrent.ConcurrentLinkedQueue;
37 import org.eclipse.swt.widgets.Display;
38 import org.eclipse.core.runtime.IProgressMonitor;
48 @SuppressWarnings(
"serial")
53 private boolean isEnd_ =
false;
55 private StringBuffer outputBuffer_ =
null;
56 private ConcurrentLinkedQueue<String> lineQueue =
null;
57 private Thread thread_ =
null;
63 process_ =
new java.util.ArrayList<
AProcess>();
64 outputBuffer_ =
new StringBuffer();
65 lineQueue =
new ConcurrentLinkedQueue<String>();
66 GrxProcessManagerThis_ =
this;
71 if (GrxProcessManagerThis_ !=
null) {
74 GrxProcessManagerThis_.
process_.clear();
76 GrxProcessManagerThis_ =
null;
81 serverManager_ = serverManager;
82 IProgressMonitor monitor =
null;
83 setProcessList(monitor);
87 StringBuffer nsHost =
new StringBuffer(
"");
88 StringBuffer nsPort =
new StringBuffer(
"");
90 String nsOpt =
" -ORBInitRef NameService=corbaloc:iiop:" + nsHost +
":" + nsPort +
"/NameService";
94 if ( isRegistered(nameServerInfo_) ) {
95 if( !isRunning(nameServerInfo_) ){
96 unregister(nameServerInfo_.
id);
97 register(nameServerInfo_);
100 register(nameServerInfo_);
105 for(
int i=0;
i<localPi.
com.size();
i++){
107 localPi.
com.set(
i, localPi.
com.get(
i) +
" " + nsOpt);
109 localPi.
com.set(
i, localPi.
com.get(
i));
112 if ( isRegistered(localPi) ) {
113 if( !isRunning(localPi) ){
114 unregister(localPi.
id);
126 if (localProcess !=
null) {
133 if (
get(pi.
id) !=
null) {
141 if (
get(pi.id) !=
null) {
160 if (process_.remove(p)) {
173 for (
int i = 0;
i < process_.size();
i++) {
174 if (
get(
i).pi_.id.equals(
name)) {
182 if (0 <=
n &&
n < process_.size()) {
183 return process_.get(
n);
189 return process_.size();
193 for (
int i = 0;
i < process_.size();
i++) {
198 }
catch (Exception e) {
209 for (
int i = process_.size();
i > 0;
i--) {
219 if (!System.getProperty(
"os.name").equals(
"Linux")) {
224 pi.
com.add(
"/usr/bin/killall");
225 pi.
dir =
"/usr/bin/";
237 }
catch (Exception e) {
244 if (!System.getProperty(
"os.name").equals(
"Linux")) {
249 pi.
com.add(
"/bin/ps ax");
263 String[] rets = ret.split(
"\n");
265 for (
int i = 0;
i < rets.length;
i++) {
266 if (rets[
i].indexOf(str +
" ") != -1) {
267 ret += rets[
i] +
"\n";
271 }
catch (Exception e) {
277 public List<Integer>
getPID(String processName){
279 List<Integer>
ret =
new ArrayList<Integer>();
280 String []commands={
"tasklist",
"/NH"};
281 String key =
new String(processName +
".exe");
282 Runtime r = Runtime.getRuntime();
283 if (System.getProperty(
"os.name").equals(
"Linux") ||
284 System.getProperty(
"os.name").equals(
"Mac OS X")) {
285 commands[0] =
new String (
"/bin/ps");
286 commands[1] =
new String (
"axh");
287 key =
new String(
"/" + processName);
292 Process p = r.exec(commands);
294 InputStream in = p.getInputStream();
295 p.getOutputStream().toString();
296 BufferedReader br =
new BufferedReader(
new InputStreamReader(in));
298 while ((line = br.readLine()) !=
null) {
299 if( line.indexOf(key) >= 0){
300 line = line.replaceAll(
"^[\\s]+",
"");
301 String[] splitLine = line.split(
"[\\s]+");
302 if( splitLine.length > splitNum ){
304 Integer pid = Integer.valueOf(splitLine[splitNum]);
308 }
catch (NumberFormatException ex){
309 ex.printStackTrace();
314 }
catch (Exception e) {
320 public void restart(IProgressMonitor monitor){
321 if(serverManager_ !=
null){
336 if(nameServer !=
null){
342 setProcessList(monitor);
348 public List<String>
com =
new ArrayList<String>();
349 public List<String>
env =
new ArrayList<String>();
363 for (
int i = 0;
i < com.size();
i++) {
366 if (env.size() > 0) {
367 for (
int i = 0;
i < env.size();
i++)
379 for(
int i = 0;
i < com.size(); ++
i){
392 ret.
args =
new String(args);
393 ret.
dir =
new String(dir);
394 ret.
com =
new ArrayList<String>();
396 ret.
com.add(
new String(
i));
398 ret.
env =
new ArrayList<String>();
400 ret.
com.add(
new String(
i));
402 }
catch(CloneNotSupportedException ex){
403 ex.printStackTrace();
410 if( thread_ ==
null ){
411 thread_ =
new Thread() {
425 for (
int i = 0;
i <
size();
i++) {
431 if (sb ==
null || sb.length() == 0) {
434 String newLine = sb.toString();
435 if (outputBuffer_.length() > 50000) {
436 outputBuffer_.delete(0, newLine.length());
438 outputBuffer_.append(newLine);
451 lineQueue.offer(newLine);
455 Display display = Display.getDefault();
456 if (display !=
null && !display.isDisposed()) {
457 display.asyncExec(
new Runnable() {
459 String newLine =
null;
460 while ((newLine = lineQueue.poll()) !=
null) {
461 notifyObservers(
"append", newLine);
462 notifyObservers(
"setTopIndex");
469 }
catch (InterruptedException e) {
479 return outputBuffer_;
503 }
catch (InterruptedException ex) {
504 ex.printStackTrace();
511 private Process process_ =
null;
512 private StringBuffer com_ =
null;
515 private boolean showOutput_ =
true;
518 private boolean expecting_ =
false;
519 private InputStream is_ =
null;
520 private BufferedReader br_ =
null;
521 private InputStream es_ =
null;
522 private BufferedReader bre_ =
null;
523 private PrintStream ps_ =
null;
524 private StringBuffer buf_ =
null;
529 if (pi_.
env.size() > 0) {
530 env_ =
new String[pi_.
env.size()];
531 for (
int i = 0;
i < pi_.
env.size();
i++)
532 env_[
i] = pi_.
env.get(
i);
537 }
catch (Exception e) {
541 buf_ =
new StringBuffer();
545 com_ =
new StringBuffer(com);
549 com_ =
new StringBuffer();
550 if (pi_.
com.size() >
i) {
551 com_.append(pi_.
com.get(i));
553 com_.append(
" "+pi_.
args);
558 for(
int i=0;
i<pi_.
com.size();
i++){
561 Thread thread =
new Thread() {
565 Display display = Display.getDefault();
566 if (display !=
null && !display.isDisposed()) {
567 display.asyncExec(
new Runnable() {
570 notifyObservers(
"append",
"[" + pi_.
id +
":O] " +
"Process End\n");
571 notifyObservers(
"setTopIndex");
577 }
catch (InterruptedException e) {
604 String[] _com = com_.toString().split(
" ");
605 String[] _opt = opt.split(
" ");
606 List<String>
com =
new ArrayList<String>();
607 for(
int i=0;
i<_com.length;
i++)
608 if(_com[
i].trim().length()!=0 )
610 for(
int i=0; i<_opt.length; i++)
611 if(_opt[i].trim().
length()!=0 )
613 ProcessBuilder pb =
new ProcessBuilder(com);
614 if(dir_ ==
null &&
new File(com.get(0)).isAbsolute())
615 dir_ =
new File(com.get(0)).getParentFile();
616 pb.directory( dir_ );
617 Map<String, String>
env = pb.environment();
619 for(
int i=0; i<env_.length; i++){
620 String[]
arg = env_[
i].split(
"=");
622 env.put(arg[0].trim(), arg[1].trim());
624 Set<String> keySet = env.keySet();
625 String pathKey =
null;
626 for (String key : keySet) {
627 if (key.equalsIgnoreCase(
"Path")) {
631 String
path = env.get(pathKey);
632 env.put(pathKey,
Activator.
getDefault().getPreferenceStore().getString(
"SERVER_DIR")+
File.pathSeparator+path );
633 process_ = pb.start();
635 is_ = process_.getInputStream();
636 br_ =
new BufferedReader(
new InputStreamReader(is_));
637 es_ = process_.getErrorStream();
638 bre_ =
new BufferedReader(
new InputStreamReader(es_));
639 ps_ =
new PrintStream(process_.getOutputStream());
646 }
catch (Exception e) {
664 String com0 = (pi_.
com.get(0));
665 String
path = com0.split(
" ")[0];
666 String
name =
new File(path).getName();
676 if (pi_.
id.equals(nameServerInfo_.
id)) {
684 }
catch (Exception e) {
700 ServerObject serverObj = ServerObjectHelper.narrow(
obj);
701 serverObj.shutdown();
705 }
catch (Exception e) {
721 }
catch (IOException e) {
728 process_.exitValue();
730 }
catch (IllegalThreadStateException e) {
732 }
catch (Exception e) {
742 String[] k = { key };
748 String str = checkKey(buf_, key);
749 while (isRunning()) {
754 str = checkKey(readLines(), key);
757 }
catch (Exception e1) {}
759 str = checkKey(readLines(), key);
764 private String
checkKey(StringBuffer str, String[] key) {
766 for (
int i = 0;
i < key.length;
i++) {
767 if (str.indexOf(key[
i]) != -1) {
779 StringBuffer
ret =
new StringBuffer();
782 char c = (char) br.read();
787 }
catch (Exception e) {
790 if (ret.length() == 0) {
797 if (isRunning() || expecting_) {
798 StringBuffer
buf =
new StringBuffer();
799 for (
int i = 0;
i < 100;
i++) {
800 StringBuffer line1 = readLine(br_);
801 StringBuffer line2 = readLine(bre_);
803 buf.append(
"[" + pi_.
id +
":O] " + line1);
804 }
else if (line2 ==
null) {
808 buf.append(
"[" + pi_.
id +
":E] " + line2);
819 String
ret = buf_.toString();
825 buf_.delete(0, buf_.toString().length());
830 ps_.println(line +
"\n");
838 }
catch (InterruptedException e) {
StringBuffer readLine(BufferedReader br)
String psaxGrep(String str)
synchronized void set(T val)
void notifyObservers(Object...arg)
void setProcessList(IProgressMonitor monitor)
StringBuffer getOutputBuffer()
#define null
our own NULL pointer
static synchronized void shutDown()
boolean isRunning(ProcessInfo pi)
static boolean isAliveNameService()
static void deleteNameServerLog(String logPath)
omniName サーバのログファイル削除
png_infop png_charpp name
ConcurrentLinkedQueue< String > lineQueue
RTC::ReturnCode_t ret(RTC::Local::ReturnCode_t r)
void setShowOutput(boolean b)
String getNameserverLogDir()
png_bytep png_bytep png_size_t length
ProcessInfo getNameServerInfo()
NameServerのProcessInfo取得
static void printErr(String s)
boolean unregister(String id)
void restart(IProgressMonitor monitor)
GrxProcessManager(String name, GrxPluginManager manager)
static Activator getDefault()
void autoStart(IProgressMonitor monitor)
java.util.List< AProcess > process_
static void refNSHostPort(StringBuffer nsHost, StringBuffer nsPort)
org.omg.CORBA.Object getReference()
String expect(String[] key)
static void println(String s)
static String expandEnvVal(String str)
void setOutputBuffer(StringBuffer sb)
void println(String line)
static org.omg.CORBA.Object getReference(String id)
get CORBA object which is associated with id
String checkKey(StringBuffer str, String[] key)
String expect(String key)
プラグイン管理クラス GrxUIの核になるクラス。プラグインのロード等の、初期化を実行する。 プラグインとそ...
Vector< ProcessInfo > getServerInfo()
vecServerInfoの取得
void killall(String pname)
void setProcessList(GrxServerManager serverManager)
boolean start0(String opt)
boolean isRegistered(ProcessInfo pi)
static void removeNameServiceFromList()
List< Integer > getPID(String processName)
boolean isOpenHRPObject()
boolean start(String opt)