public void messageBroadcasted(final Blackboard.BlackboardMessage message)
    {
	if (message instanceof MatrixPatch)
	{
	    final MatrixPatch patch = (MatrixPatch)message;
	    synchronized (queuedPatches)
	    {
		queuedPatches.offerLast(patch);
		queuedPatches.notifyAll();
	    }
	}
	else if (message instanceof LocalPlayer)
        {
	    this.player = ((LocalPlayer)message).player;
	}
	else if (message instanceof PlayerPause)
        {
	    if (((PlayerPause)message).player == this.player)
	    {
		this.paused = ((PlayerPause)message).paused;
		this.repaint();
	    }
	}
	else if (message instanceof FullUpdate)
	{
	    final FullUpdate fullUpdate = (FullUpdate)message;
	    if (fullUpdate.isGathering() == false)
	    {
		final Board board = ((EngineData)(fullUpdate.data.get(Engine.class))).board;
		final Shape shape = ((EngineData)(fullUpdate.data.get(Engine.class))).fallingShape;
		if (board == null)
		    return;
		final Block[][] matrix = board.getMatrix();
		final boolean[][] erase = new boolean[20][10];
		for (int y = 0; y < 20; y++)
		    for (int x = 0; x < 10; x++)
			erase[y][x] = true;
		update(erase, matrix, 0, 0);
		final Block[][] blocks = shape.getBlockMatrix();
		update(null, blocks, shape.getX(), shape.getY());
	    }
	}
    }