Buenas!
E aí pessoal, tudo certo?
Estou desenvolvendo um mini-jogo de Truco(gaudério) para 2 jogadores em rede, porém estou tendo umas dores de cabeça em alguns aspectos e gostaria de ouvir umas opiniões. 
Criei as seguintes classes:
- Baralho, que tem 40 cartas (menos oitos e noves), tem método embaralha e tal.
- Carta, é o objeto instanciado no baralho, atributos e etc
- Conexão, é onde inicio o socket pra enviar os pacotes e coisas do tipo
- Jogada, que é a classe que controla as chamadas de Envido, Truco, entre outras ações do jogo (que por sinal são muitas e estão me dando trabalho!)
- Jogador, que possui uma mão de cartas, pontos
- Jogo, é a classe que tem as ações (de acordo com as regras do jogo)
- Pacote, é a classe onde são criados os pacotes, com ações e coisas do tipo para serem enviadas pelo socket
- Rodada, que é classe que controla os pontos que serão adicionados ao placar de cada jogador com conforme as chamadas realizadas.
O problema é o seguinte, preciso manter um controle muito rígido em cima das ações, pois são muitas.
- Envido, Real Envido, Falta Envido, Truco, Retruco, Vale 4, Flor, Contra Flor, Contra Flor e o Resto, sem falar que as ações podem ser chamadas enquanto outras ações já estão em aberto.
Por exemplo: um dos jogadores inicia o jogo, ele chama truco, o socket envia o pacote pro outro jogador informação a ação solicitada, e antes do jogador 2 aceitar ou recusar a ação truco, ele pode chamar flor ou envido, aí que mora o perigo, como posso fazer este controle?
Grato desde já,