static gint _fetch_log(JournalReader *self) { gint msg_count = 0; gint result = 0; self->immediate_check = TRUE; while (msg_count < self->options->fetch_limit && !main_loop_worker_job_quit()) { gint rc = journald_next(self->journal); if (rc > 0) { Bookmark *bookmark = ack_tracker_request_bookmark(self->super.ack_tracker); _fill_bookmark(self, bookmark); msg_count++; if (!_handle_message(self)) { break; } } else { self->immediate_check = FALSE; /* rc == 0 means EOF */ if (rc < 0) { msg_error("Error occurred while getting next message from journal", evt_tag_errno("error", errno)); result = NC_READ_ERROR; } break; } } return result; }
void mls_elope_event_handler(struct mls_evt *evt, void *tag) { int ret = 0; struct mls_el_ctx *ctx = (struct mls_el_ctx *)tag; struct mls_elope *elope = mls_el_get_elope(ctx); struct mls_elope_packet *req, *res; if ((ret = _recv_request(elope, &req)) != 0) { /* Invalid message, don't need response */ LOG_ERR(MLS_LOG_DEFAULT_MODULE, "mls_elope_event_handler(1,%d)\n", ret); goto out; } if ((ret = _handle_message(ctx, req, &res)) != 0) { /* don't need response */ LOG_ERR(MLS_LOG_DEFAULT_MODULE, "mls_elope_event_handler(2,%d)\n", ret); goto out; } if ((ret = _send_response(elope, res)) != 0) { LOG_ERR(MLS_LOG_DEFAULT_MODULE, "mls_elope_event_handler(3,%d)\n", ret); goto out; } out: return; }
void GameNetConnection::_message_callback(int sender, const char* msg, size_t len, bool queue_messages) { message_t type; // Fill buffer with message fill_msg_buffer(_message_buffer, msg, len); if (queue_messages || !_handle_message(sender, *_message_buffer)) { _delayed_messages.push_back(QueuedMessage(_message_buffer, sender)); _message_buffer = new SerializeBuffer(SerializeBuffer::plain_buffer()); } }
void GameNetConnection::poll_messages(int timeout) { if (_connection) { for (int i = 0; i < _delayed_messages.size(); i++) { QueuedMessage& qm = _delayed_messages[i]; if (_handle_message(qm.sender, *qm.message)) { delete qm.message; _delayed_messages.erase(_delayed_messages.begin() + i); i--; } } _connection->poll(gamenetconnection_consume_message, (void*)this, timeout); } }
int GameNetConnection::poll_messages(int timeout) { if (_connection) { for (int i = 0; i < _delayed_messages.size(); i++) { QueuedMessage& qm = _delayed_messages[i]; if (_handle_message(qm.sender, *qm.message)) { delete qm.message; _delayed_messages.erase(_delayed_messages.begin() + i); i--; } } perf_timer_begin("*** NETWORK POLLING ***"); int polln = _connection->poll(gamenetconnection_consume_message, (void*) this, timeout); perf_timer_end("*** NETWORK POLLING ***"); return polln; } return 0; }