All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.uchicom.smtp.SmtpParameter Maven / Gradle / Ivy

// (c) 2014 uchicom
package com.uchicom.smtp;

import com.uchicom.server.MultiSocketServer;
import com.uchicom.server.PoolSocketServer;
import com.uchicom.server.Server;
import com.uchicom.server.SingleSocketServer;
import com.uchicom.util.Parameter;

/**
 * SMTP実行用のパラメータクラス.
 *
 * @author uchicom: Shigeki Uchiyama
 *
 */
public class SmtpParameter extends Parameter {

	/**
	 * 引数指定のコンストラクター.
	 *
	 * @param args 引数
	 */
	public SmtpParameter(String[] args) {
		super(args);
	}

	/**
	 * 初期化
	 * 
	 * @return 初期化に成功する場合はtrue,それ以外はfalseを返します.
	 */
	public boolean init() {
		// メールボックスの基準フォルダ
		if (!is("dir")) {
			put("dir", Constants.DEFAULT_MAILBOX);
		}
		// 実行するサーバのタイプ
		if (!is("type")) {
			put("type", "single");
		}
		// ホスト名
		if (!is("host")) {
			put("host", "localhost");
		}
		// 待ち受けポート
		if (!is("port")) {
			put("port", Constants.DEFAULT_PORT);
		}
		// 受信する接続 (接続要求) のキューの最大長
		if (!is("back")) {
			put("back", Constants.DEFAULT_BACK);
		}
		// プールするスレッド数
		if (!is("pool")) {
			put("pool", Constants.DEFAULT_POOL);
		}
		// メモリ動作
		if (is("memory")) {
			Context context = Context.singleton();
			context.setUsers(get("memory").split(","));
		}
		// 送信可否
		if (is("transfer")) {
			put("transfer", Constants.DEFAULT_TRANSFER);
		}
		return true;
	}

	public Server createServer() {
		Server server = null;
		switch (get("type")) {
		case "multi":
			server = new MultiSocketServer(this, (parameter, socket) -> {
				return new SmtpProcess(parameter, socket);
			});
			break;
		case "pool":
			server = new PoolSocketServer(this, (parameter, socket) -> {
				return new SmtpProcess(parameter, socket);
			});
			break;
		case "single":
			server = new SingleSocketServer(this, (parameter, socket) -> {
				return new SmtpProcess(parameter, socket);
			});
			break;
		}
		return server;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy