테스트

aion-server 4.8

Gitteol
최고관리자 · 1 · 💬 0 클론/새로받기
 4.8 61f661d · 1 commits 새로받기(Pull)
commons/src/com/aionemu/commons/scripting/ScriptManager.java
package com.aionemu.commons.scripting;

import java.io.File;
import java.util.*;

import com.aionemu.commons.scripting.classlistener.ClassListener;
import com.aionemu.commons.scripting.impl.ScriptContextImpl;

/**
 * Class that represents managers of script contexts. It loads, reloads and unload script contexts. In the future it may be extended to support
 * programmatic manipulation of contexts, but for now it's not needed. <br />
 * Example:
 * 
 * <pre>
 *      ScriptManager sm = new ScriptManager();
 *      sm.load(new File(&quot;st/javaSourceRootDirectory&quot;));
 *      ...
 *      sm.shutdown();
 * </pre>
 * 
 * <br>
 * 
 * @author SoulKeeper, Aquanox
 */
public class ScriptManager {

	/**
	 * Collection of script contexts
	 */
	private Set<ScriptContext> contexts = new HashSet<>();

	/**
	 * Global ClassListener instance. Automatically assigned for each new context. Fires after each successful compilation.
	 */
	private ClassListener globalClassListener;

	/**
	 * Loads .java files from all given directories recursively.
	 */
	public synchronized void load(File... sourceFileRootDirectories) {
		ScriptContext context = createUniqueContext(sourceFileRootDirectories);
		contexts.add(context);
		context.init();
	}

	private ScriptContext createUniqueContext(File... sourceFileDirectories) {
		ScriptContext context = new ScriptContextImpl(sourceFileDirectories);
		if (contexts.contains(context))
			throw new IllegalArgumentException("Script context already exists for these directories: " + Arrays.toString(sourceFileDirectories));

		if (globalClassListener != null)
			context.setClassListener(globalClassListener);

		return context;
	}

	/**
	 * Initializes shutdown on all contexts
	 */
	public synchronized void shutdown() {
		for (ScriptContext context : contexts) {
			context.shutdown();
		}

		contexts.clear();
	}

	/**
	 * Reloads all contexts
	 */
	public synchronized void reload() {
		for (ScriptContext context : contexts) {
			reloadContext(context);
		}
	}

	/**
	 * Reloads specified context.
	 * 
	 * @param ctx
	 *          Script context instance.
	 */
	public void reloadContext(ScriptContext ctx) {
		ctx.reload();
	}

	/**
	 * Returns unmodifiable set with script contexts
	 * 
	 * @return unmodifiable set of script contexts
	 */
	public synchronized Collection<ScriptContext> getScriptContexts() {
		return Collections.unmodifiableSet(contexts);
	}

	/**
	 * Set Global class listener instance.
	 * 
	 * @param instance
	 *          listener instance.
	 */
	public void setGlobalClassListener(ClassListener instance) {
		this.globalClassListener = instance;
	}
}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 102,949
2 no_profile 동가리쪽지보내기 자기소개 아이디로 검색 전체게시물 63,733
3 no_profile 라프텔쪽지보내기 자기소개 아이디로 검색 전체게시물 51,771
4 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 36,923
5 서번트쪽지보내기 자기소개 아이디로 검색 전체게시물 35,011
6 no_profile 닥터스쪽지보내기 자기소개 아이디로 검색 전체게시물 29,470
7 no_profile 검은고양이쪽지보내기 자기소개 아이디로 검색 전체게시물 29,077
8 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 28,199
9 no_profile 보거스쪽지보내기 자기소개 아이디로 검색 전체게시물 26,731
10 no_profile 호롤롤로쪽지보내기 자기소개 아이디로 검색 전체게시물 17,020
알림 0