We can also separate the engine (which acts as a referee) from the state and each one receives the events - like in my _events_ branch ( sorry, I could not resist :) ).

That said I think this version almost works and it should be better to focus on the client side.

For `onMove` received for fortification, there no need to wait for the player. He can only call `EndTurn`. Moreover it easier to follow and it avoids code dupplication.