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

package pp.monopoly.message.server;

/**
 * An interface for processing server messages.
 * Implementations of this interface can be used to handle different types of server messages.
 */
public interface ServerInterpreter {

    /**
     * Handles a BuyPropertyResponse message received from the server.
     *
     * @param msg the BuyPropertyResponse message received
     */
    void received(BuyPropertyResponse msg);

    /**
     * Handles a DiceResult message received from the server.
     *
     * @param msg the DiceResult message received
     */
    void received(DiceResult msg);

    /**
     * Handles a EventDrawCard message received from the server.
     *
     * @param msg the EventDrawCard message received
     */
    void received(EventDrawCard msg);

    /**
     * Handles a GameOver message received from the server.
     *
     * @param msg the GameOver message received
     */
    void received(GameOver msg);

    /**
     * Handles a GameStart message received from the server.
     *
     * @param msg the GameStart message received
     */
    void received(GameStart msg);

    /**
     * Handles a JailEvent message received from the server.
     *
     * @param msg the JailEvent message received
     */
    void received(JailEvent msg);

    /**
     * Handles a PlayerStatusUpdate message received from the server.
     *
     * @param msg the PlayerStatusUpdate message received
     */
    void received(PlayerStatusUpdate msg);

    /**
     * Handles a TimeOutWarning message received from the server.
     *
     * @param msg the TimeOutWarning message received
     */
    void received(TimeOutWarning msg);

    /**
     * Handles a UpdatePlayerAssets message received from the server.
     *
     * @param msg the UpdatePlayerAssets message received
     */
    void received(UpdatePlayerAssets msg);

    /**
     * Handles a ViewAssetsResponse message received from the server.
     *
     * @param msg the ViewAssetsResponse message received
     */
    void received(ViewAssetsResponse msg);

    /**
     * Handles a TradeReply message received from the server.
     *
     * @param msg the TradeReply message received
     */
    void received(TradeReply msg);
            
    /**
     * Handles a TradeRequest message received from the server.
     *
     * @param msg the TradeRequest message received
     */
    void received(TradeRequest msg);
}
