LINUX.ORG.RU

PPP over Jabber


1

1

После прочтения http://www.linux.org.ru/jump-message.jsp?msgid=2444108 посетила мою голову безумная мысль реализовать такую вот вещь. Питонов и прочих перлов не знаю, поэтому писал на том, что знаю. На скриншоте код (не пинать! большая часть написана в районе 2 часов ночи) и прога за работой. Пинг в районе 30-40 миллисекунд - вполне приемлимо :)

>>> Просмотр (1400x1050, 186 Kb)

anonymous

Проверено: Shaman007 ()
Ответ на: комментарий от anonymous

> Там кроме jabber-бота - только работа с файловыми дескрипторами, на чём её ещё писать?

Наверное, я сильно разбалованный, но от C++ хотелось увидеть нечто, лучшее чем

    int ret = fork();
    if (ret < 0) {
        perror("fork");
        return 1;
    } else if (ret == 0)
        system(command.c_str());
...
            fd_set rset, eset;
            FD_ZERO(&rset);
            FD_ZERO(&eset);
            FD_SET(readfd,&rset);
            tmo.tv_sec = 0;
            tmo.tv_usec= 5000;
            int ret = select(readfd + 1,&rset,NULL,&eset,&tmo);

ShprotX
()
Ответ на: комментарий от anonymous

как как... завести кучу классов, с наследованием, виртуальными функциями, обернуть все в try catch, построить систему на исключениях. придется конечно по2.72баться все это отлаживая, но зато пипец масштабируемость будет. она никогда не будет использоваться эта масштабируемость, но зато она будет и фанатики с++ будут писать кипятком и кончать на код.

PS: автор молодец, сделал больше многих здешних критиков-крикунов.

anonymous
()
Ответ на: комментарий от anonymous

Не надо так преувеличивать. И потом, мой последний собеседник - не "критик-крикун", он задаёт совершенно нормальные вопросы, а ты ещё спугнёшь его ненароком.

anonymous
()

> Питонов и прочих перлов не знаю, поэтому писал на том, что знаю.

Какой-то незнакомый у тебя диалект бэйсика. Что это за версия такая?

VladimirP ★★★★
()
Ответ на: комментарий от anonymous

> А как надо было писать?

PipeConduit readpipe, writepipe;
char[] cmd;

if (argc != 5)
{
	usage();
	return 0;
}
readpipe = new PipeConduit;
writepipe = new PipeConduit;
Stdout ("Connecting...").newline;
Bot b = new Bot (readpipe.source, argv[1], argv[2], argv[3]);
Stdout ("Connected").newline;
suffix = Format (" <&{} >&{}", readpipe.sink.fileHandle, writepipe.source.fileHandle);
if (argv[4] == "-master")
	cmd = "pppd updetach noauth passive notty ipparam vpn 10.0.0.1:10.0.0.2";
else
	if (argv[4] == "-slave")
		cmd = "pppd nodetach notty noauth";
	else
	{
		usage();
		return 0;
	}
cmd ~= suffix;
int ret = fork();
if (ret < 0)
	throw new Exception ("fork");
else if (ret == 0)
	system (cmd);
else
	while (1)
	{
		b.recv()
		PollSelector selector = new PollSelector;
		selector.open;
		selector.register(writepipe.sink, Event.Read);
		uint eventCount = selector.select(Msec(5000));
		if (eventCount > 0)
		{
			char[] buf = new char[1024];
			if (writepipe.sink.read(buf) != Eof)
				b.send(buf);
	}

И назову я этот язык D, а стандартную библиотеку звать будут Tango.

ShprotX
()
Ответ на: комментарий от ShprotX

> И назову я этот язык D

То есть ты хочешь сказать, что в языке D (про который я только слышал краем уха) можно использовать библиотеки, написанные на C++ (которые хороши тем, что их до фига)? А всякие там Qt тоже можно? Если так, то стоит к нему серьезно присмотреться.

anonymous
()
Ответ на: комментарий от anonymous

> То есть ты хочешь сказать, что в языке D (про который я только слышал краем уха) можно использовать библиотеки, написанные на C++

Нет, только на Си

tailgunner ★★★★★
()
Ответ на: комментарий от ShprotX

А ответом на вопрос "почему FD_SET select etc. на чистом C" будет: ничего кроме C и C++ я не знаю, как не знаю и плюсовых оберток для работы с файловыми дескрипторами, так что мне показалось проще скопипастить практически готовый сишный код (не помню уже, откуда).

anonymous
()
Ответ на: комментарий от anonymous

> То есть ты хочешь сказать, что в языке D (про который я только слышал краем уха) можно использовать библиотеки, написанные на C++ (которые хороши тем, что их до фига)? А всякие там Qt тоже можно? Если так, то стоит к нему серьезно присмотреться.

Qt, как надстройка на Glib, является чисто плюсовой либой, поэтому использование ее в других языках затруднено.

PS: let the flame begin

ShprotX
()
Ответ на: комментарий от anonymous

> Тогда мне интересно ещё, как будет выглядеть jabber-бот на D

Хз, я сначала предпочел переписать все в C, заодно нашел багу в libloudmouth, которая, оказывается, уже пару месяцев известна.

А вообще, для C++ написано столько говн... библиотек, что аж страшно становится, ведь идет (скорее, уже произошло) неявное привязывание разработчиков к C++.

ShprotX
()
Ответ на: комментарий от anonymous

Я понятия не имею, как работать с файловыми дескриптормаи на C++, более того, сам C++ я не знаю и не люблю. C, Python, D, Delphi - пожалуйста, но C++ - такая какашка... помесь муравья с лошадью.

ShprotX
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.