www.mudconnector.su
https://forum.mudconnector.su/

MUD на нескольких портах
https://forum.mudconnector.su/viewtopic.php?f=14&t=83
Страница 1 из 1

Автор:  prool [ Сб янв 31, 2009 7:33 pm ]
Заголовок сообщения:  MUD на нескольких портах

Знатоки кодовой базы Circle и его клонов (например, Былин), ткните меня, пожалуйста, мордой в фрагмент кода, в котором можно реализовать, чтобы MUD был доступен не по одному порту, а по нескольким. Жопой чувствую, что это список дескрипторов в модуле comm.cpp. Кроме того от безысходности я подумал, что можно применить внешнюю утилитку типа входящего прокси, который будет транслировать запросы на порты из списка в один конкретный порт на localhost

Автор:  KadVar [ Вт июл 28, 2009 2:21 pm ]
Заголовок сообщения:  Re: MUD на нескольких портах

Помню что делали средствами ОС.

Автор:  ruffina [ Ср июл 29, 2009 9:56 am ]
Заголовок сообщения:  Re: MUD на нескольких портах

prool писал(а):
фрагмент кода, в котором можно реализовать, чтобы MUD был доступен не по одному порту, а по нескольким.

comm.c, ф-ии init_socket(), game_loop(), process_io(). Сейчас они реализованы для одного порта, соответственно создается один сервер-сокет и работают только с ним.
Переделать надо так, чтобы инициализировали и работали с несколькими сервер-сокетами. Грубо говоря:
Код:
void init_game(uint port) // сюда передавать не один номер порта, а несколько
{
    socket_t mother_desc; // вместо одного сервер-сокета будет список. его для удобства доступа можно сделать глобальным
    ....
    mother_desc=init_socket(port); // вызвать для нескольких портов и запомнить результаты
    ...
    game_loop(mother_desc);  // сюда передать все
    ....
    CLOSE_SOCKET(mother_desc); // не забыть закрыть все
}

Код:
void game_loop(socket_t mother_desc) // в параметры передавать все
{
   ...
   FD_SET(mother_desc, &input_set); // метить всеми
   ....
   process_io(...,mother_desc,...); // передать в параметры все
}

Код:
void process_io(...)
{
     ...
     if (FD_ISSET(mother_desc, &input_set))   // повторить для
            new_descriptor(mother_desc);        //  каждого из списка
}


Пока писала, нашла патч для циркуля, собственно, там примерно то же самое
http://developer.circlemud.org/contrib/ ... orts.patch

Автор:  prool [ Ср июл 29, 2009 10:52 am ]
Заголовок сообщения:  Re: MUD на нескольких портах

О, спасибо, буду делать

Автор:  KadVar [ Ср июл 29, 2009 11:42 am ]
Заголовок сообщения:  Re: MUD на нескольких портах

Я уже стар и меня может глючить, но повторяю еще раз: как-то настройками ОС мы это делали...
Вроде бы. Погодите писать 1-2 недели и буду с этим разбираться в любом случае.

Автор:  prool [ Ср июл 29, 2009 11:53 am ]
Заголовок сообщения:  Re: MUD на нескольких портах

А можно и так и так. Я не копался, но настройками xinetd (у меня FreeBSD) наверняка можно сделать проброс любого порта на мой мадовский порт 8888. Можно заставить примерно то же самое делать Апача или даже squid (вот извращение-то!)

Можно еще поставить программу-редиректор (написать ее опытному программисту пол часа (мне - неделя)), но и готовые вполне должны где-то быть

И наконец можно сделать это на уровне кода circle

Я буду делать, как мне покажется проще, потому что ленивый я. Как сделаю, напишу

Автор:  prool [ Чт авг 20, 2009 3:33 pm ]
Заголовок сообщения:  Re: MUD на нескольких портах

ruffina писал(а):
Пока писала, нашла патч для циркуля, собственно, там примерно то же самое
http://developer.circlemud.org/contrib/ ... orts.patch


Спасибо! Всё оказалось просто и сразу заработало:

http://community.livejournal.com/virtus ... 34671.html

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/