Комментарии 27
Сделай убирание курса мыши — современные браузерные API это позволяют
js-dos v7 пока не поддерживает интеграцию мышки. Это следующий пункт в моей дорожной карте. Обязательно сделаю.
В моем варианте мышь поддерживается в VC.COM — это файловый менеджер. Из него запускаю игры. А после запуска Keyrus переключается на русские буквы. А про сохранение, думаю сделать так: нажал на кнопку сохранил образ на диске. Если образ на диске сохраняется, как zip-архив на стороне клиента, то можно извлекать нужные файлы из zip-файла и отправлять в запросе на сервер, там их принимает код-PHP и пишет в указанный каталог на диск, который для каждого клиента свой. А перед загрузкой типового Zip файла с DOS-прогами клиенту эти файлы данного клиента записываются в ZIP-файл. То есть на сервере есть эталонный zip-файл, а потом, если у клиента есть свои файлы, то создается копия zip-файла, записываем в него файлы клиента и потом указываем для загрузки данному клиенту.
Так же попробывал FoxPro под DOS и 3D-игру Wolf. Все в браузере запускается и играет. Осталось пример с сохранением файлов сделать, но знаний по JS пока не хватает. Может кто поможет?
Нужно просто на кнопку «Сохранить» сделать вызов
У меня похожая схема реализована на DOS.Zone. Если ты зарегистрированный пользователь, тогда по кнопке «Сохранить» твои изменения падают на сервер (можешь проверить устраивает ли тебя такое решение).
Полная схема работы такая:
1. Есть эталонный чистый ZIP (файл jsdos)
2. Пользователь первый раз запускает FoxPro — создается копия файла в личной папке пользователя и отправляется ссылка на него
3. Пользователь жмет кнопку «Сохранить» — вызывается
4. Пользователь заходит ещё раз и получает последнею сохраненную версию
Да это не много не очевидно, надо пользователю объяснить что каждый раз нужно нажимать на кнопку «Сохранить», зато просто и работает как часы.
ci.persist()
. Когда он завершится у тебя будет Uint8Array, ты его отправляй на сервер это обычный ZIP, на сервере же ты его распакуешь и определишь измененные файлы. У меня похожая схема реализована на DOS.Zone. Если ты зарегистрированный пользователь, тогда по кнопке «Сохранить» твои изменения падают на сервер (можешь проверить устраивает ли тебя такое решение).
Полная схема работы такая:
1. Есть эталонный чистый ZIP (файл jsdos)
2. Пользователь первый раз запускает FoxPro — создается копия файла в личной папке пользователя и отправляется ссылка на него
3. Пользователь жмет кнопку «Сохранить» — вызывается
ci.persist()
и новый файл отправляется на сервер. На сервере он просто перезаписывает прошлую версию4. Пользователь заходит ещё раз и получает последнею сохраненную версию
Да это не много не очевидно, надо пользователю объяснить что каждый раз нужно нажимать на кнопку «Сохранить», зато просто и работает как часы.
Мне понравилось, но как-то чуть долговязо все идет (не лагает).
а запуститься ли foxpro dos?
Если он работает в обычном dosbox, то значит будет работать и в браузере.
А прога бесплатная? Как закачать? Хочу попробывать с foxPro на локальном ВебСервере по сети.
Бесплатная. Я пока тестирую сервис, документацию на код и развертывание я опубликую после тесирования.
Могу помочь в тестировании, развернув в локалхост у себя и попробывать FoxPro DOS. Если получится сниму видео с указанием на вашу разработку. Было бы прикольно размещать на сайте прогу под DOS, где пользователи забивают данные в DBF-файл на сервере. Я разработчик языка программирования РФокс (Русский Фокс). Предлагаю сотрудничество. www.youtube.com/watch?v=95IvZj3E8Q0&list=PLo4sldcUomOobM9Wvzl315jhh0cC9H3cG&index=5
Написал в личку.
talks.dos.zone/t/foxpro-2-6-dos-portable
Прекрасно работает даже в браузере.
Прекрасно работает даже в браузере.
JFYI «попробовать»
Есть проблема: система запускается на виртуальном диске и нет ни какой возможности сохранить файлы на диск компа. То есть сохраниться в играх не получиться, чтоб в следующий раз восстановиться из сохраненного. Есть ли какое то решение этой проблемы? Например, формировать какой либо запрос к странице, который возвратит нужный файл. Или доступ к реальному каталогу на сервере.
На самом деле поддержка сохранения и загрузки реализована (документация). В процессе работы эмулятора все изменения сохраняются в виртуальной файловой системе. Используя функцию сохранения вы получаете обновленный бандл со всеми вашими изменениями, вы можете сохранить его на сервере и загрузить вместо оригинального при следующем запуске. Именно так работает сохранение/загрузка на DOS.Zone. В теории можно загружать отдельные файлы из виртуальной ФС, но API пока таких функций не предоставляет.
Для моих практических не игровых целях надо бы оперативное сохранение при изменении файла. Например, прописать список файлов и каталог на реальном диске, куда бы эти файлы копировались при каждом изменении. Наверняка, в JS-коде это можно подправить. Я мало практиковался в JS. Может кто-то решит эту задачу. Задача разворачивания сервера в локалхост решена. Сервер работает и без доступа в интернет в локальном компе и по сети. Еще лучше, чтоб кроме виртуальных дисков были видны сетевые диски или локальная реальная папка на компе сервера. Тогда бы так же проблема была бы решена сохранением файлов в такую общую папку.
Сохранение отдельных файлов будет сделано в будущем. Увидеть сетевые диски или диски компьютера не получится в принципе, по тому что браузер не позволяет этого делать. Для того что бы это сделать, нужно либо использовать не браузер а electoron какой-нибудь, либо писать сервер которые пробрасывает доступ к ФС компа в браузер.
Я напоминаю, что речь идет о доступе к реальному каталогу на стороне сервера, а не на стороне клиента. Я разворачиваю свой сервер, указываю внешнюю папку и подключаю ее как диск, например, с помощью PHP. Папка на стороне сервера.
Конечно, тогда один клиент может затереть файл другого клиента, если я не напишу функцию, которая предоставит каждому клиенту свою папку на сервере. Но меня интересует возможность обновлять DBF-файлы несколькими клиентами на сервере. FoxPro поддерживает блокировку записей, значит и многопользовательский режим работы. DBF-файлы будут в общей папке. Из нее будут забираться записи в MySQL-базу фоновой прогой на стороне сервера.
Но если виртуальные диски размещаются в памяти клиента, то это реальная проблема для доступа со стороны сервера к этим дискам. Надо создавать канал от клиента к диску на сервере. Встраивать в HTML PHP-код который исполняется на стороне сервера и связывается с JavaScript на стороне клиента (Ajax) и дает доступ к файлам на диске сервера.
В идеале через ВебСервер можно создавать локальную сеть между Сервером и клиентом и даже между клиентами. Тогда сервер может открывать папки для доступа в эту локальную сеть и клиенты так же могут открывать доступ к своим папкам. Тогда вопрос так же решиться. Если это делать на NodeJS, тогда во первых получим асинхронность в обработке запросов и код на стороне сервера будет на JavaScript. Я подключил VC-менеджер файлов под DOS и фактически получил в браузере удобную ОС, у которой пока не хватает доступа к реальным дискам и локальной сети с сервером и другими клиентами для полного счастья.
Если сделать локальную сеть между клиентами, то можно будет играть в сетевые игры друг с другом в режиме эмуляции DOS.
Если ты хочешь сохранить возможность для клиента работать через браузер, то вариант только один. На клиенте нужно написать ФС которая работает через веб-сокеты и полностью синхронизирует свое состояние при каждой операции с сервером. Т.е. фактическ ФС будет на сервере, а клиент будет посылать операции чтения и записи. Это можно сделать, но не думаю что это будет просто, если ты не знаком с emscripten. На всякий случай вот доки. Я бы подумал надо каким-то более простым решением, вроде синхронизации по кнопке или типа-того.
Синхронизация по кнопке тоже хорошо. Возможность указать файлы, которые должны синхронизироваться по отправке на сервер (клиент контролирует файл) и по обновлению с сервера (сервер обновляет файл и файл обновляется у клиента). Вместо кнопки может быть фоновый процесс, который обновляет эти списки файлов на сервере и клиенте. emscripten я не знаком. За ссылку спасибо. jsdos умеет создавать виртуальный диск в памяти, хотел бы тоже научиться это делать на С++ или С#. Кстати, а не пробывал делать ВебСервер для jsdos на NodeJS?
Важно, получить доступ к чтению и записи файла на виртуальном диске. В неком текстовом файле архива из которого формируется виртуальный диск, сеть файл типа конфиг, в котором есть списки файлов для обновление по чтению и по записи. фоновый процесс, проверяет изменения на сервере и загружает новую версию файла вместо старой, а так же выгружает от клиента новую версию на сервер, если есть изменения у клиента. На сервере это делается в реальный каталог. Причем на сервере есть каталог общий для всех клиентов и каталог индивидуальный для текущего клиента. Тогда клиенты смогут даже обмениваться файлами.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
DOS Cloud Gaming