FoxGatewayTopicDefinition.java 1.36 KB
package vc.thinker.forwardthinker.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;
import vc.thinker.absctacts.mqtt.topic.TopicDefinition;
import vc.thinker.absctacts.mqtt.utils.StringFormatUtils;
import vc.thinker.forwardthinker.actor.up.ThirdPartyReportDataActor;
import vc.thinker.utils.Resolve;

/**
 * Topic-actor 定义
 *
 * @author HeTongHao
 * @since 2022-06-28 16:00
 */
@Getter
@AllArgsConstructor
public enum FoxGatewayTopicDefinition implements TopicDefinition {
    /**
     * Topic-actor 定义
     */
    report("third-party/+/up/report", ThirdPartyReportDataActor.class),
    report_version("third-party/+/v2/up/report", ThirdPartyReportDataActor.class),
    ;
    private final String topic;
    private final Class<?> actorClass;
    public static final Resolve<FoxGatewayTopicDefinition, String> RESOLVE_BY_TOPIC = new Resolve<>(values(), FoxGatewayTopicDefinition::getTopic);

    public String getActorInstanceName() {
        return StringFormatUtils.classNameLowercaseFirst(this.actorClass);
    }

    public String genTopic(String protocolCode) {
        return this.topic.replace("+", protocolCode);
    }

    /**
     * 根据topic解析第三方协议编号
     *
     * @param topic topic
     * @return 第三方协议编号
     */
    public static String resolveProtocolCodeByTopic(String topic) {
        return topic.split("/")[1];
    }
}