// File: /workspace/github_cpp_makefile_star2_O1/nesro[P]NCursesGomoku/src/client.cpp
// Function: CClient::nextMove()
void CClient::nextMove(void) {
    
    static bool firstMove = true;

    int sendSize;
    char sendData[4];
    memset(sendData, '\0', 4);

    int recvSize;
    char recvData[4];
    memset(recvData, '\0', 4);

    char message[CBoard::MESSAGE_LENGTH];

    /* if this is the first move of the client, he can not send the data about
     * the local player move, because he don't play yet. */
    if (firstMove == false) {

        /* prepare send data */
        if (m_Game->m_Players[0]->m_Surrender) {
            sendData[2] = (char) 1;
        } else {
            sendData[0] = (char) m_Board->m_LastStone.m_X;
            sendData[1] = (char) m_Board->m_LastStone.m_Y;
        }

        /* send */
        m_Board->printMessage(" Client sending informations.");
        usleep(500000);

        if ((sendSize = send(m_Game->m_ConnectionSocket, sendData, 4, 0)) ==
                -1) {
            throw CNetworkException("Fatal network error: Client send failed.");
        }

    } else {
        firstMove = false;
    }

    /* nothing to do here */
    if (m_Game->m_Players[0]->m_Surrender || m_IsWinner == true) {
        return;
    }

    /* recv */
    m_Board->printMessage(" Client waits for server move.");
    usleep(500000);

    if ((recvSize = recv(m_Game->m_ConnectionSocket, recvData, 4, 0)) == -1) {
        throw CNetworkException("Fatal network error: Client recv failed.");
    }

    /* parse */
    memset(message, 0, CBoard::MESSAGE_LENGTH);
    sprintf(message, " Client received: %d,%d,%d", recvData[0],
            recvData[1], recvData[2]);
    m_Board->printMessage(message);

    usleep(500000);

    if (recvData[2] == 1) {
        m_Surrender = true;
        return;
    }

    if (m_Board->addStone(m_Mark, (int) recvData[1], (int) recvData[0]) ==
            false) {
        throw CNetworkException("Fatal network error: Bad data received.");
    }
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
xorl %eax, %eax
movl %eax, 0xc(%rsp)
movl %eax, 0x8(%rsp)
cmpb $0x1, 0x5bc0(%rip)      # 0x91ed
jne 0x3644
movq 0x20(%rbx), %rax
movq 0x40(%rax), %rax
cmpb $0x1, 0x8(%rax)
jne 0x364d
movb $0x1, 0xe(%rsp)
jmp 0x365f
movb $0x1, 0x5ba2(%rip)      # 0x91ed
jmp 0x369a
movq 0x10(%rbx), %rax
movb 0x28(%rax), %cl
movb %cl, 0xc(%rsp)
movb 0x2c(%rax), %al
movb %al, 0xd(%rsp)
movq 0x10(%rbx), %rdi
leaq 0x22a9(%rip), %rsi      # 0x5913
callq 0x33fa
movl $0x7a120, %edi          # imm = 0x7A120
callq 0x22c0
movq 0x20(%rbx), %rax
movl 0xc(%rax), %edi
leaq 0xc(%rsp), %rsi
movl $0x4, %edx
xorl %ecx, %ecx
callq 0x2150
cmpl $-0x1, %eax
je 0x3769
movq 0x20(%rbx), %rax
movq 0x40(%rax), %rax
cmpb $0x0, 0x8(%rax)
jne 0x3761
cmpb $0x0, 0xa(%rbx)
jne 0x3761
movq 0x10(%rbx), %rdi
leaq 0x2299(%rip), %rsi      # 0x595a
callq 0x33fa
movl $0x7a120, %edi          # imm = 0x7A120
callq 0x22c0
movq 0x20(%rbx), %rax
movl 0xc(%rax), %edi
leaq 0x8(%rsp), %rsi
movl $0x4, %edx
xorl %ecx, %ecx
callq 0x20d0
cmpl $-0x1, %eax
je 0x3787
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %r14
movaps %xmm0, 0x10(%r14)
movaps %xmm0, (%r14)
movsbl 0x8(%rsp), %edx
movsbl 0x9(%rsp), %ecx
movsbl 0xa(%rsp), %r8d
leaq 0x2289(%rip), %rsi      # 0x59a2
movq %r14, %rdi
xorl %eax, %eax
callq 0x2060
movq 0x10(%rbx), %rdi
movq %r14, %rsi
callq 0x33fa
movl $0x7a120, %edi          # imm = 0x7A120
callq 0x22c0
cmpb $0x1, 0xa(%rsp)
jne 0x3746
movb $0x1, 0x8(%rbx)
jmp 0x3761
movq 0x10(%rbx), %rdi
movsbl 0x9(%rbx), %esi
movsbl 0x9(%rsp), %edx
movsbl 0x8(%rsp), %ecx
callq 0x2e6c
testb %al, %al
je 0x37a5
addq $0x38, %rsp
popq %rbx
popq %r14
retq
movl $0x28, %edi
callq 0x2140
movq %rax, %rbx
leaq 0x21b4(%rip), %rsi      # 0x5931
movq %rax, %rdi
callq 0x4440
jmp 0x37c1
movl $0x28, %edi
callq 0x2140
movq %rax, %rbx
leaq 0x21de(%rip), %rsi      # 0x5979
movq %rax, %rdi
callq 0x4440
jmp 0x37c1
movl $0x28, %edi
callq 0x2140
movq %rax, %rbx
leaq 0x2204(%rip), %rsi      # 0x59bd
movq %rax, %rdi
callq 0x4440
leaq 0x5508(%rip), %rsi      # 0x8cd0
leaq 0xcab(%rip), %rdx       # 0x447a
movq %rbx, %rdi
callq 0x2330
jmp 0x37db
jmp 0x37db
movq %rax, %r14
movq %rbx, %rdi
callq 0x2190
movq %r14, %rdi
callq 0x2340
nop