Вот я думаю: а не рассказать ли о этих штуках, а? Откуда берутся "нестандартные" протоколы в KDE? Мы знаем file: http: ftp: А zip: tar: и прочее? Те, кто знает о слейвах - читают и следят за ошибками, а кто не знает - учится. И так, KDE Input/Output slave предназначен для обработки некоего URL с помощью приложения-обработчика. В качестве примера, создадим проект "KWasmFinger" и зарегистрируем протокол aboutme: 1. Прежде, чем приступать к программированию протокола, мы должны создать конфигурационный файл, который его опишет. Легче всего протокол программируется в среде KDevelop, так как там есть уже скелет стандартного протокола. Код (Text): ФАЙЛ kaboutme.protocol ----------- [Protocol] exec=kio_kaboutme -- Это - наше приложение-обработчик protocol=aboutme -- имя протокола (типа file:, http:, то есть в адресной строке мы будем вводить aboutme:) input=none output=stream reading=true defaultMimetype=text/html Icon=remote Description=A kioslave for kaboutme --Думаю, остальное будет ясно - там идут описания на разных языках 2. У нас в распоряжении есть 2 файла. kaboutme.h - заголовочный файл с описателем касса kio_kaboutmeProtocol, который наследует свойства и методы от KIO::SlaveBase и kaboutme.cpp - собственно, файл, с которым нам придется работать. Основная функция обработки данных - virtual void get(KURL &url) Код (Text): Пусть наш протокол определяет Finger информацию о пользователе, если URL=aboutme:user, где user - имя пользователя в базе MySQL ------------------- void kio_kaboutmeProtocol::get(const KURL& url ) { // Вычленим имя user из адреса QString ur= url.prettyURL(); QString UserName = ur.section (":",-1); // Выведем информацию в статусную строку (это внизу окна) infoMessage(i18n("Привет. Ты запросил информацию --> %1 Щас посмотрим...").arg( UserName.latin1() ) ); // Работаем с HTML // Кстати, обрабатывать и выводить можно ЛЮБЫЕ данные, даже графику и видео! mimeType("text/html"); // Обычный заголовок QString theData = QString("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf8\" /><title>Фингер слэйв!</head></head><h1>Вы запросили информацию о %1</h1><hr />").arg(UserName.latin1()); //Выводим пользователю data(QCString(theData.latin1())); // Коннектимся к базе MYSQL mysql; mysql_init(&mysql); mysql_real_connect(&mysql,"localhost","root","","wasmfinger",0,NULL,0); mysql_select_db (&mysql, "wasmfinger"); QString QQuery = QString ("SELECT * FROM users where CN=\"%1\";").arg(UserName.latin1()); const char* Query = QQuery.latin1(); // Я не писал тут ни циклов, ни каких-либо проверок. Все работает в "Учебном режиме" mysql_query (&mysql,Query); MYSQL_RES* result; result = mysql_store_result(&mysql); MYSQL_ROW ok; ok = mysql_fetch_row (result); // Выводим инфо о юзере на экран QString info = QString ("<b>Полное имя:</b> %1<br /><b>e-mail:</b> %2<hr /> ").arg(ok[1]).arg(ok[2]); data (QCString (info.latin1())); mysql_close(&mysql); // Пустая строка закрывает поток data(QByteArray()); finished(); } Думаю, разобраться будет не трудно
Немного добавлю. Если кто-то желает работать с каталогами --- inode/directory ему в помощь. Это такой MIME тип Да да! Каталог можно скачать с Интернета. Только размер у него будет... 4 килобайта + длина его имени. С помощью слэйва можно даже диск создать. Только операции затрахаешься описывать (чтение, просмотр, запись)