open source

This commit is contained in:
lvfulong
2020-11-11 16:17:13 +08:00
parent 4d989f3ecb
commit bc4ca748de
2441 changed files with 623057 additions and 2 deletions
+624
View File
@@ -0,0 +1,624 @@
/**
@file JNIFun.cpp
@brief
@author James
@version 1.0
@date 2016_5_19
*/
#include <jni.h>
#include <android/log.h>
#include <stdio.h>
#include <stdlib.h>
#ifdef ANDROID
#include <sys/syscall.h>
#define gettidv1() syscall(__NR_gettid)
#define gettidv2() syscall(SYS_gettid)
#endif
#include <downloadCache/JCAndroidFileSource.h>
#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
#include <android/bitmap.h>
#include <downloadMgr/JCDownloadMgr.h>
#include <util/Log.h>
#include "JCConch.h"
//#include "JSWrapper/LayaWrap/JSMarket.h"
#include "CToJavaBridge.h"
#include "Audio/JCAudioManager.h"
#include "JSWrapper/LayaWrap/JSInput.h"
#include "util/JCZipFile.h"
#include "JCSystemConfig.h"
#include "JSWrapper/LayaWrap/JSGlobalExportCFun.h"
#include "JCConchRender.h"
#include "JCScriptRuntime.h"
#include "JSWrapper/LayaWrap/Video/JSVideo.h"
#include <imageLib/JCImageRW.h>
using namespace laya;
extern int g_nInnerWidth;
extern int g_nInnerHeight;
extern bool g_bGLCanvasSizeChanged;
extern std::string gRedistPath;
//------------------------------------------------------------------------------
bool g_bEngineInited = false;
std::mutex g_kReadyLock;
laya::JCConch* g_pConch = NULL;
extern AAssetManager* g_pAssetManager;
extern std::string gAssetRootPath;
extern std::string gAPKExpansionMainPath;
extern std::string gAPKExpansionPatchPath;
bool g_bInBKGround=false;
int64_t g_nInitTime = 0;
//------------------------------------------------------------------------------
extern "C"
{
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_configSetParamExt(JNIEnv * env, jobject obj,jstring p_strParamExt);//extparam
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_configSetURL(JNIEnv * env, jobject obj,jstring p_strUrl);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_configSetIsPlug(JNIEnv * env, jobject obj, jboolean p_bIsPlug);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_InitDLib(JNIEnv * env, jobject obj,jobject assetManager,jint nDownloadThreadNum,jstring p_strAssetRootPath,jstring p_strCachePath, jstring p_strAPKExpansionMainPath, jstring p_strAPKExpansionPatchPath,int threadMode,int debugMode,int debugPort);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_SetLocalStoragePath(JNIEnv * env, jobject obj,jstring p_strLocalStorage );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_handleTouch(JNIEnv * env, jobject obj,jint type,jint id,jint x,jint y );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_handleKeyEvent(JNIEnv * env, jobject obj,jint keyCode,jint actionType);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_handleJoystickEvent(JNIEnv * env, jobject obj,float THUMBL_xOffset,float THUMBL_yOffset,float THUMBR_xOffset,float THUMBR_yOffset,float LT_Offset,float RT_Offset);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_handleDeviceMotionEvent(JNIEnv * env, jobject obj, float ax, float ay, float az, float agx, float agy, float agz, float ra, float rb, float rg, float interval);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_handleDeviceOrientationEvent(JNIEnv * env, jobject obj, float ra, float rb, float rg);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_ReleaseDLib(JNIEnv * env, jobject obj );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_OnAppDestroy(JNIEnv * env, jobject obj );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_OnAppPause(JNIEnv * env, jobject obj );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_OnGLReady(JNIEnv * env, jobject obj, int width,int height );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_OnAppResume(JNIEnv * env, jobject obj );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onDrawFrame(JNIEnv * env, jobject obj );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onVSyncCallback(JNIEnv * env, jobject obj, jlong vsynctm);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_exportStaticMethodToC(JNIEnv * env, jobject obj, jstring packcls);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_closeExternalWebView(JNIEnv * env, jobject obj );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_alertCallback(JNIEnv * env, jobject obj );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onSensorChanged(JNIEnv * env, jobject obj,float arc );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_reloadJS(JNIEnv * env, jobject obj );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onRunCmd(JNIEnv* env, jobject obj, jint cmd, jint nParam1, jint nParam2 );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_RunJS(JNIEnv* env, jobject obj, jstring jsstr );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_postMsgToRuntime(JNIEnv* env, jobject obj, jstring msg, jstring params);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onBuyPropsCallback( JNIEnv * env, jobject obj,jstring p_sDesc );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onInviteCallback( JNIEnv * env, jobject obj,jstring p_sJsonParam );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_exitToPlatform( JNIEnv * env, jobject obj );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_audioMusicPlayEnd( JNIEnv * env, jobject obj );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_networkChanged(JNIEnv* env, jobject obj, jint nNetworkType );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_loginCallback(JNIEnv* env, jobject obj, jstring p_sJsonParam);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_authorizeCallback(JNIEnv* env, jobject obj, jstring p_sJsonParam);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_refreshTokenCallback(JNIEnv* env, jobject obj, jstring p_sJsonParam);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_rechargeEvent(JNIEnv* env, jobject obj, jstring p_sJsonParam );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_inputChange(JNIEnv* env, jobject obj, jint keycode );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onShareAndFeed( JNIEnv * env, jobject obj,jstring p_sJsonParam );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onGetGameFriends( JNIEnv * env, jobject obj,jstring p_sJsonParam);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onSendToDesktop( JNIEnv * env, jobject obj,jstring p_sJsonParam);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onLogout( JNIEnv * env, jobject obj,jstring p_sJsonParam);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onMarketInit( JNIEnv * env, jobject obj,jstring p_sJsonParam );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onTopicCircle( JNIEnv * env, jobject obj,jstring p_sJsonParam );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onSwitchUserCallback( JNIEnv * env, jobject obj,jstring p_sJsonParam );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onEnterPlatformCallback( JNIEnv * env, jobject obj,jstring p_sJsonParam );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onEnterBBSCallback( JNIEnv * env, jobject obj,jstring p_sJsonParam );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onEnterFeedbackCallback( JNIEnv * env, jobject obj,jstring p_sJsonParam );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onEnterAccountMgrCallback( JNIEnv * env, jobject obj,jstring p_sJsonParam );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onSetRechargeInfoCallback( JNIEnv * env, jobject obj,jstring p_sJsonParam );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onSendMessageToPlatformCallback( JNIEnv * env, jobject obj,jstring p_sJsonParam );
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onGetUserInfoCallback(JNIEnv * env, jobject obj, jstring p_sJsonParam);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onGetAvailableLoginTypeCallback(JNIEnv * env, jobject obj, jstring p_sJsonParam);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_setLocalizable(JNIEnv * env, jobject obj, jboolean p_bIsLocalPackage);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_callConchJSFunction(JNIEnv* env, jobject obj, jstring sFunctionName,jstring sJsonParam,jstring sCallbackFunction);
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_captureScreenCallBack(JNIEnv* env, jobject obj, jint w, jint h, jbyteArray byteArray);
JNIEXPORT jboolean JNICALL Java_layaair_game_browser_ConchJNI_onBackPressed(JNIEnv* env, jobject obj);
JNIEXPORT void JNICALL Java_layaair_game_browser_LayaVideoPlayer_emit(JNIEnv* env, jobject obj, jlong ptr, jstring str);
JNIEXPORT void JNICALL Java_layaair_game_browser_LayaVideoPlayer_transferBitmap(JNIEnv* env, jobject obj, jobject bitmap, jlong dataPtr);
};
void postCmdToMainThread(int p_nCmd, int p_nParam1, int p_nParam2)
{
CToJavaBridge::JavaRet ret;
char buffer[60];
sprintf(buffer, "[%d,%d,%d]",p_nCmd,p_nParam1,p_nParam2);
std::string params(buffer);
CToJavaBridge::GetInstance()->callMethod(-1, true, CToJavaBridge::JavaClass.c_str(), "postCmdToMain", params.c_str(), ret);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_configSetURL(JNIEnv * env, jobject obj,jstring p_strUrl)
{
char* pstrUrl =(char*) env->GetStringUTFChars( p_strUrl, NULL );
g_kSystemConfig.m_strStartURL = pstrUrl;
LOGI("JNI seturl%s", pstrUrl);
env->ReleaseStringUTFChars(p_strUrl, pstrUrl);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_configSetIsPlug(JNIEnv * env, jobject obj, jboolean p_bIsPlug)
{
JCSystemConfig::s_bIsPlug = p_bIsPlug;
LOGI("JNI setIsPlug%d", p_bIsPlug);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_configSetParamExt(JNIEnv * env, jobject obj,jstring p_strParamExt)
{
char* pstrParamExt =(char*) env->GetStringUTFChars( p_strParamExt, NULL );
g_kSystemConfig.m_jsonparamExt = pstrParamExt;
LOGI("JNI setParamExt%s", pstrParamExt);
env->ReleaseStringUTFChars(p_strParamExt, pstrParamExt);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_InitDLib(JNIEnv * env, jobject obj,jobject assetManager,int nThreadNum,jstring p_strAssetRootPath, jstring p_strCachePath , jstring p_strAPKExpansionMainPath, jstring p_strAPKExpansionPatchPath,int threadMode,int debugMode,int debugPort)
{
LOGI("JNI InitDLib");
if(g_pConch)
{
LOGI("JNI has an old conch object! delete it");
//如果上次不正常退出,如果时间太短,可能有的线程还在创建过程中。所以等待一会儿。
//例如g_pConch突然为null,可能有人还在用。
std::this_thread::sleep_for(std::chrono::milliseconds(500));
//必须走完整流程,例如有的线程还在创建,完了后就正常跑,然后这里g_pConch又被删了
Java_layaair_game_browser_ConchJNI_ReleaseDLib(env,obj);
LOGI("JNI del old end");
}
//这个不要放到开始,以影响面上面的异常处理
g_nInitTime=tmGetCurms();
char* pAssetRootPath =(char*) env->GetStringUTFChars( p_strAssetRootPath, NULL );
char* pCachePath = (char*)env->GetStringUTFChars( p_strCachePath, NULL);
char* pAPKExpansionMain =(char*) env->GetStringUTFChars( p_strAPKExpansionMainPath, NULL );
char* pAPKExpansionPatch = (char*)env->GetStringUTFChars( p_strAPKExpansionPatchPath, NULL);
LOGI( "JNI InitDownLoadManager CachePath=%s, assetroot=%s, APKExpansionMain=%s, APKExpansionPatch=%s ", pCachePath, pAssetRootPath, pAPKExpansionMain, pAPKExpansionPatch);
gRedistPath = pCachePath;
gRedistPath +="/";
gAssetRootPath = pAssetRootPath;
gAPKExpansionMainPath= pAPKExpansionMain;
gAPKExpansionPatchPath = pAPKExpansionPatch;
if( assetManager==0 || !(g_pAssetManager = AAssetManager_fromJava(env,assetManager)))
{
LOGI("JNI Warning! AssetManager =NULL!! 下面要采用jar流程了。");
JCZipFile* pZip = new laya::JCZipFile();
if( strstr(pAssetRootPath,".jar" ) ||strstr(pAssetRootPath,".JAR" )||strstr(pAssetRootPath,".zip" )||strstr(pAssetRootPath,".apk")||strstr(pAssetRootPath,".APK") ){
if(pZip->open(pAssetRootPath))
{
LOGI("JNI 打开jar成功。");
pZip->InitDir("assets");
}
JCConch::s_pAssetsFiles = pZip;
}
else
{
LOGI("JNI 没有设置assetMgr,也没有传入jar包。");
}
}
else
{
laya::JCAndroidFileSource* pAssets = new laya::JCAndroidFileSource();
pAssets->Init(g_pAssetManager, "","", "", "");
JCConch::s_pAssetsFiles = pAssets;
}
env->ReleaseStringUTFChars(p_strAssetRootPath, pAssetRootPath);
env->ReleaseStringUTFChars(p_strCachePath, pCachePath);
env->ReleaseStringUTFChars(p_strAPKExpansionMainPath, pAPKExpansionMain);
env->ReleaseStringUTFChars(p_strAPKExpansionPatchPath, pAPKExpansionPatch);
THREAD_MODE nMode = (THREAD_MODE)(threadMode);
if (nMode == THREAD_MODE_SINGLE)
{
g_kSystemConfig.m_nThreadMODE = nMode;
LOGI(">>>>>>Thread Mode = single");
}
else if (nMode == THREAD_MODE_DOUBLE)
{
g_kSystemConfig.m_nThreadMODE = nMode;
LOGI(">>>>>>Thread Mode = double");
}
else
{
LOGI(">>>>>>Thread Mode = %d", g_kSystemConfig.m_nThreadMODE);
}
g_pConch = new laya::JCConch(nThreadNum,(laya::JS_DEBUG_MODE)debugMode,debugPort);
g_pConch->m_funcPostMsgToMainThread = std::bind(postCmdToMainThread, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_SetLocalStoragePath(JNIEnv * env, jobject obj,jstring p_strLocalStorage )
{
char* pLocalStoragePath =(char*) env->GetStringUTFChars( p_strLocalStorage, NULL );
LOGI( "JNI localStoragePath=%s", pLocalStoragePath);
env->ReleaseStringUTFChars(p_strLocalStorage, pLocalStoragePath);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_handleTouch( JNIEnv * env, jobject obj,jint type,jint id,jint x,jint y )
{
enum java_motion_Action
{
ACTION_DOWN=0,
ACTION_UP=1,
ACTION_MOVE=2,
ACTION_POINTER_DOWN=5,
ACTION_POINTER_UP=6,
};
switch(type)
{
case java_motion_Action::ACTION_DOWN:
{
inputEvent e;
e.nType =E_ONTOUCHSTART;
e.nTouchType = type;
e.posX = x;
e.posY = y;
e.id = id;
strncpy(e.type, "touchstart", 256 );
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
break;
}
case java_motion_Action::ACTION_UP:
{
inputEvent e;
e.nType = E_ONTOUCHEND;
e.nTouchType = type;
e.posX = x;
e.posY = y;
e.id = id;
strncpy(e.type, "touchend", 256 );
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
break;
}
case java_motion_Action::ACTION_MOVE:
{
inputEvent e;
e.nType = E_ONTOUCHMOVE;
e.nTouchType = type;
e.posX = x;
e.posY = y;
e.id = id;
strncpy(e.type, "touchmove", 256);
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
break;
}
case java_motion_Action::ACTION_POINTER_DOWN:
{
inputEvent e;
e.nType = E_ONACTION_POINTER_DOWN;
e.nTouchType = type;
e.posX = x;
e.posY = y;
e.id = id;
strncpy(e.type, "touchstart", 256 );
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
break;
}
case java_motion_Action::ACTION_POINTER_UP:
{
inputEvent e;
e.nType = E_ONACTION_POINTER_UP;
e.nTouchType = type;
e.posX = x;
e.posY = y;
e.id = id;
strncpy(e.type, "touchend", 256 );
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
break;
}
}
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_handleKeyEvent(JNIEnv * env, jobject obj,jint keyCode,jint actionType)
{
enum android_key_Code
{
KEYCODE_BACK = 4,
KEYCODE_DPAD_UP = 19,
KEYCODE_DPAD_DOWN = 20,
KEYCODE_DPAD_LEFT = 21,
KEYCODE_DPAD_RIGHT = 22,
KEYCODE_DPAD_CENTER = 23,
KEYCODE_VOLUME_UP = 24,
KEYCODE_VOLUME_DOWN = 25,
KEYCODE_ENTER = 66,
KEYCODE_MENU = 82,
KEYCODE_BUTTON_A = 96,
KEYCODE_BUTTON_B = 97,
KEYCODE_BUTTON_X = 99,
KEYCODE_BUTTON_Y = 100,
KEYCODE_BUTTON_L1 = 102,
KEYCODE_BUTTON_R1 = 103,
KEYCODE_BUTTON_L2 = 104,
KEYCODE_BUTTON_R2 = 105,
KEYCODE_BUTTON_THUMBL = 106,
KEYCODE_BUTTON_THUMBR = 107,
KEYCODE_BUTTON_START = 108,
KEYCODE_BUTTON_SELECT = 109,
};
enum android_key_Action
{
ACTION_DOWN = 0,
ACTION_UP = 1,
};
if(actionType == android_key_Action::ACTION_DOWN)
{
inputEvent e;
e.nType = E_ONKEYDOWN;
e.keyCode = keyCode;
strncpy(e.type, "keydown", 256 );
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
}
else if(actionType == android_key_Action::ACTION_UP)
{
inputEvent e;
e.nType =E_ONKEYUP;
e.keyCode = keyCode;
strncpy(e.type, "keyup", 256 );
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
}
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_handleJoystickEvent( JNIEnv * env, jobject obj,float THUMBL_xOffset,float THUMBL_yOffset,float THUMBR_xOffset,float THUMBR_yOffset,float LT_Offset,float RT_Offset )
{
inputEvent e;
e.nType = E_JOYSTICK;
e.fTHUMBL_xOffset = THUMBL_xOffset;
e.fTHUMBL_yOffset = THUMBL_yOffset;
e.fTHUMBR_xOffset = THUMBR_xOffset;
e.fTHUMBR_yOffset = THUMBR_yOffset;
e.fLT_Offset = LT_Offset;
e.fRT_Offset = RT_Offset;
strncpy(e.type, "onjoystick", 256 );
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_handleDeviceMotionEvent(JNIEnv * env, jobject obj, float ax, float ay, float az, float agx, float agy, float agz, float ra, float rb, float rg, float interval)
{
DeviceMotionEvent e;
e.nType = E_DEVICEMOTION;
e.ax = ax;
e.ay = ay;
e.az = az;
e.agx = agx;
e.agy = agy;
e.agz = agz;
e.ra = ra;
e.rb = rb;
e.rg = rg;
e.interval = interval;
strncpy(e.type, "devicemotion", 256);
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_handleDeviceOrientationEvent(JNIEnv * env, jobject obj, float ra, float rb, float rg)
{
DeviceOrientationEvent e;
e.nType = E_DEVICEORIENTATION;
e.ra = ra;
e.rb = rb;
e.rg = rg;
strncpy(e.type, "deviceorientation", 256);
JCScriptRuntime::s_JSRT->dispatchInputEvent(e);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_ReleaseDLib(JNIEnv * env, jobject obj )
{
LOGI("JNI del engine");
JCAudioManager::GetInstance()->stopMp3();
if(g_pConch)
{
if(tmGetCurms()- g_nInitTime<2000)
{
LOGI("JNI exit need a little wait");
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
if (g_bInBKGround)
{
LOGI("JNI App in background!");
JCConch::s_pConchRender->willExit();
}
g_pConch->onAppDestory();
if (g_kSystemConfig.m_nThreadMODE==THREAD_MODE_SINGLE)
{
JCScriptRuntime::s_JSRT->stop();
}
delete g_pConch;
g_pConch=NULL;
}
g_bEngineInited = false;
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_OnAppDestroy(JNIEnv * env, jobject obj )
{
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_OnAppPause(JNIEnv * env, jobject obj )
{
LOGI("JNI OnAppPause");
g_bInBKGround = true;
if( laya::JCAudioManager::GetInstance()->getMp3Mute() == false && laya::JCAudioManager::GetInstance()->getMp3Stopped() == false)
{
JCAudioManager::GetInstance()->pauseMp3();
}
laya::JCAudioManager::GetInstance()->m_pWavPlayer->pause();
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_OnAppResume(JNIEnv * env, jobject obj )
{
LOGI("JNI OnAppResume");
if (!g_pConch)
return;
g_bInBKGround=false;
//继续声音
if( laya::JCAudioManager::GetInstance()->getMp3Mute() == false && laya::JCAudioManager::GetInstance()->getMp3Stopped() == false)
{
laya::JCAudioManager::GetInstance()->resumeMp3();
}
laya::JCAudioManager::GetInstance()->m_pWavPlayer->resume();
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_OnGLReady(JNIEnv * env, jobject obj, int width,int height )
{
LOGI("JNI onGLReady tid=%ld", gettidv1());
auto pRender = JCConch::s_pConchRender;
if( g_nInnerWidth!=width || g_nInnerHeight != height )
{
LOGI("JNI surface innersize changed : g_nInnerWidth=%d,g_nInnerHeight=%d",width,height);
g_nInnerWidth = width;
g_nInnerHeight = height;
g_bGLCanvasSizeChanged=true;
}
LOGI("JNI init dev w=%d,h=%d",width,height);
//pRender->onGLDeviceLosted();
pRender->onGLReady();
g_kReadyLock.lock();
if( !g_bEngineInited )
{
//启动js线程
g_pConch->onAppStart();
g_bEngineInited = true;
if (g_kSystemConfig.m_nThreadMODE==THREAD_MODE_SINGLE)
{
JCScriptRuntime::s_JSRT->start(JCConch::s_pConch->m_strStartJS.c_str());
}
}
g_kReadyLock.unlock();
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onDrawFrame(JNIEnv * env, jobject obj )
{
auto pRender = JCConch::s_pConchRender;
if (pRender)
{
pRender->renderFrame(0,false);
}
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onVSyncCallback(JNIEnv * env, jobject obj, jlong VSynctm) {
double vsynctm = VSynctm / 1e6;
//auto ctm = laya::tmGetCurms();
//LOGE("---TM:%f,d=%f,cur=%f,d=%f", (float)vsynctm, (float)(vsynctm - lastVSYNC1) , ctm,(ctm-vsynctm));
if (JCScriptRuntime::s_JSRT) {
JCScriptRuntime::s_JSRT->onVSyncEvent(vsynctm);
}
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_closeExternalWebView(JNIEnv * env, jobject obj )
{
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_alertCallback(JNIEnv * env, jobject obj )
{
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_exportStaticMethodToC(JNIEnv * env, jobject obj, jstring packcls)
{
const char* rawPackCls = env->GetStringUTFChars(packcls, NULL);
CToJavaBridge::GetInstance()->addStaticMethod(env,rawPackCls);
env->ReleaseStringUTFChars(packcls, rawPackCls);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onSensorChanged(JNIEnv * env, jobject obj,float arc )
{
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_reloadJS(JNIEnv * env, jobject obj )
{
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_onRunCmd(JNIEnv* env, jobject obj, jint cmd, jint nParam1, jint nParam2 )
{
if(g_pConch )
{
g_pConch->onRunCmdInMainThread( cmd, nParam1, nParam2 );
}
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_RunJS(JNIEnv* env, jobject obj, jstring jsstr )
{
if (g_pConch && JCScriptRuntime::s_JSRT && jsstr)
{
const char* rawString = env->GetStringUTFChars(jsstr, NULL);
JCScriptRuntime::s_JSRT->callJSString(rawString);
env->ReleaseStringUTFChars(jsstr, rawString);
}
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_postMsgToRuntime(JNIEnv* env, jobject obj, jstring msg, jstring params)
{
const char* rawMsg = env->GetStringUTFChars(msg, NULL);
const char* rawParams = env->GetStringUTFChars(params, NULL);
env->ReleaseStringUTFChars(msg, rawMsg);
env->ReleaseStringUTFChars(params, rawParams);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_exitToPlatform( JNIEnv * env, jobject obj )
{
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_audioMusicPlayEnd( JNIEnv * env, jobject obj )
{
laya::JCMp3Interface* pMp3Player = laya::JCAudioManager::GetInstance()->m_pMp3Player;
if( pMp3Player )
{
pMp3Player->onPlayEnd();
}
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_networkChanged(JNIEnv* env, jobject obj, jint nNetworkType )
{
JCScriptRuntime::s_JSRT->onNetworkChanged(nNetworkType);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_inputChange(JNIEnv* env, jobject obj, jint keycode)
{
if (JCScriptRuntime::s_JSRT->m_pCurEditBox)
{
JCScriptRuntime::s_JSRT->m_pCurEditBox->onInput();
}
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_setLocalizable(JNIEnv * env, jobject obj, jboolean p_bIsLocalPackage)
{
JCSystemConfig::s_bLocalizable = p_bIsLocalPackage;
LOGI("setLocalizable%d", p_bIsLocalPackage);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_callConchJSFunction(JNIEnv* env, jobject obj, jstring p_sFunctionName,jstring p_sJsonParam,jstring p_sCallbackFunction)
{
const char* sFunctionName = env->GetStringUTFChars(p_sFunctionName, NULL);
const char* sJsonParam = env->GetStringUTFChars(p_sJsonParam, NULL);
const char* sCallbackFunction = env->GetStringUTFChars(p_sCallbackFunction, NULL);
LOGI(">>>>>>>>Java_layaair_game_browser_ConchJNI_callConchJSFunction functionName=%s, jsonParam=%s, callbackFuncton=%s",sFunctionName, sJsonParam,sCallbackFunction );
JCScriptRuntime::s_JSRT->callJC( sFunctionName,sJsonParam,sCallbackFunction );
env->ReleaseStringUTFChars(p_sFunctionName, sFunctionName);
env->ReleaseStringUTFChars(p_sJsonParam, sJsonParam);
env->ReleaseStringUTFChars(p_sCallbackFunction, sCallbackFunction);
}
//------------------------------------------------------------------------------
JNIEXPORT void JNICALL Java_layaair_game_browser_ConchJNI_captureScreenCallBack(JNIEnv* env, jobject obj, jint w, jint h, jbyteArray byteArray) {
jint len = env->GetArrayLength(byteArray);
jbyte* ba = env->GetByteArrayElements(byteArray, JNI_FALSE);
char* result = new char[len];
memcpy(result, ba, len);
JSInput::getInstance()->captureScreenCallBack(result,len, w, h);
env->ReleaseByteArrayElements(byteArray, ba, 0);
}
//------------------------------------------------------------------------------
JNIEXPORT jboolean JNICALL Java_layaair_game_browser_ConchJNI_onBackPressed(JNIEnv* env, jobject obj)
{
LOGI(">>>>>>>>Java_layaair_game_browser_ConchJNI_onBackPressed");
bool ret = JCScriptRuntime::s_JSRT->onBackPressed();
return jboolean(ret);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_LayaVideoPlayer_emit(JNIEnv* env, jobject obj, jlong ptr, jstring str)
{
JSVideo* pVideo = reinterpret_cast<JSVideo*>(ptr);
if(!pVideo)
return;
const char* evtName = env->GetStringUTFChars(str, NULL);
// LOGI("[DEBUG][Video]Call emit function %s", evtName);
pVideo->CallHandle(evtName);
env->ReleaseStringUTFChars(str, evtName);
}
JNIEXPORT void JNICALL Java_layaair_game_browser_LayaVideoPlayer_transferBitmap(JNIEnv* env, jobject obj, jobject bitmap, jlong dataPtr)
{
AndroidBitmapInfo bmpInfo={0};
if(AndroidBitmap_getInfo(env, bitmap, &bmpInfo) < 0)
{
// LOGE("[Debug][Video]bitmap: Error getInfo");
return;
}
char** dataFromBmp=NULL;
if(AndroidBitmap_lockPixels(env,bitmap,(void**)&dataFromBmp))
{
// LOGE("[Debug][Video]bitmap: Error lockPixels ");
return;
}
// LOGI("[Debug][Video]Call native transferBitmap %ld", dataPtr);
BitmapData* pBitmapData = reinterpret_cast<BitmapData*>(dataPtr);
if(!pBitmapData)
{
// LOGE("[Debug][Video]Error pBitmapData");
AndroidBitmap_unlockPixels(env,bitmap);
return;
}
pBitmapData->reconfigure(bmpInfo.width, bmpInfo.height, 32, ImgType_unknow);
memcpy(pBitmapData->m_pImageData, dataFromBmp, sizeof(int32_t) * pBitmapData->m_nWidth * pBitmapData->m_nHeight);
AndroidBitmap_unlockPixels(env,bitmap);
}
//-----------------------------END FILE--------------------------------