This repository has been archived on 2024-05-15. You can view files and clone it, but cannot push or open issues or pull requests.
fugg/fugg-client/src/main.cpp

86 lines
2.1 KiB
C++

#include <iostream>
#include <emscripten/heap.h>
#include <fugg.h>
#include <flyff.h>
#include <emscripten.h>
#include <emscripten/bind.h>
// #include "client.h"
#define TRACE_ALLOC 0
void *malloc(size_t size) {
// void * operator new(std::size_t size) {
// This malloc is always called from the runtime.
if ((*flyff::malloc) != nullptr) {
// Since this malloc is always called from the interop, we need to
// transform it to point to the actual address where the WASM runtime memory
// resides.
const auto &ptr = fugg::ModulePointer<void>{
(*flyff::malloc)(size)
};
#if TRACE_ALLOC
std::cout << "FLYFF: Allocated INSIDE " << size << " bytes at " << reinterpret_cast<void*>(ptr.as_raw()) << std::endl;
#endif
return ptr;
} else {
auto ptr = emscripten_builtin_malloc(size);
#if TRACE_ALLOC
std::cout << "FUGG: Allocated OUTSIDE " << size << " bytes at " << reinterpret_cast<void*>(ptr) << std::endl;
#endif
return ptr;
}
}
void free(void *ptr_) {
if ((*flyff::free) != nullptr) {
const auto &ptr = fugg::RuntimePointer<void>{ptr_};
(*flyff::free)(ptr.as_raw());
#if TRACE_ALLOC
std::cout << "FLYFF: Free'd INSIDE pointer at " << reinterpret_cast<void*>(ptr.as_raw()) << std::endl;
#endif
} else {
emscripten_builtin_free(ptr_);
#if TRACE_ALLOC
std::cout << "FUGG: Free'd OUTSIDE pointer at " << reinterpret_cast<void*>(ptr) << std::endl;
#endif
}
}
void get_text(const std::string& text) {
const auto &neuz = flyff::Neuz::instance();
const auto &result = neuz.get_text(text);
std::cout << text << " = \"" << result << "\"" << std::endl;
}
EMSCRIPTEN_BINDINGS(fugg) {
emscripten::function("get_text", &get_text);
};
int main() {
using flyff::Neuz;
std::cout << "Hello world from fugg!" << std::endl;
std::cout << "Initialising runtime... ";
auto &neuz = Neuz::instance();
std::cout << "Ok!" << std::endl;
std::cout << "Starting Flyff..." << std::endl;
return neuz.main();
}