Я работаю над небольшой онлайн-игрой на Java, которая, хотя и не закончена, я хочу ее выпустить в какой-то момент. Я не вижу, чтобы это было закончено в ближайшее время, однако все, что не хватает, - это некоторые детали продолжения истории. Я подумал о том, чтобы обновлять обновления в игре через интернет-соединение (как это делают большинство игр), но я хотел быть умным с ним и использовать некоторую форму горячей замены для исправления обновлений, не перезагружая игру.Java-классы с горячей заменой
Первоначально, я думал, что JRebel будет работать для этой цели, однако, насколько я знаю, это нелегко вызвать из самого приложения.
Как я себе этот процесс:
- сервер сообщает клиенту, что есть обновление доступно
- загрузки клиента ZIP/JAR/все и извлекает его
- Клиент загружает в «классе пакет», который (Клиент имеет специально сконструированные части, предназначенные для обработки загрузки в дополнительных классах &, возможно, переписывая существующие классы.)
- «класс пакета» обрабатывает перезапись представления класса в памяти s.
Часть, которая меня беспокоит то, что если у меня есть объект, т.е.
//Something that's called when the app loads up
CustomClass drawClass = new CustomClass();
drawClass.setContext(Context.MAIN);
//...More calls that set up drawClass
Я хочу, чтобы иметь возможность изменять CustomClass и он отражается во всех случаях CustomClass. Единственная причина, по которой я надеюсь, заключается в том, что я могу создать для каждого класса «copyMe» вещь, которая по существу сериализует его, - которая может быть загружена в новый класс.
Могу ли я это сделать? Если да, то как?
Это похоже на то, что вы хотели бы изучить: http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html –
Сторона примечания: когда у вас есть «удаленный» доступ к ваш JVM; то вы можете использовать JRebel для этого. Думаю, я не сделал бы этого таким образом (но стремиться к более «архитектурному» пути); но я думаю, что использование JRebel может работать на вас.(при условии, что вы готовы заплатить лицензионную стоимость за свою небольшую онлайн-игру) – GhostCat
JRebel не предназначен для использования в производстве, и он не восстанавливает уже построенные объекты при смене класса, если только плагин не отслеживает соответствующие экземпляры и специально подключен для этого. –