void* display_func(void) {

    int i, j, error;
    char message_buffer[LENGHT_MESSAGE], message_buffer_2[LENGHT_MESSAGE];
    char filename[LENGHT_MESSAGE];
    char confirm_file[LENGHT_MESSAGE];
    FILE *fp;

    while (state == 0) {

        if (recieve_data(LENGHT_MESSAGE, message_buffer) == 0)
            draw_new(global_display, "system>> recieve error");

        //draw_new(global_display, message_buffer);
        if (message_buffer[0] == '0') {
            split_str(1, strlen(message_buffer), message_buffer, message_buffer_2);
            draw_new(global_display, message_buffer_2);
        }
        else if (message_buffer[0] == '1') {
            //do nothing
        }
        else if (message_buffer[0] == '2') {
            split_str(27, strlen(message_buffer) - 2, message_buffer, message_buffer_2);
            strcpy(username, message_buffer_2);
            split_str(1, strlen(message_buffer), message_buffer, message_buffer_2);
            draw_new(global_display, message_buffer_2);
        }
        else if (message_buffer[0] == '3') {
            split_str(1, strlen(message_buffer), message_buffer, message_buffer_2);
            draw_new(global_display, message_buffer_2);
            split_str(31, strlen(message_buffer) - 1, message_buffer, filename);

            sprintf(message_buffer_2, "downloaded/%s", filename);
            fp = fopen(message_buffer_2, "w+");
            error = 1;
            do {
                recieve_file(message_buffer);
                fprintf(fp, "%c", message_buffer[1]);
            }while(message_buffer[0] != '5');
            fclose(fp);

            draw_new(global_display, "system>> Downloaded file success.");

        }

        //Reset value in message_buffer for check while loop's condition
        strcpy(message_buffer, "");
        strcpy(message_buffer_2, "");

    }

    return 0;

}
HDTBReturnItem NetworkClient::processRequest(std::vector<std::string> args)
{
/*
    std::cout << "ARGUMENTS IN" << std::endl;
    for(std::vector<std::string>::iterator it = args.begin();
        it != args.end(); ++it)
    {
        std::cout << "ARG :" << *it << std::endl;
    }
*/

    history.push(args);

    // Make sure command exists
    if(commands.find(args[0]) == commands.end())
    {
        // Call to super class
        displayAvailableCommands();

        for(std::vector<std::string>::iterator it = args.begin();
            it != args.end(); ++it)
        {
            std::cout << "ARG :" << *it << std::endl;
        }

        return errorHandler.generateGenericError("Unknown command");
    }

    //Handle command
    int c = 0;
    switch(commands[args[0]])
    {

    case HDTB_CLIENT_LOAD:
        if (args.size() != 3)
        {
            std::cout << " CLIENT_LOAD " << std::endl;
            return HDTBReturnItem(HDTB_RETURN_BAD, "not enough args -setinfo <<");
        }

        // Make sure port is int
        if( !( c = atoi(args[2].c_str())) )
            return HDTBReturnItem(HDTB_RETURN_BAD, "invalid port");

        return setConnectionInfo(args[1], c);
        break;

    case HDTB_CLIENT_SEND:
    {
        if (args.size() != 2)
            return HDTBReturnItem(HDTB_RETURN_BAD, "not enough args -fsend");

        HDTBReturnItem t = send(args[2]);
        if(t.retCode == HDTB_RETURN_GOOD)
        {
            if(recieve_data())
            {
                std::cout << "\t Recieved data back from " << connectionInfo.address << std::endl;
                t.message = statusInfo.data_received;
                t.comm = 'R';
            }
            else
            {
                std::cout << "\t Didn't recieve any data back from " << connectionInfo.address << std::endl;
                t.comm = 'N';
            }
            return t;
        }
        else
            return t;

        return send(args[2]);
        break;
    }

    case HDTB_CLIENT_COMM:
        return initiateComms();
        break;

    case HDTB_CLIENT_BLIND_COMM:
        return initiateBlindComms();
        break;

    case HDTB_NETWORK_CMD_KILL:
        return kill();
        break;

    default:
        return errorHandler.generateGenericError("Default accessed in command switch");
        break;
    }
    return errorHandler.generateGenericError("Uncaught return");
}