/*
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2005 satoshi akabane(akabane@logical-paradox.org)
 * $Id: Shutdown.java,v 1.1 2005/05/11 17:48:20 rampil Exp $
 */
package org.logical_paradox.httpd;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;

import org.logical_paradox.common.cli.Argument;
import org.logical_paradox.common.cli.ArgumentParser;

/**
 * httpサーバーをシャットダウンさせるツール
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.1 $
 */
public class Shutdown {
	/**
	 * メインメソッド
	 * @param args プログラム引数
	 * @throws Exception 処理されなかった例外
	 */
	public static final void main(String[] args) throws Exception {
		String remoteHost = Config.DEFAULT_HOSTNAME;
		int port = Config.DEFAULT_LISTENING_PORT;

		// 引数の解析
		Argument[] options = ArgumentParser.parse(args);

		for(int i = 0; i < options.length; i++) {
			if("host".equals(options[i].getName())) {
				remoteHost = options[i].getValue();
			} else if("port".equals(options[i].getName())) {
				port = Integer.parseInt(options[i].getValue());
			}
		}

		// 指定されたサーバー(省略時=localhost)に対してexitメソッドを叩く
		try {
			Socket clientSocket = new Socket(remoteHost, port);
			PrintWriter pw = new PrintWriter(clientSocket.getOutputStream());
			// EXITメソッドを送信する
			pw.println("EXIT / HTTP/1.0");
			pw.flush();
			// ちょっと待つ(サーバーのほうが先にsocketをcloseする程度に)
			Thread.sleep(500);
			pw.close();
		} catch(IOException e) {
			// サーバーがcloseしたので無視
		}

		System.out.println("httpサーバーをシャットダウンしました");
	}
}
