Beispiel #1
0
void MessageProcessor::processSocket()
{
    char* msg = zstr_recv(zmqSocket_);
    if (msg == nullptr) {
        Log::Error("zeromq recv() failed\n");
        return;
    }
    std::string requestString(msg);
    zstr_free(&msg);

    std::string responseString;

    bool error = processMessage(requestString, responseString);

    if (error) {
        responseString = "";
    }

    int rc = zstr_send(zmqSocket_, responseString.c_str());

    if (rc != 0) {
        Log::vError("MessageProcessor: failed to send response\n"
                    "request:\n%s\n\n"
                    "response:\n%s\n\n",
                    requestString.c_str(), responseString.c_str());
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Sends the correct form of the server status value back to XML, HTML, TEXT, and PNG client requests.
/// \param serverState The server status value to send.
/// \param pRequestHeader The request header.
/// \param client_socket The socket used for the request
//////////////////////////////////////////////////////////////////////////////////////////////////////////
static void HandleServerStatusResponse(GRAPHICS_SERVER_STATE serverState, HTTPRequestHeader* pRequestHeader, NetSocket* client_socket)
{
    char* strResquest = pRequestHeader->GetUrl();

    gtASCIIString requestString(strResquest);

    gtASCIIString xmlSubString(".xml");

    if (requestString.find(xmlSubString, 0) != -1)
    {
        SendServerStatusMessageAsXML(serverState, client_socket, requestString);
        return;
    }

    gtASCIIString htmlSubString(".html");

    if (requestString.find(htmlSubString, 0) != -1)
    {
        SendServerStatusMessageAsHTML(serverState, client_socket);
        return;
    }

    gtASCIIString pngSubString(".png");

    if (requestString.find(pngSubString, 0) != -1)
    {
        SendServerStatusMessageAsIMG(serverState, client_socket);
        return;
    }

    gtASCIIString ddsSubString(".dds");

    if (requestString.find(ddsSubString, 0) != -1)
    {
        SendServerStatusMessageAsIMG(serverState, client_socket);
        return;
    }

    gtASCIIString txtSubString(".txt");

    if (requestString.find(txtSubString, 0) != -1)
    {
        SendServerStatusMessageAsHTML(serverState, client_socket);
        return;
    }

    // Assume all other commands (without an extension) are text commands
    gtASCIIString noSubString(".");

    if (requestString.find(noSubString, 0) == -1)
    {
        SendServerStatusMessageAsHTML(serverState, client_socket);
        return;
    }

    return;
}