private void SetUpGame(IUIThreadDispatcher uiThreadDispatcher) { uiThreadDispatcher.BlockingInvoke(() => { game.SetItUp(); game.AgentCardsController.AutoPlay = false; game.GameState.MoveHappened += m => { if (m.Player == Player.One && (!(m is DrawMove))) { _remote.Send("rummy.human_move" , getMoveAsJson(m)); game.GameState.CheckForWinnerInTheMiddleOfTurns(); } }; game.GameState.StateChanged += (oldState, newState) => { _remote.Send("rummy.game_state", getGameStateAsJson()); }; game.AgentCardsController.CanPlay += (s, e) => { //here, sending all the possible moves to Java _remote.Send("rummy.available_moves", getPossibleMovesAsJson()); }; game.GameState.GameOver += p => { _remote.Send("rummy.gameover", getPlayerAsJson(p)); }; }); }