Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
  }
}
Exemplo n.º 3
0
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();
	}
}