bool DCCChatConnection::read_connection_data(clan::TCPConnection &connection, IRCRawString &read_line) { while (true) { char buffer[16 * 1024]; int data_read = connection.read(buffer, 16 * 1024); if (data_read == -1) return true; if (data_read == 0) // EOF from server return false; int start_pos = 0; for (int i = 0; i<data_read; i++) { if (buffer[i] == '\n') { read_line.append(buffer + start_pos, i - start_pos + 1); start_pos = i + 1; queue_line(read_line); read_line.clear(); } } read_line.append(buffer + start_pos, data_read - start_pos); } }
bool IRCConnection::read_connection_data(uicore::TCPConnection &connection, IRCRawString &read_line) { while (true) { char buffer[16 * 1024]; int data_read = connection.read(buffer, 16 * 1024); if (data_read == -1) return true; else if (data_read == 0) // EOF from server return false; int start_pos = 0; for (int i = 0; i < data_read; i++) { if (buffer[i] == '\n') { read_line.append(buffer + start_pos, i - start_pos + 1); start_pos = i + 1; queues.push_received(read_line); uicore::RunLoop::main_thread_async(uicore::bind_member(this, &IRCConnection::process)); read_line.clear(); } } read_line.append(buffer + start_pos, data_read - start_pos); } }
bool IRCConnection::read_connection_data(clan::TCPConnection &connection, IRCRawString &read_line) { char buffer[16*1024]; int data_read = connection.read(buffer, 16*1024, false); if (data_read == 0) // EOF from server { connection.disconnect_graceful(); return false; } int start_pos = 0; for (int i=0; i<data_read; i++) { if (buffer[i] == '\n') { read_line.append(buffer+start_pos, i-start_pos+1); start_pos = i+1; queues.push_received(read_line); set_wakeup_event(); read_line.clear(); } } read_line.append(buffer+start_pos, data_read-start_pos); return true; }