// File: /workspace/github_cpp_makefile_star2_O3/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 0x2100
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 0x2340
movq %r13, %rdi
callq 0x2100
movw $0xa29, -0x130(%rbp,%rax) # imm = 0xA29
movb $0x0, -0x12e(%rbp,%rax)
movq %r13, %rdi
callq 0x2100
movq %r15, -0x130(%rbp,%rax)
movl $0x283272, -0x129(%rbp,%rax) # imm = 0x283272
leaq 0xb0(%rbx), %rsi
movq %r13, %rdi
callq 0x2340
movq %r13, %rdi
callq 0x2100
movl $0xa0a29, -0x130(%rbp,%rax) # imm = 0xA0A29
movq %rbx, %rdi
movq %r13, %rsi
callq 0x6060
cmpl $0x1, %r12d
jne 0x64aa
movups 0x34e4(%rip), %xmm0     # 0x986e
leaq -0x130(%rbp), %rsi
movups %xmm0, 0x1a(%rsi)
movups 0x34c8(%rip), %xmm0     # 0x9864
movaps %xmm0, 0x10(%rsi)
movups 0x34ad(%rip), %xmm0     # 0x9854
movaps %xmm0, (%rsi)
movq %rbx, %rdi
callq 0x6060
leaq -0x218(%rbp), %r12
movl $0xe2, %edx
movq %r12, %rdi
xorl %esi, %esi
callq 0x2130
movabsq $0xa2e6164697472, %rax  # imm = 0xA2E6164697472
movq %rax, -0x8(%r12)
movups 0x34a0(%rip), %xmm0     # 0x987e
movaps %xmm0, -0x18(%r12)
movl 0x94(%rbx), %r13d
leaq -0x230(%rbp), %r12
movq %r12, %rdi
callq 0x2100
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 0x346f(%rip), %xmm0     # 0x9896
movaps %xmm0, -0x1e(%r13)
movups 0x3471(%rip), %xmm0     # 0x98a4
movups %xmm0, -0x10(%r13)
movl 0x114(%rbx), %r13d
movq %r12, %rdi
callq 0x2100
movl %r13d, %edi
movq %r12, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
callq 0x2110
cmpl $0x0, (%r14)
jle 0x65c8
movq -0x30(%rbp), %rax
movq (%rax), %rax
movl 0x94(%rbx), %ecx
movl 0x114(%rbx), %edx
addq $0x4, %rax
xorl %esi, %esi
movl -0x4(%rax), %r8d
movl $0x4, %edi
cmpl %ecx, %r8d
je 0x6492
movl $0x3, %edi
cmpl %edx, %r8d
jne 0x6494
movl %edi, (%rax)
incq %rsi
movslq (%r14), %rdi
addq $0xd4, %rax
cmpq %rdi, %rsi
jl 0x647a
jmp 0x65c8
movups 0x341d(%rip), %xmm0     # 0x98ce
leaq -0x130(%rbp), %rsi
movups %xmm0, 0x1a(%rsi)
movups 0x3401(%rip), %xmm0     # 0x98c4
movaps %xmm0, 0x10(%rsi)
movups 0x33e6(%rip), %xmm0     # 0x98b4
movaps %xmm0, (%rsi)
movq %rbx, %rdi
callq 0x6060
leaq -0x212(%rbp), %r12
movl $0xdc, %edx
movq %r12, %rdi
xorl %esi, %esi
callq 0x2130
movups 0x33a0(%rip), %xmm0     # 0x9896
movaps %xmm0, -0x1e(%r12)
movups 0x33a1(%rip), %xmm0     # 0x98a4
movups %xmm0, -0x10(%r12)
movl 0x94(%rbx), %r13d
leaq -0x230(%rbp), %r12
movq %r12, %rdi
callq 0x2100
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 0x3324(%rip), %xmm0     # 0x987e
movaps %xmm0, -0x18(%r13)
movl 0x114(%rbx), %r13d
movq %r12, %rdi
callq 0x2100
movl %r13d, %edi
movq %r12, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
callq 0x2110
cmpl $0x0, (%r14)
jle 0x65c8
movq -0x30(%rbp), %rax
movq (%rax), %rax
movl 0x94(%rbx), %ecx
movl 0x114(%rbx), %edx
addq $0x4, %rax
xorl %esi, %esi
movl -0x4(%rax), %r8d
movl $0x3, %edi
cmpl %ecx, %r8d
je 0x65b5
movl $0x4, %edi
cmpl %edx, %r8d
jne 0x65b7
movl %edi, (%rax)
incq %rsi
movslq (%r14), %rdi
addq $0xd4, %rax
cmpq %rdi, %rsi
jl 0x659d
movq %rbx, %rdi
callq 0x60b8
addq $0x208, %rsp            # imm = 0x208
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq