// File: janthonyo[P]Redes-Practicas/message.cc
// Function: startGameMessage(domino&, int, int*, std::vector<cliente, std::allocator<cliente>>&)
void startGameMessage(domino& game, int result, int *numClientes, std::vector<cliente> &arrayClientes)
{
    //Var auxiliares
    char mensaje[MSG_SIZE];
    char buffer[MSG_SIZE];

    //Enviamos los jugadores
    strcpy(mensaje, "\nJUGADORES:\n");
    strcat(mensaje, "\tJugador1(");
    strcat(mensaje, game.getUserP1());
    strcat(mensaje, ")\n");
    strcat(mensaje, "\tJugador2(");
    strcat(mensaje, game.getUserP2());
    strcat(mensaje, ")\n\n");
    sendBoth(game, mensaje);

    // Turno del J1 / Espera J2
    if (result == 1) {
        //Enviamos que jugador ha sacado
        strcpy(mensaje, "+Ok. Jugador2 sale y ha colocado ficha.\n\n");
        sendBoth(game, mensaje);

        // Enviamos los turnos
        bzero(buffer, sizeof(buffer));
        strcpy(buffer, "+Ok. Turno de partida.\n");
        send(game.getSocketP1(), buffer, strlen(buffer), 0);

        bzero(buffer, sizeof(buffer));
        strcpy(buffer, "+Ok. Turno del otro jugador.\n");
        send(game.getSocketP2(), buffer, strlen(buffer), 0);

        // Cambiamos los estados de los jugadores
        for(int j = 0; j < *numClientes; j++)
        {
            if (arrayClientes[j].sd == game.getSocketP1())
                arrayClientes[j].status = 4;        // J1 Puede colocar

            else if (arrayClientes[j].sd == game.getSocketP2())
                arrayClientes[j].status = 3;        // J2 espera
        }
    }
    // Turno de J2 / Espera J1
    else {
        //Enviamos que jugador ha sacado
        strcpy(mensaje, "+Ok. Jugador1 sale y ha colocado ficha.\n\n");
        sendBoth(game, mensaje);

        // Enviamos los turnos
        bzero(buffer, sizeof(buffer));
        strcpy(buffer, "+Ok. Turno del otro jugador.\n");
        send(game.getSocketP1(), buffer, strlen(buffer), 0);

        bzero(buffer, sizeof(buffer));
        strcpy(buffer, "+Ok. Turno de partida.\n");
        send(game.getSocketP2(), buffer, strlen(buffer), 0);

        // Cambiamos los estados de los jugadores
        for(int j = 0; j < *numClientes; j++)
        {
            if (arrayClientes[j].sd == game.getSocketP1())
                arrayClientes[j].status = 3;    // J1 Espera

            else if (arrayClientes[j].sd == game.getSocketP2())
                arrayClientes[j].status = 4;    // J2 Puede colocar
        }
    }

    sendBoardAndHands(game);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x290, %rsp            # imm = 0x290
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
leaq -0x120(%rbp), %rdi
leaq 0x4439(%rip), %rsi      # 0x127f1
callq 0x3260
leaq -0x120(%rbp), %rdi
leaq 0x4433(%rip), %rsi      # 0x127fe
callq 0x3440
leaq -0x120(%rbp), %rax
movq %rax, -0x238(%rbp)
movq -0x8(%rbp), %rdi
callq 0xf220
movq -0x238(%rbp), %rdi
movq %rax, %rsi
callq 0x3440
leaq -0x120(%rbp), %rdi
leaq 0x3e88(%rip), %rsi      # 0x1228c
callq 0x3440
leaq -0x120(%rbp), %rdi
leaq 0x43f2(%rip), %rsi      # 0x12809
callq 0x3440
leaq -0x120(%rbp), %rax
movq %rax, -0x230(%rbp)
movq -0x8(%rbp), %rdi
callq 0xf240
movq -0x230(%rbp), %rdi
movq %rax, %rsi
callq 0x3440
leaq -0x120(%rbp), %rdi
leaq 0x43c4(%rip), %rsi      # 0x12814
callq 0x3440
movq -0x8(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0xdfd0
cmpl $0x1, -0xc(%rbp)
jne 0xe621
leaq -0x120(%rbp), %rdi
leaq 0x439b(%rip), %rsi      # 0x12818
callq 0x3260
movq -0x8(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0xdfd0
leaq -0x220(%rbp), %rdi
xorl %esi, %esi
movl $0xfa, %edx
callq 0x3170
leaq -0x220(%rbp), %rdi
leaq 0x438f(%rip), %rsi      # 0x12842
callq 0x3260
movq -0x8(%rbp), %rdi
callq 0x7b30
movl %eax, -0x254(%rbp)
leaq -0x220(%rbp), %rax
movq %rax, -0x250(%rbp)
leaq -0x220(%rbp), %rdi
callq 0x3140
movl -0x254(%rbp), %edi
movq -0x250(%rbp), %rsi
movq %rax, %rdx
xorl %ecx, %ecx
callq 0x3150
leaq -0x220(%rbp), %rdi
xorl %esi, %esi
movl $0xfa, %edx
callq 0x3170
leaq -0x220(%rbp), %rdi
leaq 0x4341(%rip), %rsi      # 0x1285a
callq 0x3260
movq -0x8(%rbp), %rdi
callq 0x7b50
movl %eax, -0x244(%rbp)
leaq -0x220(%rbp), %rax
movq %rax, -0x240(%rbp)
leaq -0x220(%rbp), %rdi
callq 0x3140
movl -0x244(%rbp), %edi
movq -0x240(%rbp), %rsi
movq %rax, %rdx
xorl %ecx, %ecx
callq 0x3150
movl $0x0, -0x224(%rbp)
movl -0x224(%rbp), %eax
movq -0x18(%rbp), %rcx
cmpl (%rcx), %eax
jge 0xe61c
movq -0x20(%rbp), %rdi
movslq -0x224(%rbp), %rsi
callq 0x70f0
movl (%rax), %eax
movl %eax, -0x258(%rbp)
movq -0x8(%rbp), %rdi
callq 0x7b30
movl %eax, %ecx
movl -0x258(%rbp), %eax
cmpl %ecx, %eax
jne 0xe5c0
movq -0x20(%rbp), %rdi
movslq -0x224(%rbp), %rsi
callq 0x70f0
movl $0x4, 0x4(%rax)
jmp 0xe606
movq -0x20(%rbp), %rdi
movslq -0x224(%rbp), %rsi
callq 0x70f0
movl (%rax), %eax
movl %eax, -0x25c(%rbp)
movq -0x8(%rbp), %rdi
callq 0x7b50
movl %eax, %ecx
movl -0x25c(%rbp), %eax
cmpl %ecx, %eax
jne 0xe604
movq -0x20(%rbp), %rdi
movslq -0x224(%rbp), %rsi
callq 0x70f0
movl $0x3, 0x4(%rax)
jmp 0xe606
jmp 0xe608
movl -0x224(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x224(%rbp)
jmp 0xe568
jmp 0xe7d0
leaq -0x120(%rbp), %rdi
leaq 0x4249(%rip), %rsi      # 0x12878
callq 0x3260
movq -0x8(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0xdfd0
leaq -0x220(%rbp), %rdi
xorl %esi, %esi
movl $0xfa, %edx
callq 0x3170
leaq -0x220(%rbp), %rdi
leaq 0x41f5(%rip), %rsi      # 0x1285a
callq 0x3260
movq -0x8(%rbp), %rdi
callq 0x7b30
movl %eax, -0x27c(%rbp)
leaq -0x220(%rbp), %rax
movq %rax, -0x278(%rbp)
leaq -0x220(%rbp), %rdi
callq 0x3140
movl -0x27c(%rbp), %edi
movq -0x278(%rbp), %rsi
movq %rax, %rdx
xorl %ecx, %ecx
callq 0x3150
leaq -0x220(%rbp), %rdi
xorl %esi, %esi
movl $0xfa, %edx
callq 0x3170
leaq -0x220(%rbp), %rdi
leaq 0x4177(%rip), %rsi      # 0x12842
callq 0x3260
movq -0x8(%rbp), %rdi
callq 0x7b50
movl %eax, -0x26c(%rbp)
leaq -0x220(%rbp), %rax
movq %rax, -0x268(%rbp)
leaq -0x220(%rbp), %rdi
callq 0x3140
movl -0x26c(%rbp), %edi
movq -0x268(%rbp), %rsi
movq %rax, %rdx
xorl %ecx, %ecx
callq 0x3150
movl $0x0, -0x228(%rbp)
movl -0x228(%rbp), %eax
movq -0x18(%rbp), %rcx
cmpl (%rcx), %eax
jge 0xe7ce
movq -0x20(%rbp), %rdi
movslq -0x228(%rbp), %rsi
callq 0x70f0
movl (%rax), %eax
movl %eax, -0x280(%rbp)
movq -0x8(%rbp), %rdi
callq 0x7b30
movl %eax, %ecx
movl -0x280(%rbp), %eax
cmpl %ecx, %eax
jne 0xe772
movq -0x20(%rbp), %rdi
movslq -0x228(%rbp), %rsi
callq 0x70f0
movl $0x3, 0x4(%rax)
jmp 0xe7b8
movq -0x20(%rbp), %rdi
movslq -0x228(%rbp), %rsi
callq 0x70f0
movl (%rax), %eax
movl %eax, -0x284(%rbp)
movq -0x8(%rbp), %rdi
callq 0x7b50
movl %eax, %ecx
movl -0x284(%rbp), %eax
cmpl %ecx, %eax
jne 0xe7b6
movq -0x20(%rbp), %rdi
movslq -0x228(%rbp), %rsi
callq 0x70f0
movl $0x4, 0x4(%rax)
jmp 0xe7b8
jmp 0xe7ba
movl -0x228(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x228(%rbp)
jmp 0xe71a
jmp 0xe7d0
movq -0x8(%rbp), %rdi
callq 0xe050
addq $0x290, %rsp            # imm = 0x290
popq %rbp
retq
nopw %cs:(%rax,%rax)