RabbitMQConnection::~RabbitMQConnection() { int fd; if (conn == NULL) { GST_DEBUG ("service already stopped"); return; } fd = amqp_socket_get_sockfd (socket); /* Errors are ignored during close */ if (!closeOnRelease) { /* close socket */ close (fd); } amqp_channel_close (conn, 1, AMQP_REPLY_SUCCESS); amqp_connection_close (conn, AMQP_REPLY_SUCCESS); amqp_destroy_connection (conn); if (closeOnRelease) { /* inform remote side that we are done */ shutdown (fd, SHUT_WR); } conn = NULL; }
RabbitMQConnection::RabbitMQConnection (const std::string &address, int port) : address (address), port (port) { conn = amqp_new_connection(); socket = amqp_tcp_socket_new (conn); if (!socket) { throw Glib::IOChannelError (Glib::IOChannelError::Code::FAILED, "Cannot create TCP socket"); } if (amqp_socket_open (socket, address.c_str(), port) ) { throw Glib::IOChannelError (Glib::IOChannelError::Code::FAILED, "Cannot open TCP socket"); } makeSocketLinger (amqp_socket_get_sockfd (socket) ); exception_on_error (amqp_login (conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"), "Loging in"); amqp_channel_open (conn, 1); exception_on_error (amqp_get_rpc_reply (conn), "Opening channel"); }
int amqp_get_sockfd(amqp_connection_state_t state) { return state->socket ? amqp_socket_get_sockfd(state->socket) : -1; }
int RabbitMQConnection::getFd() { return amqp_socket_get_sockfd (socket); }