/* * Copyright 2008-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.hasor.registry.boot.launcher; import net.hasor.core.AppContext; import net.hasor.rsf.console.RsfCommand; import net.hasor.rsf.console.RsfCommandRequest; import net.hasor.rsf.console.RsfInstruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Telnet扩展指令,只有通过 start.sh 形式启动时才可以使用这个指令。 * @version : 2016年3月29日 * @author 赵永春(zyc@hasor.net) */ @RsfCommand("center_app_shutdown_command") public class CenterAppShutdownInstruct implements RsfInstruct { protected static Logger logger = LoggerFactory.getLogger(CenterAppShutdownInstruct.class); @Override public String helpInfo() { return "shutdown center."; } @Override public boolean inputMultiLine(RsfCommandRequest request) { return false; } @Override public String doCommand(RsfCommandRequest request) throws Throwable { boolean killSelfValue = Boolean.valueOf((String) request.getSessionAttr("open_kill_self")); if (!killSelfValue) { return "center can't quit, please run command."; } // logger.error("A valid shutdown command was received via the shutdown port. Stopping the Server instance."); request.writeMessageLine("detail Message:"); int i = 5; for (; ; ) { logger.error("after {} seconds to kill self.", i); request.writeMessageLine("after " + i + " seconds to kill self."); try { Thread.sleep(1000); } catch (Exception e) { /**/ } i--; if (i == 0) { break; } } //延迟3秒,shutdown final AppContext appContext = request.getRsfContext().getAppContext(); Thread thread = new Thread() { public void run() { try { Thread.sleep(1000); } catch (Exception e) {/**/} appContext.shutdown(); System.exit(1); } ; }; // request.writeMessageLine("shutdown center now."); thread.setDaemon(true); thread.setName("Shutdown"); thread.start(); return "do shutdown center."; } }