package com.huangzj.base.cmd;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 标在具体的 {@link GameCommand} 实现上，Spring 扫 Bean 时按来源 + service/method 归组。
 * {@code serviceId} / {@code methodId} 请使用 {@link com.huangzj.cmd.gen.PbService} 与各 {@code ServiceN_Method}
 * 生成的 {@code *_VALUE} 常量，勿写裸数字。
 * CTS/STC 在 {@link ProtoRegistry} 中通过 {@link ProtoInfo} 注册，须与本注解一致。
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Cmd {

    CommandSource source();

    /** 对应 {@link com.huangzj.cmd.gen.PbService} 的 wire 值，如 {@code PbService.Service_1_VALUE}。 */
    int serviceId();

    /** 对应具体 {@code ServiceN_Method} 的 wire 值，如 {@code Service1_Method.Method1_VALUE}。 */
    int methodId();
}
