////////////////////////////////////////
// Programming project code
// UniBw M, 2022, 2023, 2024
// www.unibw.de/inf2
// (c) Mark Minas (mark.minas@unibw.de)
////////////////////////////////////////

package pp.monopoly.message.client;

/**
 * Visitor interface for processing all client messages.
 */
public interface ClientInterpreter {
    /**
     * Processes a received BuyPropertyRequest.
     *
     * @param msg  the BuyPropertyRequest to be processed
     * @param from the connection ID from which the message was received
     */
    void received(BuyPropertyRequest msg, int from);

    /**
     * Processes a received EndTurn.
     *
     * @param msg  the EndTurn to be processed
     * @param from the connection ID from which the message was received
     */
    void received(EndTurn msg, int from);

    /**
     * Processes a received PlayerReady.
     *
     * @param msg  the PlayerReady to be processed
     * @param from the connection ID from which the message was received
     */
    void received(PlayerReady msg, int from);

    /**
     * Processes a received RollDice.
     *
     * @param msg  the RollDice to be processed
     * @param from the connection ID from which the message was received
     */
    void received(RollDice msg, int from);

    /**
     * Processes a received TradeOffer.
     *
     * @param msg  the TradeOffer to be processed
     * @param from the connection ID from which the message was received
     */
    void received(TradeOffer msg, int from);

    /**
     * Processes a received TradeResponse.
     *
     * @param msg  the TradeResponse to be processed
     * @param from the connection ID from which the message was received
     */
    void received(TradeResponse msg, int from);

    /**
     * Processes a received ViewAssetsRequest.
     *
     * @param msg  the ViewAssetsRequest to be processed
     * @param from the connection ID from which the message was received
     */
    void received(ViewAssetsRequest msg, int from);
}
