// File: /workspace/github_cpp_makefile_star2_O2/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
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x208, %rsp            # imm = 0x208
movq %rcx, -0x30(%rbp)
movq %rdx, %r14
movl %esi, %r12d
movq %rdi, %rbx
movabsq $0x524f444147554a0a, %rax # imm = 0x524F444147554A0A
leaq -0x130(%rbp), %r13
movq %rax, (%r13)
movabsq $0xa3a5345524f44, %rax  # imm = 0xA3A5345524F44
movq %rax, 0x5(%r13)
movq %r13, %rdi
callq 0x20f0
movabsq $0x726f646167754a09, %r15 # imm = 0x726F646167754A09
movq %r15, -0x130(%rbp,%rax)
movl $0x283172, -0x129(%rbp,%rax) # imm = 0x283172
leaq 0x30(%rbx), %rsi
movq %r13, %rdi
callq 0x2350
movq %r13, %rdi
callq 0x20f0
movw $0xa29, -0x130(%rbp,%rax) # imm = 0xA29
movb $0x0, -0x12e(%rbp,%rax)
movq %r13, %rdi
callq 0x20f0
movq %r15, -0x130(%rbp,%rax)
movl $0x283272, -0x129(%rbp,%rax) # imm = 0x283272
leaq 0xb0(%rbx), %rsi
movq %r13, %rdi
callq 0x2350
movq %r13, %rdi
callq 0x20f0
movl $0xa0a29, -0x130(%rbp,%rax) # imm = 0xA0A29
movq %rbx, %rdi
movq %r13, %rsi
callq 0x59fc
cmpl $0x1, %r12d
jne 0x5dfd
movups 0x2b5c(%rip), %xmm0     # 0x883e
leaq -0x130(%rbp), %rsi
movups %xmm0, 0x1a(%rsi)
movups 0x2b40(%rip), %xmm0     # 0x8834
movaps %xmm0, 0x10(%rsi)
movups 0x2b25(%rip), %xmm0     # 0x8824
movaps %xmm0, (%rsi)
movq %rbx, %rdi
callq 0x59fc
leaq -0x218(%rbp), %r12
xorl %r15d, %r15d
movl $0xe2, %edx
movq %r12, %rdi
xorl %esi, %esi
callq 0x2130
movabsq $0xa2e6164697472, %rax  # imm = 0xA2E6164697472
movq %rax, -0x8(%r12)
movups 0x2b15(%rip), %xmm0     # 0x884e
movaps %xmm0, -0x18(%r12)
movl 0x94(%rbx), %r13d
leaq -0x230(%rbp), %r12
movq %r12, %rdi
callq 0x20f0
movl %r13d, %edi
movq %r12, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
callq 0x2110
leaq -0x212(%rbp), %r13
movl $0xdc, %edx
movq %r13, %rdi
xorl %esi, %esi
callq 0x2130
movups 0x2ae4(%rip), %xmm0     # 0x8866
movaps %xmm0, -0x1e(%r13)
movups 0x2ae6(%rip), %xmm0     # 0x8874
movups %xmm0, -0x10(%r13)
movl 0x114(%rbx), %r13d
movq %r12, %rdi
callq 0x20f0
movl %r13d, %edi
movq %r12, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
callq 0x2110
movq -0x30(%rbp), %rax
movq (%rax), %rax
movl 0x94(%rbx), %ecx
movl 0x114(%rbx), %edx
addq $0x4, %rax
pushq $0x4
popq %rsi
pushq $0x3
popq %rdi
movslq (%r14), %r8
cmpq %r8, %r15
jge 0x5f1b
movl -0x4(%rax), %r9d
movl %esi, %r8d
cmpl %ecx, %r9d
je 0x5def
movl %edi, %r8d
cmpl %edx, %r9d
jne 0x5df2
movl %r8d, (%rax)
incq %r15
addq $0xd4, %rax
jmp 0x5dcf
movups 0x2a9a(%rip), %xmm0     # 0x889e
leaq -0x130(%rbp), %rsi
movups %xmm0, 0x1a(%rsi)
movups 0x2a7e(%rip), %xmm0     # 0x8894
movaps %xmm0, 0x10(%rsi)
movups 0x2a63(%rip), %xmm0     # 0x8884
movaps %xmm0, (%rsi)
movq %rbx, %rdi
callq 0x59fc
leaq -0x212(%rbp), %r12
xorl %r15d, %r15d
movl $0xdc, %edx
movq %r12, %rdi
xorl %esi, %esi
callq 0x2130
movups 0x2a1a(%rip), %xmm0     # 0x8866
movaps %xmm0, -0x1e(%r12)
movups 0x2a1b(%rip), %xmm0     # 0x8874
movups %xmm0, -0x10(%r12)
movl 0x94(%rbx), %r13d
leaq -0x230(%rbp), %r12
movq %r12, %rdi
callq 0x20f0
movl %r13d, %edi
movq %r12, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
callq 0x2110
leaq -0x218(%rbp), %r13
movl $0xe2, %edx
movq %r13, %rdi
xorl %esi, %esi
callq 0x2130
movabsq $0xa2e6164697472, %rax  # imm = 0xA2E6164697472
movq %rax, -0x8(%r13)
movups 0x299e(%rip), %xmm0     # 0x884e
movaps %xmm0, -0x18(%r13)
movl 0x114(%rbx), %r13d
movq %r12, %rdi
callq 0x20f0
movl %r13d, %edi
movq %r12, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
callq 0x2110
movq -0x30(%rbp), %rax
movq (%rax), %rax
movl 0x94(%rbx), %ecx
movl 0x114(%rbx), %edx
addq $0x4, %rax
pushq $0x3
popq %rsi
pushq $0x4
popq %rdi
movslq (%r14), %r8
cmpq %r8, %r15
jge 0x5f1b
movl -0x4(%rax), %r9d
movl %esi, %r8d
cmpl %ecx, %r9d
je 0x5f0d
movl %edi, %r8d
cmpl %edx, %r9d
jne 0x5f10
movl %r8d, (%rax)
incq %r15
addq $0xd4, %rax
jmp 0x5ef1
movq %rbx, %rdi
callq 0x5a54
addq $0x208, %rsp            # imm = 0x208
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq