Пытаюсь замутить свой симулятор.
| |
V9 | Дата: Вторник, 26.11.2019, 11:02 | Сообщение # 1 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 510
Награды: 11
Репутация: 2
Статус: Offline
| Но так как опыта мало, шанс на успех - меньше процента. Тут я планирую держать общество в курсе того, как продвигается работа. Пока что принимаю решение что каждый день не меньше часа, но не более 2 часов буду тратить на программирование, но до нового года. Там будет решено, продолжать или нет, и в каком темпе, если "да". Планирую, что это будет сервер, к которому люди смогут подключаться, и где они смогут совместно играть на полигоне
Пока что вчера разбирался с системой версионирования Fossil SCM, а так же читал доки по созданию сервера. В гайдах описывается, что при создании подключения надо создавать отдельную нить Thread на каждое подключение, точнее даже две нити - на чтение и на передачу. Однако проведенные эксперименты показали что хорошо действует метод available(), который возвращает 0, если от клиента еще не пришла инфа, и больше нуля, если от клиента что-то поступило. Т.е. можно обойтись двумя нитями - первая будет принимать подключения и передавать второй, а вторая - бегать по списку подключений и проверять - "а что там от кого пришло?"
Так же я проверял нагрузку процессора. Если бегать без конца, грузится процессор. Но если тормозить, останавливать его, на 1..4 миллисекунды, то он все равно грузится (т.е. остановки в реальности не происходит, он бегает внутри по циклу где-то), а вот с 5 миллисекунд начинается честная остановка. При этом, если ставить задержку в 5 миллисекунд, то он останаливается на 15 миллисекунд. При постановке на 15 мс, все равно 15 мс. Дальнейшие эксперименты показали, что остановка квантуется с точностью в 15.5 миллисекунд (15, 31, 46 и т.п.). 1000 / 15 ≈ 65 обходов в секунду. Задержка ответа 15,5 мс - это будет самая худшая задержка, среднее время задержки ответа - примерно 8 мс.Добавлено (26.11.2019, 18:43) --------------------------------------------- Сделал самый первый вариант сервера. Правда, пока, он принимает коннект, отдает инфу и вылетает, т.к. основной цикл опроса и обработки не сделан и к нему я даже не приступался. С удивлением узнал, что нет возможности узнать, клиент "живой" или давно "умер". И что данную проблему выясняют тайм-аутом. К примеру веб-сервер Апач ждет 5 секунд и закрывает соединение. Убил много времени на выяснение этого вопроса. Добавлено (27.11.2019, 10:27) --------------------------------------------- Сделал главный цикл сервера по обходу подключений, затестил. Сервер держал одновременно 16366 коннектов, что более чем "дофига" на данном этапе. При этом, формально, я запускал тест на этом же компе, так что я не знаю, где тут проблема - в операционке, тесте или в сервере. Добавлено (28.11.2019, 15:43) --------------------------------------------- Гонял под высокими нагрузками, но на том же компе. Для подключения хватает 0.5 миллисекунды. Выяснил для себя, что закрытое с обоих концов (приложение-сервер и приложение-клиент) соединение в системе "висит" еще 120 секунд. Зачем занимает место - малость не очень понятно, т.к. повторно использовать его не получится, хотя "висит" открытым вот вроде для этого "повторного использования". Непонятная загадка. Сделал буферизированние входящих данных, но не доотладил, т.к. время кончилось. Добавлено (29.11.2019, 21:16) --------------------------------------------- Отладил поступление данных во входящий буфер; нашел и ликвидировал ошибку. которая затрудняла "размыкание" старых подсоединений. С ошибкой это получилась бы со скоростью 6 коннектов/секунда. Добавлено (30.11.2019, 19:01) --------------------------------------------- Потратил время, пытаясь ускорить процесс коннекта, но никаких успешных результатов не добился. "Слишком ранняя оптимизация - зло!"(С) Добавлено (01.12.2019, 22:00) --------------------------------------------- Час пытался написать первичный анализатор входящего потока данных серверу. Добавлено (02.12.2019, 20:00) --------------------------------------------- Сегодня ставил блокировку на тот случай, если "левый" клиент пришлет большой и бессистемный блок данных. А кроме того, рассматривал ситуацию, если клиент не принмает данные: у меня нет возможности выяснить это заранее, а нить исполнения нельзя блокировать, т.к. она одна. Получился невероятный костыль, но, думаю, должен будет рабоать Добавлено (03.12.2019, 22:02) --------------------------------------------- Начал писать парсер входящего запроса. За час добавил 61 строку кода. Добавлено (04.12.2019, 22:03) --------------------------------------------- Зачатки парсера сделаны, сегодня писал "револьверный" отсылатель данных. Как ни крути, придется создать несколько нитей отправки данных и четко контролировать скорость отправки, чтобы вовремя "прибивать" зависшие соединения. За час добавлено еще 72 строки кода. Добавлено (05.12.2019, 06:13) --------------------------------------------- Сегодня только разбирался с созданием, поддержкой и объединением ветвей (branch) в системе версионирования fossil. Было достаточно сложно для понимания "с нуля", но вроде разобрался. По крайней мере итоговая картинка ветвей у меня получилась та, что я хотел видеть в начале разбирательств. Добавлено (06.12.2019, 21:58) --------------------------------------------- Сегодня пытался разобраться с системой Ticket у Fossil, вроде разобрался. Исправил один баг по тикету и продолжал писать револьверный отсылатель. Добавлено (07.12.2019, 13:32) --------------------------------------------- Сделал отсылатель, но тут вроде выяснилась проблема, что простаивающую нить невожмно "запустить". Если удалить все простои, ответ формируется и отсылается за 3 миллисекунды, а если простои включены, то за 15.3*3 = 46 миллисекунд. То ли документацию плохо читал, то ли еще что. Добавлено (08.12.2019, 16:19) --------------------------------------------- Переписывал прогу, чтобы выкинуть пока-что один из этапов конвейера обработки, что дало сокращение простоя на 33%. Дальше решил не трогать, до перехода на другую версию ПО. Начал писать парсер входящего запроса. Добавлено (09.12.2019, 22:00) --------------------------------------------- Час промучился со сплиттером, так и не смог заставить его корректно работать. Продолжим завтра. Добавлено (10.12.2019, 22:02) --------------------------------------------- Ровно еще один час, минуту в минуту, потребовалось, дабы домучать сплиттер. Добавлено (11.12.2019, 22:02) --------------------------------------------- Сегодня наконец я добил за 1.5 часа программирования парсер и ответчик. Был первый условный обмен данными в штатном режиме, со всем сделанным конвейером обмена данными. Завтра отрефакторить код, чтобы убрать собранное на "живую нитку", добавить обработки ошибок и т.п., и можно приступать уже к написанию модуля логики игры. Добавлено (12.12.2019, 23:52) --------------------------------------------- Сегодня занимался чисто рефакторингом. Ну и думал о будущей архитектуре. Добавлено (14.12.2019, 21:53) --------------------------------------------- Закончил подсистему ввода-вывода сервера, завтра перехожу к написанию модуля логики игры. Добавлено (15.12.2019, 01:02) --------------------------------------------- Пока не мог заснуть, пришла в голову идея ускорить конвейер. Не смог удержатся, сел за рефакторинг. 45 минут работы, +75 строк кода, но сервер теперь отдает информацию за 1 миллисекунду вместо 30. Добавлено (16.12.2019, 21:48) --------------------------------------------- В общем, поначитавшись инструкций "как правильно делать", решил сделать по стандарту keep-alive connection. Думал, будет, в принципе просто, т.к. я закладывался на это развитие в будущем в том прошлом. Но задача оказалась сложной, и я чую, что я на ней подвис дня на три-четыре. И бросить нельзя, т.к. я "раскидал" код. Добавлено (17.12.2019, 17:14) --------------------------------------------- Мучаю Keep-alive. В программированнии на Java постоянно поражает одна вещь.
- Расколбасил половину кода.
- Получил свыше 50 ошибок при компиляции.
- Мучительно их убираешь, запуская раз за разом компиляцию, пока компиляция не покажет "ошибок нет".
- Запускаешь, и все запускается с первого же запуска. Хотя ожидаешь, что после компиляции ты будешь столько же времени отлавливать ошибки времени запуска. Но все работает с первого запуска!
В это настолько не верится, что иногда волосы шевелятся.Добавлено (17.12.2019, 20:56) --------------------------------------------- Героически домучал keep-alive, завтра точно начну делать движок игры. Добавлено (18.12.2019, 22:09) --------------------------------------------- Не менее героически писал GUID генератор, дабы он соответствовал RFC 4122. Добавлено (18.12.2019, 22:16) --------------------------------------------- Уже домучив GUID генератор, снова открыл RFC 4122 и выяснил, что там в конце есть образец корректного генератора GUID на С. Все то, что я мучал 2 часа, можно было сделать за 15 минут. Добавлено (19.12.2019, 09:37) --------------------------------------------- Писал логику сессионных ключей пользователей. Добавлено (20.12.2019, 21:58) --------------------------------------------- Сегодня разбирался с кодами перенаправления, нашел правильное использование на примере почты гуглы, делал собственный вариант (это необходимо для корректного различения разных пользователей). Добавлено (21.12.2019, 01:18) --------------------------------------------- Сегодня немного отвлекся (на час) от симулятора и написал себя микро-программку, которая считает строки кода в симуляторе. Выкидывает комментарии, выкидывает пустые строки, считает только те строки кода, где что-то присутствует. Всего на данный момент в программе 3963 строки, из них 2539 - это автоматически сгенерированный чудовищный тестовый файл для тестирований одной из функций. За минусом этого "авто-генерата", мною написано 1424 строки кода за месяц. Что по часам, я пока не считал, но примерно под 30 часов. Как я понимаю, стандарт программирования - это примерно 450 строк за 8 часов работы. У меня получается 379. Но, надо признать, что я программирую, без шуток, в блокноте, а не в IDE, так что, думаю, мой результат не так уж плох. Добавлено (21.12.2019, 20:30) --------------------------------------------- Писал логику для ошибки "не найден ресурс". 45 минут, +75 строк кода. Добавлено (22.12.2019, 00:20) --------------------------------------------- Почти двухчасовой забег закончился окончанием отладки ситуации "не найден ресурс", исправлением части найденных ошибок, написанием нового суб-парсера входящих данных и началом написания самого движка игры. Еще +145 строк кода, и теперь симулятор - это 4183 строк кода. Но скоро будет рефакторинг, часть дублирующего кода будет удаляться, так что количество несколько уменьшится. Добавлено (22.12.2019, 00:25) --------------------------------------------- Забыл сказать, что сегодня - это именно та дата, когда игровой движок мне хоть что-то отрисовал как игроку. Добавлено (23.12.2019, 09:59) --------------------------------------------- Встал на том, что где-то сидит баг с зависанием сервера, который не могу пока найти.
| |
| |
V9 | Дата: Понедельник, 23.12.2019, 10:57 | Сообщение # 2 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 510
Награды: 11
Репутация: 2
Статус: Offline
| Оффтоп. И тут Штирлиц обалдел...
Добавлено (24.12.2019, 00:00) --------------------------------------------- Разбирался с кодировками (до сего дня использовал UTF-8 с англ буквами, проблем не было), писал сам игровой процессор. На текущий момент 1722 строки (21го было 1422), отстаю от темпов. Но начал реально упираться, т.к. пока слабо представляю, как это все должно быть написано, чтобы работало. Добавлено (24.12.2019, 00:01) --------------------------------------------- ах, да, баг был найден и унасекмлен.
| |
| |
andreyzpr91 | Дата: Вторник, 24.12.2019, 10:54 | Сообщение # 3 |
Станционный диспетчер
Группа: Пользователи
Сообщений: 65
Награды: 2
Репутация: 1
Статус: Offline
| Цитата Но, надо признать, что я программирую, без шуток, в блокноте, а не в IDE, так что, думаю, мой результат не так уж плох. Вы программируете в блокноте???
| |
| |
V9 | Дата: Вторник, 24.12.2019, 22:41 | Сообщение # 4 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 510
Награды: 11
Репутация: 2
Статус: Offline
| Цитата andreyzpr91 ( ) Вы программируете в блокноте??? Да. Заснял небольшое видео как происходит процесс программирования и компиляции:
Добавлено (24.12.2019, 23:55) --------------------------------------------- По факту, сегодняшний день потерян. После того, как начал делать процессор игры, выяснил, что теперь нужно обрабатывать исключения начальной загрузки, а значит - нужно останавливать сервер, если загрузка не может быть выполнена. А вот это не было предусмотрено вообще - остановка сервера где-то из глубины классов обработки. Попытка переписать корневой класс кончилась тем, что, потеряв два часа, я плюнул, и откатился назад. Т.е., пока собираюсь собрать все "на живую нитку" через "костыли", а приводить в порядок буду после того, как все заработает, через рефакторинг. Добавлено (27.12.2019, 22:02) --------------------------------------------- Вчера не мог работать по делам, сегодня потратил час, писал обработчик игры в части формирования .sav файла. Всего лишь 1758 строк Добавлено (28.12.2019, 21:59) --------------------------------------------- Постоянные ошибки в проектировании заставляют переделывать одно и тоже по нескольку раз. Что раздражает. 1786 строк на данный момент, час работы.
| |
| |
V9 | Дата: Воскресенье, 29.12.2019, 21:59 | Сообщение # 5 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 510
Награды: 11
Репутация: 2
Статус: Offline
| Сегодня за час сделал самую первичную компоновку .html-файла, добавляя сообщения игроку в основному экрану. Выглядит пока что ужасно, но это пока:
1854 строки кода в игре на данный момент.Добавлено (30.12.2019, 22:00) --------------------------------------------- Три задачи делал. Сначала добавлял в запрос скрытый токен. Потом делал переделыва парсер истории, дабы исключить возможность дублирования приказа игрока. Потом писал парсер распоряжения игрока (т.е. приказа ДНЦ). 1896 строк.
| |
| |
andreyzpr91 | Дата: Понедельник, 30.12.2019, 22:50 | Сообщение # 6 |
Станционный диспетчер
Группа: Пользователи
Сообщений: 65
Награды: 2
Репутация: 1
Статус: Offline
| Скажите пожалуйста, а вы сами понимаете что пишете? И сами себе верите?Добавлено (30.12.2019, 22:57) --------------------------------------------- Вы много умных слов для кого то написали, что то напоминающее обычное клиент-серверное приложение. Для того, чтобы людям было интересно наблюдать, расскажите, пожалуйста, что будет представлять ваша программа. Хотя я так понимаю у вас не программа будет, а что то по типу онлайн игры через браузер?
Вы можете обрисовать картину, что из себя будет представлять ваш проект? Только не умными непонятными словами, которые не привели еще ни к какому умозаключению, а для нас, для людей?
И еще, интересно вот. Клиент серверное приложение создать это фигня, по мне так. Я не знаком с джава, ну я думаю что посредством протоколов и подпротоколов это вполне реально. А вот графическая часть и сам гемплей?
| |
| |
andreyzpr91 | Дата: Понедельник, 30.12.2019, 23:06 | Сообщение # 7 |
Станционный диспетчер
Группа: Пользователи
Сообщений: 65
Награды: 2
Репутация: 1
Статус: Offline
| Ну, приведу Вам пример. Я с графикой плохо дружу. Напримерв ДНЦ Нева отрисовка ГИДов сделана очень хорошо. Я так подозреваю, что пишется вначале в файл на компьютере,а потом уже им используется, но это сути да дела не меняет. Почему я так думаю - потому что канва (canvas) имеет свойство исчезать при перетасовке окон... Каждый раз перерисовывать... ну то такое. Автор ДНЦ Нева молодец. Я же от канвы после пары экспериментов отказался, решил все сделать в более програмном коде. Я сделал все с помощью панелей, динамическим их созданием. По мере написания кода я сделал статические панели, тобеж линии станции, которые могут изменять параметры, занесенные в ini файл И динамические панели - тоесть наши поезда. Происходит считывание массива локомотивов, поездов, бригад, динамическое создание панелей. Естественно, что их координация так же указана в ини файле и может корректироваться. Для меня это был самый простой выход. _ Прикрепил скриншот _ Это как бы такое, простое для меня решение визуального графика расположения локомотивов. Чем оно мне подошло, тем что локомотивы в службах указываются не рисками а обычно магнитиками круглыми/квадратными на карте ЖД - станций. Единственное, что указываются именно локомотивы, я для удобства реализовал скрепление еще с поездом. Был создан дополинтельный массив.
К чему я веду. У вас много текста вокруг да около, где информация вот как у меня, конкретно привязанная к игре? Ведь написать клиент - сервер это впринципе пыль по сравнению с реализацией графики и гемплея? логики игры! Тем более серверной.
Я надеюсь вы понимаете меня?
Добавлено (30.12.2019, 23:10) --------------------------------------------- Я к чему веду вообще. Я например когда пишу код, определяю для себя самое сложное. Например, я захотел сделать визуальный график расположения локомотивив. Было бы глупо создавать таблицы и массивы, которые бы определяли нужные мне параметры, потому что это пыль. Вначале нужно создать сам вот этот график, который будет от множества параметров строить наш визуальный вид Пускай я передам ему для теста какие то параметры, а он будет отрисовывать. Вначале локомотивы. Потом с поездами. ПОтом с рисками отхода. Вначале строится именно визуальная часть вот эта. А передать в нее параметр это уже фигня. Абы он мог отрисовать. Вот я к чему веду, у вас так много умных слов, а вы думали об создании самого сердца, в которое вы будете передавать, не понимаю пока вообще что, вы ничего не конкретизировал вообще.... ни одних параметров, рассказаных нам даже для прицеливания. Вокруг да около __ PS если я пишу с ошибками или не сильно суразно, мне чуть тяжеловато на русском выразить мысль ну думаю вы понимаете сутьДобавлено (30.12.2019, 23:25) --------------------------------------------- Кстати, еще интересует, у вас в центре вкладки название программы DNTZ Я так смотрю у вас комментарии к коду все на таком чистом английском ну если мне не изменяет моя старческая память, то правильнее будет DNС or DNTS (це так як варіант)
Почему DNTZ ?? Коментарии к коду просто на таком прям английском? )
Сообщение отредактировал andreyzpr91 - Понедельник, 30.12.2019, 23:11
| |
| |
V9 | Дата: Вторник, 31.12.2019, 16:32 | Сообщение # 8 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 510
Награды: 11
Репутация: 2
Статус: Offline
| Продолжал писать парсер приказа игрока. Появились первые сведения по участку Сургут - Сургут-Порт. 1 час, 1945 строк (+49 строк). Добавлено (31.12.2019, 17:00) ---------------------------------------------
Цитата andreyzpr91 ( ) Скажите пожалуйста, а вы сами понимаете что пишете?И сами себе верите? Ответ - "слабо" - на оба вопроса. Добавлено (31.12.2019, 17:01) ---------------------------------------------
Цитата andreyzpr91 ( ) Хотя я так понимаю у вас не программа будет, а что то по типу онлайн игры через браузер?
Пока что принял такое решение, совершенно правы.Добавлено (31.12.2019, 17:09) ---------------------------------------------
Цитата andreyzpr91 ( ) Вы можете обрисовать картину, что из себя будет представлять ваш проект?Только не умными непонятными словами, которые не привели еще ни к какому умозаключению, а для нас, для людей?
И еще, интересно вот. Клиент серверное приложение создать это фигня, по мне так. Я не знаком с джава, ну я думаю что посредством протоколов и подпротоколов это вполне реально. А вот графическая часть и сам гемплей? Я сам не знаю, что и как будет в развитии, на данный момент я делаю некую модель участка, где диспечтер управляет через ДСП, отдавая им команды. А ДСП двигают поезда. Графики на данный момент не будет. Я пока что просто не знаю, как ее делать. Т.е. я моделирую ситуацию примерно 30х годов, когда всё, что было у ДНЦ - это селектор связи с ДСП. Все остальное - ручками, по докладам от ДСП.Добавлено (31.12.2019, 17:55) ---------------------------------------------
Цитата andreyzpr91 ( ) К чему я веду. У вас много текста вокруг да около, где информация вот как у меня, конкретно привязанная к игре?Ведь написать клиент - сервер это впринципе пыль по сравнению с реализацией графики и гемплея? логики игры! Тем более серверной. Тут специфика еще в том, что я, по приколу, веду разработку под Java 1.0.2 1995 года выпуска. Там нет ничего. Позже, если игра будет сделана и хоть как-то запущена в эксплуатацию, я сделаю переход на современную версию. Но пока вот так вот. По этой причине я не могу использовать IDE для разработки, т.к. ни одна IDE не работает с Java 1.0. Равно как не могу использовать ничего типа JLHTTP сервера (https://www.freeutils.net/source/jlhttp/) по той же причине: никто не обеспчивает совместимость с java 1.0.Добавлено (31.12.2019, 17:58) ---------------------------------------------
Цитата andreyzpr91 ( ) Вот я к чему веду, у вас так много умных слов, а вы думали об создании самого сердца, в которое вы будете передавать, не понимаю пока вообще что, вы ничего не конкретизировал вообще....ни одних параметров, рассказаных нам даже для прицеливания. Вокруг да около По факту, я рассказываю не для вас, а для себя. Показываю сам себе, что дело двигается. Плохо, криво, косо, но двигается. В первую очередь, это для того, чтобы я не бросил на полпути. А буду ли я разрабатывать до релиза месяц или год - это меня не волнует совершенно.
| |
| |
V9 | Дата: Вторник, 31.12.2019, 18:14 | Сообщение # 9 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 510
Награды: 11
Репутация: 2
Статус: Offline
| Цитата andreyzpr91 ( ) Кстати, еще интересует, у вас в центре вкладки название программыDNTZ Я так смотрю у вас комментарии к коду все на таком чистом английском ну если мне не изменяет моя старческая память, то правильнее будет DNС or DNTS (це так як варіант)
Почему DNTZ ?? Коментарии к коду просто на таком прям английском? ) Тут снова проблема Java 1.0. В современных версиях Java по умолчанию программа сохраняется и обрабатывается в кодировке UTF-8, при этом при выводе сообщений в консоль перекодируется под системную кодировку. В случае Windows - это CP866. Но Java 1.0 считает, что программа написана в кодировке ISO-8859-1 и никакой перекодировки русских букв из UTF в CP866 не делает. При этом сам текст в блокноте имеет третью кодировку - Win1251. Во всех трех разных кодировках русские буквы имеют разные коды. При этом браузеру хорошо бы отдавать текст страниц в UTF. Подбивая итоги: 1. В блокноте кодировка Win1251 2. В консоли - CP866 3. Браузер рассчитывает на UTF-8. На все это накладывается то, что в Java 1.0 нет адекватной кодировки-раскодировки даже UTF-8, т.к. writeUTF пишет спереди два байта длины последовательности, а при чтении readUTF расчитывает, что эти байти присутствуют. Поэтому с самого начала было принято решение, что код будет использовать только лантинские буквы, коды которых совпадают во всех кодировках. Все протитипирование было проще делать на английском. Позже начал выносить фразы и html в файлы, т.е. появилась возможность использовать русские буквы. А т.к. модуля кодирования/раскодирования UTF-8 у меня не было, а писать его было лень, то принял решение использовать для браузера UTF-16BE, что достаточно легко позволяет читать/писать файлы данных с русскими буквами, формировать фразы и отправлять их.
Сообщение отредактировал V9 - Вторник, 31.12.2019, 19:41
| |
| |
andreyzpr91 | Дата: Четверг, 02.01.2020, 14:24 | Сообщение # 10 |
Станционный диспетчер
Группа: Пользователи
Сообщений: 65
Награды: 2
Репутация: 1
Статус: Offline
| Из всего вышепрочитанного, только один вопрос. Зачем? )
| |
| |
V9 | Дата: Пятница, 03.01.2020, 22:01 | Сообщение # 11 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 510
Награды: 11
Репутация: 2
Статус: Offline
| Очередной часовой забег ничего не добавил к логике, т.к. только писал код, но не компилировал и не отлаживал. 2029 строк (+135 строк)
| |
| |
V9 | Дата: Суббота, 04.01.2020, 00:44 | Сообщение # 12 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 510
Награды: 11
Репутация: 2
Статус: Offline
| 45 минут отладки, и, криво, косо, с ошибками, но в игре "прошел" первый поезд.
Добавлено (04.01.2020, 00:46) --------------------------------------------- upd. 2047 строк.
| |
| |
V9 | Дата: Суббота, 04.01.2020, 13:51 | Сообщение # 13 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 510
Награды: 11
Репутация: 2
Статус: Offline
| Удалены главные ошибки. Теперь игра корректно берет приказы и условно корректно формирует движение поездов. Пока что нет никакого контроля занятости путей и участков, контроля наличия/отсутствия поездов, есть только участок Сургут — Сургут-Порт, но условно сказать что игра работает, можно.
Добавлено (04.01.2020, 14:47) --------------------------------------------- UPD. В игре 2054 строк кода.
| |
| |
andreyzpr91 | Дата: Воскресенье, 05.01.2020, 15:21 | Сообщение # 14 |
Станционный диспетчер
Группа: Пользователи
Сообщений: 65
Награды: 2
Репутация: 1
Статус: Offline
| А в чем заключается логика времени следования поезда? Просто выдержка времени, делениче участковой скорости на расстояние, или может по другому? Хотя, видно и так. Просто отстчет ровно 10 минут. Тоесть логики нету?
| |
| |
V9 | Дата: Воскресенье, 05.01.2020, 15:49 | Сообщение # 15 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 510
Награды: 11
Репутация: 2
Статус: Offline
| Цитата andreyzpr91 ( ) А в чем заключается логика времени следования поезда?Просто выдержка времени, делениче участковой скорости на расстояние, или может по другому? Хотя, видно и так. Просто отстчет ровно 10 минут. Тоесть логики нету? Пока нет. На будущее я пока колеблюсь между двумя вариантами: 1. "Как сейчас". После получения приказа, игра рассчитывает будущие события с учетом фактора случайности (плюс-минус на каждое событие) и формирует из них очередь сообщений игроку. Игрок видит только те сообщения, что относятся к настоящему или прошлому, а сообщения из будущего ему становятся видны, когда наступает нужное время. Достоинства: меньше расчетов. Недостатки: более "грубые" расчеты. 2. "По игровому циклу". Игра по таймеру рассчитает состояние мира и откидывает сообщения игроку, когда "насчитывает" события. Т.е. это ситуация в точности равна тому, что реализовано в симуляторе Невы. Достоинства и недостатки в точности противоположны первому варианту.
Характерный пример из жизни Пульта Нева: Если состав короткий, он быстрей "устаканивается" на пути, буквально отыгрывая 2 минуты перегонного времени хода. Длинный паркуется долго. Если считать "как сейчас" можно ввести поправочные коэффициенты, но точного обсчета не будет.Добавлено (05.01.2020, 19:42) --------------------------------------------- 1. Исправлена ошибка при передаче с сервера больших блоков данных (он их портил) 2. Исправлена ошибка падения обработчика входящих соединений при порче в одном из соединений (в этом случае падал весь обработчик, а через него - зависал весь сервер). 3. Добавлен контроль падения обработчика входящих соединений: в этом случае сервер вырубается и пишет диагностику.
В ближайших планах: я ошибочно сделал отдачу команды по HTTP методу GET, а должен был - по методу POST. Начал переделывать. В принципе там не много, а совсем даже немного. После этого планирую продумывать обработку полигона железной дороги, как это будет устроено и как это должно работать. Добавлено (07.01.2020, 17:58) --------------------------------------------- два дня, два с половиной часа работы, и теперь режим переключился на HTTP POST. 2145 строк кода. Добавлено (08.01.2020, 13:04) --------------------------------------------- Начал добавлять логику обсчета полигона железной дороги, конкретно сейчас - организовывать структуру хранения информации по сегментам участков пути. Час работы, 2330 строк кода. Добавлено (08.01.2020, 13:20) --------------------------------------------- Кстати, сегодня перешел на режим TTD (https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5).
Надеюсь, в будущем будет 100% покрытие кода. Но всю новую логику сейчас точно планирую покрывать тестами, а позже добавлю тесты для существующего кода. Кроме того, начал документировать код. Добавлено (08.01.2020, 13:22) --------------------------------------------- Думал, ссылку сократит, но вкинуло длинной ссылкой, а как отредактировать сообщение - не вижу. Короткая ссылка вместо вики - https://u.to/km36FQ Добавлено (09.01.2020, 00:51) --------------------------------------------- Сегодня отлаживал по тестам, и выяснил, что проектировать надо гооораздо аккуратней, если ты работаешь под TTD. Как было бы раньше? "Тяп-ляп, сделал, не понравилось, передал". Сейчас так не получится: нахреначена куча тестов, и чтобы перепроектировать даже мелочь, надо сначала переписать тесты. И только потом маааленько подправить сам основной код. Добавлено (16.01.2020, 23:40) --------------------------------------------- Долгая задержка из-за разного рода годовых отчетов, сегодня продолжил разработку. Сделана логика "Сегментов жд пути", сегодня днем собираюсь приступить к логике "Секций жд пути". Разница между ними в том, что "сегмент" отражает сам путь физически, так же и путевое развитие, а "Секция" - подсистему сигнализации, централизации и блокировки (СЦБ). Любая "секция" будет включать как минимум один сегмент, но может иметь и несколько сегментов. Добавлено (17.01.2020, 20:01) --------------------------------------------- Полчасика писал логику Секций. 2567 строк кода на данный момент. Добавлено (18.01.2020, 19:01) --------------------------------------------- 2 часа добавлял сущность "Приемо-отправочные пути". 2771 строк кода.
| |
| |
andreyzpr91 | Дата: Суббота, 18.01.2020, 21:20 | Сообщение # 16 |
Станционный диспетчер
Группа: Пользователи
Сообщений: 65
Награды: 2
Репутация: 1
Статус: Offline
| Ужас.
| |
| |
Vanchez | Дата: Воскресенье, 19.01.2020, 17:53 | Сообщение # 17 |
Начальник станции
Группа: Пользователи
Сообщений: 106
Награды: 7
Репутация: 10
Статус: Offline
| Ну что же, интересно будет посмотреть на это произведение, надеюсь не забросите
| |
| |
V9 | Дата: Воскресенье, 19.01.2020, 19:35 | Сообщение # 18 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 510
Награды: 11
Репутация: 2
Статус: Offline
| Сегодня немного делал логику станций. Правда, основное время - это я переделал код так, что запуск тестов автоматически запускает сам сервер и проводит тестирование и серверной части. Правда тестов сервера пока почти что нет. До сих пор тестового модуля тестировал разный утилитный и дополнительный функционал, и пытался подконнектится к серверу, если он запущен. Т.е. сервер надо было запускать отдельно. агАвтозапуск сервера позволит в будущем покрыть 100% кода тестами. До этого не знал как это сделать, т.к. там были определенные баги внутри, недоступные мне, что я не мог придумать как решить. Всего потрачено 1.5 часа и сейчас в проекте 2839 строк. Добавлено (19.01.2020, 20:53) --------------------------------------------- Еще полчаса работы, готовил комп к работе сервером. И немного добавлял функционал к станциям. 2848 строк.
| |
| |
V9 | Дата: Воскресенье, 19.01.2020, 23:48 | Сообщение # 19 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 510
Награды: 11
Репутация: 2
Статус: Offline
| Первый раз сервер работал на веб, а я отработал на сервере через VPN с веба.Добавлено (20.01.2020, 00:04) --------------------------------------------- Код не добавлялся, но 2 часа на настройки потратил. Добавлено (20.01.2020, 22:36) --------------------------------------------- Криво-косо забагованная пред-альфа версия пока что не-игры доступна по адресу http://dsim.tk
Выглядит в точности, как это было еще 4 января.
Единственное, что работает — это возможность отдать приказ "№поезда 303-500" или "№поезда 500-303". Первое как бы отправит поезд из Сургута на Сургут-Порт, второе - обратно. Никакого контроля чего бы то ни было пока что нет. Поезд типа отправится через 1.5 минут после отдачи приказа и каждый перегон будет ехать 10 минут. Т.к. самообновления экрана пока что тоже нет, то чтобы увидеть изменения, надо нажать на кнопку "отправить приказ" с пустым приказом.
Я бы хотел сказать — "Enjoy!" — но понимаю, что никакого "Enjoy!" там пока что нет.
| |
| |
Фома | Дата: Понедельник, 20.01.2020, 23:15 | Сообщение # 20 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 248
Награды: 7
Репутация: 9
Статус: Offline
| Отработал первый приказ, вот что получилось:
| |
| |
|