diff --git a/main/src/main/java/sd/protocol/MessageProtocol.java b/main/src/main/java/sd/protocol/MessageProtocol.java new file mode 100644 index 0000000..9f20437 --- /dev/null +++ b/main/src/main/java/sd/protocol/MessageProtocol.java @@ -0,0 +1,44 @@ +package sd.protocol; + + + +import java.io.Serializable; + +import sd.model.MessageType; + +/** + * Interface que define o contrato para todas as mensagens trocadas no simulador. + * Garante que qualquer mensagem possa ser identificada e roteada. + * * Esta interface estende Serializable para permitir que os objetos que a implementam + * sejam enviados através de Sockets (ObjectOutputStream). + * + */ +public interface MessageProtocol extends Serializable { + + /** + * Retorna o tipo da mensagem, indicando o seu propósito. + * @return O MessageType (ex: VEHICLE_TRANSFER, STATS_UPDATE). + */ + MessageType getType(); + + /** + * Retorna o objeto de dados (carga útil) que esta mensagem transporta. + * O tipo de objeto dependerá do MessageType. + * * - Se getType() == VEHICLE_TRANSFER, o payload será um objeto {@link sd.model.Vehicle}. + * - Se getType() == STATS_UPDATE, o payload será um objeto de estatísticas. + * * @return O objeto de dados (payload), que também deve ser Serializable. + */ + Object getPayload(); + + /** + * Retorna o ID do nó (Processo) que enviou esta mensagem. + * @return String (ex: "Cr1", "Cr5", "S"). + */ + String getSourceNode(); + + /** + * Retorna o ID do nó (Processo) de destino desta mensagem. + * @return String (ex: "Cr2", "DashboardServer"). + */ + String getDestinationNode(); +}