/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.pipe;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
/**
* namedpipe manager
* @author taktod
*/
public class PipeManager {
/** logger */
@SuppressWarnings("unused")
private Logger logger = Logger.getLogger(PipeManager.class);
/** processes */
private final Map<String, PipeHandler> handlers = new HashMap<String, PipeHandler>();
/** processId */
private static final String pid;
/**
* static initialize
*/
static {
RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
pid = bean.getName().split("@")[0];
}
/**
* constructor
*/
public PipeManager() {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
// with shutdown kill all processes.
for(PipeHandler handler : handlers.values()) {
handler.close();
}
}
});
}
/**
* ref for pipeHandler
* in the case of no handler, make one.
* @param name
* @return
*/
public synchronized PipeHandler getPipeHandler(String name) {
PipeHandler handler = handlers.get(name);
if(handler == null) {
handler = new PipeHandler(name, pid);
handlers.put(name, handler);
}
return handler;
}
}