Задать вопрос
  • Как сделать многопоток сокетов?

    @MarkusD Куратор тега C++
    Артём Белых, да. Код просто не годится.
    У тебя сокеты должны быть одноранговыми. Этапов в приложении не должно быть.
    Сейчас у тебя сперва этап прослушивания и соединения, а следом - этап взаимодействия. Это должны быть не этапы, а независимые друг от друга реакции на состояние сокетов.
    Если в прослушивающем сокете есть запросы на соединение, должна запуститься функция установки соединения и добавления новой сессии в список сессий.
    Если на сокете соединения есть что прочитать, должна запуститься функция сетевой коммуникации, которая вычитает трафик в циклический буфер и разберет его на пакеты/команды с последующим запуском уже их обработчиков.
    Сессии у тебя могут быть разные. Чат-сессия, файловая сессия, голосовая сессия, передача видео и так далее. Соответственно и обработчики трафика в рамках сессии тоже могут быть разные. А могут быть и одинаковые, если ты правильно поймешь модель OSI. И в любой момент времени у тебя получится так, что сразу несколько сокетов будут иметь доступный входящий трафик. И ты уже сразу будешь знать какие обработчики каких сессий нужно вызвать.
    Понятно тебе станет и то, как на базе сокетов реализовать модель вытесняющего взаимодействия. А следом ты сможешь разобраться и с тем, как с одного потока дальше перейти к пулу потоков со все той же моделью вытеснения.

    Только не спрашивай как это все сделать. Читай книги. Тут обитает очень много людей, каждый из которых расскажет тебе что и как надо делать. Но сам ты так и не сможешь понять причин почему делать надо именно так, пока не изучишь самые основы самостоятельно.
    В книге Снейдера есть ссылки на книги Стивенса и Комера. В этих книгах уже столько подробностей по сетевым коммуникациям, что мне и сказать будет уже нечего. Вообще у Снейдера очень богатый список дополнительной литературы. Для сетевого программиста это очень важная книга.
  • Как сделать многопоток сокетов?

    @MarkusD Куратор тега C++
    Артём Белых, не, вообще не так.
    Тебе стоит почитать Йона Снейдера: "Эффективное программирование TCP/IP". Почитаешь - поймешь всю глубину своего незнания в настоящий момент.

    Тебе не нужно по потоку на каждый сокет сервера. Тебе нужно настроить сокеты и задать такую архитектуру сервера, при которой он в один поток будет обрабатывать тысячи подключений без особой нагрузки на ядро процессора.
    У меня еще в нулевых на однопоточном ММО-сервере жили до 3к уникальных игроков в сутки. Средний онлайн в сутки был больше 1к, а общая популяция игроков переваливала за полмиллиона. И это все работало чисто на неблокирующих TCP-сокетах и select ровно в одном потоке.
  • Как сделать многопоток сокетов?

    @MarkusD Куратор тега C++
    Артём Белых , подскажи. А зачем тебе в описанных условиях многопоточность?
  • Почему в Си после main() не ставят ;?

    Deita, а почему, по твоему мнению, после main должен стоять знак точки с запятой?
    Что этот знак, по твоему мнению, означает?
  • Как практиковаться в программировании?

    @MarkusD Куратор тега C++
    Meised, вот смотри. Я задал тебе короткий вопрос. Ты сперва выдал ответ, а потом пошел думать за меня и отвечать уже не мне, а самому себе. С таким подходом тебе в разработке делать вообще нечего.
    Для чего и почему я задаю свои вопросы, спрашивать надо только у меня. Я задал свой вопрос для того, чтобы увидеть фундамент, на котором ты строишь свое обучение. Фундамента у тебя нет, а отсюда нет и обучения.

    По описанию в твоем вопросе и по написанному во всех твоих комментариях видно только одно. Ты никогда не учился программированию и по сути так ничего и не умеешь. Все твои потуги никак не отличаются от все тех же игр. Хотя нет. Как разработчик игр, я могу сказать что в играх люди очень часто учатся чему-то полезному для их жизни. У тебя ситуация больше похожа на воскресный запой. Бесполезная трата времени.
    Разработка ПО - это не про написание буковок в каком-то порядке. Чтобы всего лишь начать в разработке, нужно уже быть квалифицированным инженером. Написание кода - это рядовой навык переводить инженерные решения в слова на каком-либо языке. А основной навык инженера - это способность мыслить системно в состоянии длительной и полной фрустрации. И у тебя этого навыка нет вообще, опять же, судя по твоим собственным словам. Фрустрации ты банально боишься.
    Инженер владеет инструментами и умеет их комбинировать для решения поставленной задачи. У тебя нет даже самых базовых инструментов, которые осваиваются еще в школе. Да, та же математика и прочие школьные дисциплины.
    Системное мышление позволяет видеть комплексность задачи. Ты думал что станешь хакером, это слишком высокоуровневая и комплексная задача, чтобы напрямую браться за ее решение. А системного мышления для декомпозиции этой задачи у тебя нет.

    Вот почему ты находишься там, где ты находишься. У тебя нет фундамента, а ты пробуешь взяться за что-то с самой макушки и тешишь себя недостижимыми целями.
  • Как рисовать png иконки без изменения масштаба?

    ditrix , расскажи как рисуешь сейчас.
    Какая логика у вывода карты, какая логика у обработки ввода пользователя?
  • Как практиковаться в программировании?

    @MarkusD Куратор тега C++
    Meised , так а зачем ты пошел на поводу у своего друга и начал учить программирование?
    У друга свои тараканы. Тебе с этого занятия какой толк?
  • Почему не вижу отрисованную область?

    Викентий , ты меня извини, но что людям с этим кодом делать?

    При легком повороте камеры ты видишь часть фигуры, а так не видишь. Это значит что и сама камера у тебя не настроена на отображение пространства, в котором ты рисуешь объекты.
    Хорошо поставленный вопрос дает 50% верного решения. Это значит что тебе нужно локализовать проблему в своем коде, желательно до минимального блока кода. Или у тебя ошибка в координатах пространства, в котором ты рисуешь фигуры, или у тебя проблема в настройке камеры. Решать только тебе, как автору.

    Давай начнем с этого. Измени код в вопросе, локализуй ошибку. А дальше хоть я помогу, хоть еще кто.
  • Как происходит обмен с БД данными в Lineage2?

    Владислав Лысков, 2003-й :)
    Она вышла в 2003м. Ragnarok Online вышла в 2002м. Rising Force Online - в 2004м. Cabal Online - в 2005м.

    И у них у всех +/- схожий протокол. TCP на 4-м уровне OSI, командная структура на 6-м уровне, схожее строение пакета, примерно схожие ограничения по приему-передаче. Примерно схожий расход трафика.

    И +/- одинаковые макароны в сетевой части, полное отсутствие понимания модели OSI в коде и, как следствие, характерная для корейского кода простота взлома протокола. Мне в те года, как игроку, за это было весьма обидно. Мне, как разработчику ММО проектов, сейчас весьма тяжело наставлять молодых ребят не то чтобы не повторять тех ошибок Корейцев, а хотя бы не использовать JSON с HTTP в сетевых проектах.
  • Как происходит обмен с БД данными в Lineage2?

    Владислав Лысков, чему и сколько времени лежать на земле - определяется конфигурацией конкретного сервера.
    Сам сервер из себя представляет резидентную специализированную базу, но это только если рассуждать терминологически.
    На деле же функционал резидентной базы, функции чтения и записи данных, игровые механики и сетевой протокол настолько переплетены между собой и весь этот клубок неделим по своей сути, что лично я бы этот корейский код выкинул бы с диким позором. Он не выдерживает никакой критики.
    Традиционная БД там используется как средство бекапа посчитанных данных из резидентной. И дроп данных там идет очень часто, буквально на каждом такте мира для состояния каждой измененной за этот такт сущности.
    Загрузку из традиционной БД сервер выполняет, обычно, по требованию. Но часть данных, например база информации о предметах, какие они вообще есть в мире и какие у них свойства, или расы/навыки/классы со всей информацией о них, загружается на этапе запуска и конфигурирования сервера.
    После логоффа игрока его сущность еще какое-то время остается в памяти сервера. Чисто на случай повторного быстрого входа. Потому что тянуть игрока из традиционной БД дороже чем подержать лишние 30 минут в резидентной после его выхода. Тут важнее скорость входа игрока и снижение нагрузки на традиционную БД.
  • Не могу, понять как компьютер перемещает свой знак?

    @MarkusD Куратор тега C++
    mrbudson, по сути это не ИИ. Даже не IA (Interactive Agent).
    Это вот так автор книги реализовал тривиальный BFS.

    Книга не про алгоритмы анализа и не про агентов. Ее задача в том, чтобы заинтересовать тебя в изучении и практике программирования.
  • Не могу, понять как компьютер перемещает свой знак?

    @MarkusD Куратор тега C++
    mrbudson, одного "спасибо" тут мало.
    Если ответ решает твой вопрос, не забывай ставить отметку о решении.
  • Не могу, понять как компьютер перемещает свой знак?

    @MarkusD Куратор тега C++
    mrbudson, "Перемещение фигуры" - это высокоуровневый термин.
    Компьютер фигуру перемещает терминологически. Фактически же компьютер попросту затирает фигуру в месте, где ее поставил, но не получил выигрыша.

    С моей т.з. в этом коде шибка. board[move] = EMPTY; должно выполняться только если !found. Но, вероятнее всего в этом коде только проба шага и анализ на выигрыш, а фактический шаг должен делаться в коде дальше по тексту книги.
  • Как обеспечивается совместимость динамических библиотек при ликовке в рантайме?

    @MarkusD Куратор тега C++
    Сергей Соловьев, ответом на твой вопрос будет сама же ОС у тебя. Даже к тривиальному hello world будет подвязано с пару десятков динамических библиотек, каждая из которых не просто другим транслятором может быть собрана, а на другом языке написана.
    Я вот честно даже начинать углубляться в терминологию не хочу. Вопросы подобного уровня, Сереж, показывают что ты даже не начинал разбираться в этой теме. Это не совсем хорошо, потому что для объяснения мне надо написать много того, что ты и сам способен узнать из открытых источников.
    А достигается описанный выше эффект соглашениями. Соглашением об именовании, соглашением о вызовах или соглашением об управлении памятью, в качестве примера. Таких соглашений много и все они нестандартны относительно языков.

    Динамическое связывание - это мост. Нельзя просто взять и от балды загрузить себе какую-то произвольную библиотеку. Сперва нужно гарантировать что твой код выполняет принятые библиотекой соглашения. Они, обычно, описываются в сопроводительной документации к библиотеке.
    Распространять свой софт описанным способом ты, конечно, можешь. Тебе надо просто описать принятые твоей библиотекой соглашения.
  • Как обеспечивается совместимость динамических библиотек при ликовке в рантайме?

    @MarkusD Куратор тега C++
    MVV, мне так не показалось.
    Потому что конкретно по этому вопросу между C и C++ разницы нет. И не только между этими языками.
  • Как обеспечивается совместимость динамических библиотек при ликовке в рантайме?

    @MarkusD Куратор тега C++
    MVV, ты этими словами хочешь сказать что C++ не поддерживает стандарт и функциональность C?
  • Как обеспечивается совместимость динамических библиотек при ликовке в рантайме?

    @MarkusD Куратор тега C++
    Сергей Соловьев, тебя беспокоят только имена? А соглашения о вызовах тебя не беспокоят? Тебя не беспокоит то, что собранная из исходного кода на одном языке библиотека может спокойно использоваться в исходном коде на другом языке?

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

    Расскажи подробнее про эту поддержку классов, перегрузок и, особенно, шаблонов. Что именно и как там поддерживается?
  • Какие есть доки по сборке APK/AAB с использованием Android NDK?

    Роберт, Gradle используется для сборки только высокого уровня и для упаковки APK.
    Собирать высокий уровень и паковать APK можно в несколько шагов, можно одним шагом. Все зависит от того, какую задачу ты из консоли попросишь выполнить Gradle.
    Для сборки низкого уровня используется только ndk-build или cmake. Возможность использовать кастомный тулчейн сборки тут не стоит рассматривать.
    Maven идет мимо, это нестандарт. Ant идет мимо, это устаревшая и давно списанная технология, на смену которой Gradle и пришел.
  • Какие есть доки по сборке APK/AAB с использованием Android NDK?

    GNU-like_RobertOS0, ясно. Могу сказать только что документацию ты не читал вообще.
    Детали будут в ответе.
  • Какие есть доки по сборке APK/AAB с использованием Android NDK?

    GNU-like_RobertOS0, хотелось бы для начала узнать, почему тебе для старта не хватает официальной же документации по NDK?