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

com.neko233.toolchain.event.delegate.DispatcherApi Maven / Gradle / Ivy

package com.neko233.toolchain.event.delegate;

import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;

/**
 * @author SolarisNeko
 * Date on 2023-01-02
 */
public interface DispatcherApi {

    default void sync(Object data) {
        sync(data.getClass().getName(), data);
    }

    /**
     * 同步处理
     *
     * @param eventId 事件ID
     * @param data    数据
     */
    void sync(String eventId, Object data);

    default  Future async(T object) {
        if (object == null) {
            return new FutureTask<>(() -> null);
        }
        String fullClassName = object.getClass().getName();
        return async(fullClassName, object);
    }

    /**
     * 异步处理
     *
     * @param eventId 事件ID
     * @param data    数据
     * @return Future
     */
    Future async(String eventId, Object data);

    default  DispatcherApi register(Class clazz, EventListener listener) {
        if (clazz == null) {
            return this;
        }
        return register(clazz.getName(), listener);
    }

    /**
     * 注册
     *
     * @param eventId  事件ID
     * @param listener 监听者
     * @return this
     */
    DispatcherApi register(String eventId, EventListener listener);


    default  DispatcherApi unregisterAll(Class clazz) {
        if (clazz == null) {
            return this;
        }
        return unregisterAll(clazz.getName());
    }

    /**
     * 取消注册某个事件
     *
     * @param eventId 事件
     * @return this
     */
    DispatcherApi unregisterAll(String eventId);


    /**
     * 取消注册某个 listener
     *
     * @param eventId       事件
     * @param eventListener 监听器
     */
    void unregisterListener(String eventId, EventListener eventListener);


    default  void unregisterListener(Class clazz, EventListener eventListener) {
        if (clazz == null) {
            return;
        }
        unregisterListener(clazz.getName(), eventListener);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy