MCPcopy Create free account
hub / github.com/EasyRPG/Player / CreateRequestMapping

Method CreateRequestMapping

src/async_handler.cpp:142–214  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

140}
141
142void AsyncHandler::CreateRequestMapping(const std::string& file) {
143#ifdef EMSCRIPTEN
144 auto f = FileFinder::Game().OpenInputStream(file);
145 if (!f) {
146 Output::Error("Emscripten: Reading index.json failed");
147 return;
148 }
149
150 json j = json::parse(f, nullptr, false);
151 if (j.is_discarded()) {
152 Output::Error("Emscripten: index.json is not a valid JSON file");
153 return;
154 }
155
156 if (j.contains("metadata") && j["metadata"].is_object()) {
157 const auto& metadata = j["metadata"];
158 if (metadata.contains("version") && metadata["version"].is_number()) {
159 index_version = metadata["version"].get<int>();
160 }
161 }
162
163 Output::Debug("Parsing index.json version {}", index_version);
164
165 if (index_version <= 1) {
166 // legacy format
167 for (const auto& value : j.items()) {
168 file_mapping[value.key()] = value.value().get<std::string>();
169 }
170 } else {
171 using fn = std::function<void(const json&, const std::string&)>;
172 fn parse = [&] (const json& obj, const std::string& path) {
173 std::string dirname;
174 if (obj.contains("_dirname") && obj["_dirname"].is_string()) {
175 dirname = obj["_dirname"].get<std::string>();
176 }
177 dirname = FileFinder::MakePath(path, dirname);
178
179 for (const auto& value : obj.items()) {
180 const auto& second = value.value();
181 if (second.is_object()) {
182 parse(second, dirname);
183 } else if (second.is_string()){
184 file_mapping[FileFinder::MakePath(Utils::LowerCase(dirname), value.key())] = FileFinder::MakePath(dirname, second.get<std::string>());
185 }
186 }
187 };
188
189 if (j.contains("cache") && j["cache"].is_object()) {
190 parse(j["cache"], "");
191 }
192
193 // Create some empty DLL files. Engine & patch detection depend on them.
194 for (const auto& s : {"harmony.dll", "ultimate_rt_eb.dll", "dynloader.dll", "accord.dll"}) {
195 auto it = file_mapping.find(s);
196 if (it != file_mapping.end()) {
197 FileFinder::Game().OpenOutputStream(s);
198 }
199 }

Callers

nothing calls this directly

Calls 6

GameClass · 0.85
OpenInputStreamMethod · 0.80
OpenOutputStreamMethod · 0.80
SetImportantFileMethod · 0.80
endMethod · 0.45
StartMethod · 0.45

Tested by

no test coverage detected