void amqp::Sender::send(IMessage const &message, Address const &address) { pn_data_t *pnmessage_body = NULL; pn_message_t *pnmessage = pn_message(); if (pnmessage == NULL) { throw std::exception("ERROR: Message could not be created."); } pn_message_set_address(pnmessage, address.toString().c_str()); _addMetaToMessage(pnmessage, message); pnmessage_body = pn_message_body(pnmessage); pn_data_put_binary(pnmessage_body, pn_bytes(message.getSize(), message.getBytes())); pn_messenger_put(m_messenger, pnmessage); if (isError()) { _throwError(); } // To avoid traffic flud and speed up the solution better to use blocking scokets in tracking mode if (isTraking()) { Log("Sending messages to %s\n", address.toString().c_str()); m_tracker = pn_messenger_outgoing_tracker(m_messenger); pn_messenger_send(m_messenger, -1); // sync } else { pn_messenger_send(m_messenger, 1); // async } if (isError()) { _throwError(); } _checkTracking(); pn_message_free(pnmessage); }
static void _throwGLError(const char* function) { GLenum error = glGetError(); if (error != GL_NO_ERROR) { const char* errorString; switch ( error ) { case GL_INVALID_ENUM: errorString = "invalid enumerant"; break; case GL_INVALID_VALUE: errorString = "invalid value"; break; case GL_INVALID_OPERATION: errorString = "invalid operation"; break; case GL_STACK_OVERFLOW: errorString = "stack overflow"; break; case GL_STACK_UNDERFLOW: errorString = "stack underflow"; break; case GL_OUT_OF_MEMORY: errorString = "out of memory"; break; case GL_TABLE_TOO_LARGE: errorString = "table too large"; break; case GL_INVALID_FRAMEBUFFER_OPERATION: errorString = "invalid framebuffer operation"; break; // case GL_TEXTURE_TOO_LARGE: errorString = "texture too large"; break; default: errorString = "unknown GL error"; break; } _throwError(function, errorString); } }
void amqp::Sender::_checkTracking() { if (!isTraking()) return; pn_status_t status = PN_STATUS_UNKNOWN; status = pn_messenger_status(m_messenger, m_tracker); switch (status) { case PN_STATUS_UNKNOWN: Log("Message status PN_STATUS_UNKNOWN\n"); break; case PN_STATUS_PENDING: Log("Message status PN_STATUS_PENDING\n"); break; case PN_STATUS_ACCEPTED: Log("Message status PN_STATUS_ACCEPTED\n"); break; case PN_STATUS_REJECTED: Log("Message status PN_STATUS_REJECTED\n"); break; case PN_STATUS_MODIFIED: Log("Message status PN_STATUS_MODIFIED\n"); break; case PN_STATUS_RELEASED: Log("Message status PN_STATUS_RELEASED\n"); break; case PN_STATUS_ABORTED: Log("Message status PN_STATUS_ABORTED\n"); break; case PN_STATUS_SETTLED: Log("Message status PN_STATUS_SETTLED\n"); break; default: Log("Message status UNRECOGNIZED (%d)\n", (int)status); break; } Log("Final send status is: "); if (PN_STATUS_ACCEPTED == status) { Log("successful!\n"); } else if (PN_STATUS_REJECTED == status) { Log("rejected by the broker\n"); } else if (PN_STATUS_PENDING == status) { Log("Giving up, assuming send failed\n"); } else if (PN_STATUS_ABORTED == status) { Log("failed, never sent on network\n"); } else { Log("unclear\n"); } Log("CALL pn_messenger_settle... "); int err = pn_messenger_settle(m_messenger, m_tracker, PN_CUMULATIVE); Log("RETURNED %d\n", err); if (err != 0) { _throwError(); } }