130 lines
3.7 KiB
C++
130 lines
3.7 KiB
C++
#include "de_mrbesen_cppplugins_CppPlugin.h"
|
|
#include "de_mrbesen_cppplugins_CppPlugin_CppListener.h"
|
|
|
|
#include <iostream>
|
|
#include <dlfcn.h> //dynamic linking
|
|
|
|
#include "cppplugin.h" //plugin definitions
|
|
|
|
//jfieldID DATAFIELDID = 0;
|
|
jclass CPPPLUGINCLASS = 0;
|
|
CppPlugin* plugin = 0;
|
|
|
|
/*
|
|
void setData(CppPlugin* d, JNIEnv* env, jobject thisobj) {
|
|
std::cout << "set data: " << DATAFIELDID << std::endl;
|
|
env->SetLongField(thisobj, DATAFIELDID, reinterpret_cast<jlong>(d));
|
|
}
|
|
|
|
CppPlugin* getData(JNIEnv* env, jobject thisobj) {
|
|
std::cout << "get data: " << DATAFIELDID << std::endl;
|
|
return reinterpret_cast<CppPlugin*>(env->GetLongField(thisobj, DATAFIELDID));
|
|
}*/
|
|
|
|
JNIEXPORT jboolean JNICALL Java_de_mrbesen_cppplugins_CppPlugin_init_1(JNIEnv* env, jobject thisobj) {
|
|
std::cout << "init!! aus cpp!!!" << std::endl;
|
|
|
|
CPPPLUGINCLASS = env->FindClass("de/mrbesen/cppplugins/CppPlugin");
|
|
std::cout << "findclass: " << (!CPPPLUGINCLASS) << std::endl;
|
|
//DATAFIELDID = env->GetFieldID(CPPPLUGINCLASS, "data", "J");
|
|
//std::cout << "findfield " << (!DATAFIELDID) << std::endl;
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
* Method: loadPlugin
|
|
* Signature: (Ljava/lang/String;)Z
|
|
*/
|
|
JNIEXPORT jboolean JNICALL Java_de_mrbesen_cppplugins_CppPlugin_loadPlugin(JNIEnv* env, jobject thisobj, jstring path) {
|
|
const char* cpath = env->GetStringUTFChars(path, 0);
|
|
|
|
//open plugin
|
|
std::cout << "open plugin " << cpath << std::endl;
|
|
void* handle = dlopen(cpath, RTLD_LAZY);
|
|
if (!handle)
|
|
return false;
|
|
//throw std::string("Error: plugin could not be opend. ") + dlerror();
|
|
|
|
//load function pointer
|
|
initfptr initf = (initfptr) dlsym(handle, "init");
|
|
if(!initf) {
|
|
std::cout << "Could not find function init" << std::endl;
|
|
dlclose(handle);
|
|
return false;
|
|
}
|
|
|
|
plugin = initf();
|
|
|
|
//store data
|
|
//setData(data, env, thisobj);
|
|
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
* Method: onLoad
|
|
* Signature: ()V
|
|
*/
|
|
JNIEXPORT void JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onLoad(JNIEnv* env, jobject thisobj) {
|
|
//TODO
|
|
std::cout << "lib::onLoad()" << std::endl;
|
|
plugin->onLoad();
|
|
}
|
|
|
|
/*
|
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
* Method: onEnable_
|
|
* Signature: ()V
|
|
*/
|
|
JNIEXPORT void JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onEnable_1(JNIEnv* env, jobject thisobj) {
|
|
//TODO
|
|
std::cout << "lib::onEnable()" << std::endl;
|
|
plugin->onEnable();
|
|
}
|
|
|
|
/*
|
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
* Method: onDisable_
|
|
* Signature: ()V
|
|
*/
|
|
JNIEXPORT void JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onDisable_1(JNIEnv* env, jobject thisobj) {
|
|
//TODO
|
|
std::cout << "lib::onDisable()" << std::endl;
|
|
plugin->onDisable();
|
|
}
|
|
|
|
/*
|
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
* Method: fireEvent
|
|
* Signature: (Lde/mrbesen/cppplugins/CppEvent;I)Lde/mrbesen/cppplugins/CppEvent;
|
|
*/
|
|
JNIEXPORT jobject JNICALL Java_de_mrbesen_cppplugins_CppPlugin_fireEvent(JNIEnv* env, jobject thisobj, jobject event, jint functionid) {
|
|
//TODO
|
|
return event;
|
|
}
|
|
|
|
/*
|
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
* Method: onCmd
|
|
* Signature: (Lorg/bukkit/command/CommandSender;Lorg/bukkit/command/Command;Ljava/lang/String;[Ljava/lang/String;)Z
|
|
*/
|
|
JNIEXPORT jboolean JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onCmd(JNIEnv* env, jobject thisobj, jobject sender, jobject cmd, jstring label, jobjectArray args) {
|
|
//TODO
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
* Method: getListener
|
|
* Signature: ()[Lde/mrbesen/cppplugins/CppPlugin/CppListener;
|
|
*/
|
|
JNIEXPORT jobjectArray JNICALL Java_de_mrbesen_cppplugins_CppPlugin_getListener(JNIEnv* env, jobject thisobj) {
|
|
jclass clas = env->FindClass("de/mrbesen/cppplugins/CppPlugin/CppListener");
|
|
jobjectArray arr = env->NewObjectArray(0, clas, 0);
|
|
return arr;
|
|
}
|