vala code using GLib; vala blank vala blank vala blank vala comment // Class which makes the event vala code public class Game : Object { vala comment // Note the use of the signal keyword vala code public signal void score_change (int newScore, ref bool cancel); vala blank vala code int _score; vala blank vala comment // Score Property vala code public int score { vala code get { vala code return _score; vala code } vala code set { vala code if (_score != value) { vala code bool cancel = false; vala code score_change (value, ref cancel); vala code if (! cancel) vala code _score = value; vala code } vala code } vala code } vala code } vala blank vala comment // Class which handles the event vala code public class Referee : Object vala code { vala code public Game game { get; construct; } vala blank vala code public Referee (construct Game game) { vala code } vala blank vala code construct { vala comment // Monitor when a score changes in the game vala code game.score_change += game_score_change; vala code } vala blank vala comment // Notice how this method signature matches the score_change signal's signature vala code private void game_score_change (Game game, int new_score, ref bool cancel) { vala code if (new_score < 100) vala code stdout.printf ("Good Score\n"); vala code else { vala code cancel = true; vala code stdout.printf ("No Score can be that high!\n"); vala code } vala code } vala code } vala blank vala comment // Class to test it all vala code public class GameTest : Object vala code { vala code public static void main () { vala code var game = new Game (); vala code var referee = new Referee (game); vala code game.score = 70; vala code game.score = 110; vala code } vala code }